Slack cho phép lưu trữ các kênh. Chúng tôi hiện có khoảng 50 kênh không còn hoạt động với 0 người dùng.
Làm cách nào tôi có thể lưu trữ hiệu quả các kênh này mà không phải tham gia và lưu trữ từng kênh một?
Slack cho phép lưu trữ các kênh. Chúng tôi hiện có khoảng 50 kênh không còn hoạt động với 0 người dùng.
Làm cách nào tôi có thể lưu trữ hiệu quả các kênh này mà không phải tham gia và lưu trữ từng kênh một?
Câu trả lời:
Để thực sự "lưu trữ chậm" các kênh, tức là tương đương với việc chạy "/ lưu trữ" trong mỗi kênh, bạn sẽ cần một số phép thuật API.
Đầu tiên, hãy thiết lập mã thông báo API cho người dùng của bạn trong nhóm có liên quan trên https://api.slack.com/custom-integations/legacy-tokens , sau đó truy cập https://api.slack.com/methods/channels. liệt kê / kiểm tra để có được danh sách các kênh của bạn cùng với các id kênh.
Sau đó, sử dụng các id kênh này để chạy https://api.slack.com/methods/channels.archive/test cho các kênh bạn muốn lưu trữ.
Đây là một tập lệnh bash nhanh và bẩn (sử dụng jq ) Gần đây tôi đã chạy trên máy Mac của mình để lưu trữ hàng trăm kênh có chứa "sk-" trong tên kênh:
TOKEN="replace-this-with-your-user-api-token-in-the-relevant-team"
curl "https://slack.com/api/channels.list?token=$TOKEN&exclude_archived=true&pretty=1" > /tmp/channels.list
IDS=$(cat /tmp/channels.list | jq '.channels[] | select(.name | contains("sk-")) | .id' | sed -e 's/"//g')
for ID in $IDS; do
URL="https://slack.com/api/channels.archive?token=$TOKEN&channel=$ID&pretty=1"
echo $URL
curl "$URL"
done
Nó đã hoàn thành công việc, lưu trữ khoảng 2-3 kênh mỗi giây.
channels.list
sang mới hơn conversations.list
và sử dụng param &types=private_channel
. Ditto đổi channels.archive
thànhconversations.archive
Đi vào Cài đặt nhóm> Lưu trữ tin nhắn. Chọn tab "Xuất", sau đó "bắt đầu xuất". Theo thông tin trên trang này, điều này sẽ tạo ra một tệp bao gồm "một loạt các tệp JSON: một tệp mỗi kênh mỗi ngày với hoạt động, cộng với một tệp chứa thông tin về tất cả các thành viên trong nhóm của bạn."
Slack sẽ mất một thời gian để chuẩn bị xuất khẩu này, đặc biệt nếu bạn có nhiều lưu lượng tin nhắn và phương tiện truyền thông trong các kênh (nó cũng xuất hình ảnh). Sau một thời gian, nó sẽ gửi e-mail cho bạn để biết bản xuất đã sẵn sàng để tải xuống.
Đây là đoạn mã PHP nhanh mà tôi sử dụng để xóa tất cả các kênh sk
<?php
$json_url = "https://slack.com/api/channels.list?token=YOURTOKEN&pretty=1";
$json = file_get_contents($json_url);
$data = json_decode($json);
$m=count($data->channels);
echo "total channels:".$m."<br>";
$k=0;
for($i=0; $i<$m; $i++) {
//echo $data->channels[$i]->name."<br>";
$cn=$data->channels[$i]->name;
$cn2=$data->channels[$i]->is_archived;
if (strpos($cn, 'sk-') !== false and $cn2==0) {
echo $data->channels[$i]->name."(".$cn2.") (id=";
$cid=$data->channels[$i]->id;
echo $cid.');<br>';
$json_url2 = "https://slack.com/api/channels.archive?token=YOURTOKEN&channel=".$cid."&pretty=1";
$json2 = file_get_contents($json_url2);
++$k;
}
}
echo "total sk channels archived:".$k."<br>";
?>
Đây là tập lệnh kotlin tôi đã viết gần đây để lưu trữ tất cả các kênh chưa có tin nhắn mới trong 3 tháng.
Lưu ý: Nếu bạn đạt giới hạn API trong nhật ký, hãy đợi 2 phút và chạy lại.
import com.squareup.moshi.Moshi
import khttp.get
import java.time.ZonedDateTime
data class JsonChannelsList(
val channels: List<JsonChannel>
)
data class JsonChannel(
val id: String,
val name_normalized: String,
val is_archived: Boolean,
val is_private: Boolean
)
data class JsonMessages(
val messages: List<JsonMessage>
)
data class JsonMessage(
val username: String,
val text: String,
val ts: String
)
data class ArchiveableChannel(
val id: String,
val name: String
)
/**
* Arg 0 is your slack api token with user access (to be able to read channels)
*/
fun main(args: Array<String>) {
val moshi = Moshi.Builder().build()
val jsonChannelsAdapter = moshi.adapter(JsonChannelsList::class.java)
val jsonMessagesAdapter = moshi.adapter(JsonMessages::class.java)
val slackToken = args[0]
val list = get("https://slack.com/api/channels.list?token=$slackToken&exclude_archived=true&pretty=1")
val jsonChannelsList: JsonChannelsList = jsonChannelsAdapter.fromJson(list.jsonObject.toString()) as JsonChannelsList;
println("${list.statusCode} - ${list.jsonObject}")
val channels = jsonChannelsList.channels
val archivable = arrayListOf<ArchiveableChannel>()
println("Finding Archiveable Channels")
for (c in channels) {
println("Channel ${c.name_normalized} ")
if (c.is_private) {
println("private, skipped.")
continue
}
if (c.is_archived) {
println("archived already.")
continue
}
val channelId = c.id;
val THREE_MONTHS_AGO = ZonedDateTime.now().minusMonths(3).toEpochSecond()
val msgs = get("https://slack.com/api/channels.history?token=$slackToken&channel=$channelId&oldest=$THREE_MONTHS_AGO&count=1")
// print("messages ")
// println(msgs.jsonObject)
val jsonMessages: JsonMessages = jsonMessagesAdapter.fromJson(msgs.jsonObject.toString()) as JsonMessages
if (jsonMessages.messages.isEmpty()) {
archivable.add(ArchiveableChannel(c.id, c.name_normalized))
}
}
println("Archive Channels")
for (archiveChannel in archivable) {
println(archiveChannel)
val archivedResult = get("https://slack.com/api/channels.archive?token=$slackToken&channel=${archiveChannel.id}&pretty=1")
print("${archivedResult.statusCode} ")
print("${archiveChannel.name} ")
print("${archivedResult.jsonObject}.")
}
println("done.")
println("Archived ${archivable.size} channels.")
println("Archived $archivable")
}
Phụ thuộc cần thiết:
compile "org.jetbrains.kotlin:kotlin-stdlib:1.0.3"
compile 'khttp:khttp:0.1.0'
compile("com.squareup.moshi:moshi-kotlin:1.8.0")
Nguồn dự án tại đây: https://github.com/novoda/spike/tree/master/slackdeath