#channel #slack #bot #slack-bot #archive #outdated #helper

archive_bot

用于管理过时频道的 Slack 机器人助手

7 个版本

0.2.2 2023年2月24日
0.2.1 2023年2月23日
0.1.3 2023年2月17日

#1238 in Web 编程

34 每月下载量

GPL-3.0+

180KB
740

Archive Bot

用于管理过时且非常小的频道的 Slack 机器人助手。在其当前版本中,它运行一次然后结束,意味着它应该在计划中运行,例如在 cron 作业或 Lambda 函数中。

配置

Archive bot 需要一些数据才能开始工作

  • Slack 机器人令牌
  • 通知 频道 ID
  • 过滤器前缀(可选)
    • 机器人将忽略带有这些前缀的频道。
  • 消息(可选)
    • 配置发送带有更新前缀的消息。
  • 陈旧度(可选)
    • 配置频道在被认为是“旧”之前需要多久没有消息。
  • 小频道阈值(可选)
    • 配置频道在被认为是“小”之前需要有多小。
let bot = ArchiveBot {
  // Bot tokens look like: xoxb-xxxxxxxyourtokenxxxxxxx.
  token: env::var("SLACK_BOT_TOKEN").expect("Error: environment variable SLACK_BOT_TOKEN is not set."),
  // Use the channel ID and not the name.
  notification_channel_id: env::var("SLACK_CHANNEL_ID").expect("Error: environment variable SLACK_CHANNEL_ID is not set."),
  // Ignore channels beginning with these prefixes.
  filter_prefixes: vec!["-"],
  // Messages to send (one is picked at random).
  message_headers: vec![
    "Hey, you've got some cleaning up to do!",
    "Hey boss, take a look at these, will ya?",
  ],
  // How long before a channel is stale (in seconds).
  stale_after: 6 * 7 * 24 * 60 * 60,
  // How small a "small" channel is.
  small_channel_threshold: 3,
  // Whether to send a secondary notification to a different channel (message only).
  notify_secondary_channel: true,
  // The ID of a secondary channel.
  secondary_notification_channel_id:  env::var("SLACK_CHANNEL_2_ID").expect("Error: environment variable SLACK_CHANNEL_2_ID is not set."),
  // The message prefix to send to the secondary channel. Will be suffixed with a link to the primary channel.
  secondary_message_headers: vec![
    "Hey folks! I, uh... made a list for you. Of channels. That you should archive. Maybe.",
    "Hey everyone! If you want the satisfaction of crossing a task off your list, I have one!",
  ],
  ..ArchiveBot::default()
};

或者,使用默认值

let bot = ArchiveBot {
  token: env::var("SLACK_BOT_TOKEN").expect("Error: environment variable SLACK_BOT_TOKEN is not set."),
  notification_channel_id: "C01A02A03A04".to_string(),
  ..ArchiveBot::default()
};

实现

目前这个机器人由一个运行时和一个单独的操作组成。更多操作和配置选项待定。

match bot.run().await {
  Ok(_) => println!("Success!"),
  Err(e) => panic!("Uhoh! {:}", e),
}

有关更多实现细节,请参阅 示例目录

设置 Slack

请参阅 Slack 文档中的 基本应用设置

Slack API 管理员 > [您的应用] > 功能 > OAuth & 权限 生成您的机器人用户 OAuth 令牌。

您的应用需要以下权限

  • 频道:历史记录
  • 频道:加入
  • 频道:读取
  • 聊天:写入
  • :历史记录
  • :读取

日志记录

Archive Bot 实现了 log crate 并不直接产生输出。请参阅 示例目录 中的 simplelog 实现。

查找 Slack 频道 ID

要查找 Slack 频道的 ID,您可以点击频道名称以获取更多信息,并在底部找到它。

Screenshot of Slack channel info with an arrow pointing to the Channel ID at the bottom of the window.

依赖项

~7–20MB
~310K SLoC