7 releases
0.2.2 | Feb 24, 2023 |
---|---|
0.2.1 | Feb 23, 2023 |
0.1.3 | Feb 17, 2023 |
#1773 in Web programming
180KB
740 lines
Archive Bot
Slack bot helper for managing outdated and very small channels. In its current iteration, it runs once and ends, meaning it is meant to be run on a schedule, such as a cron job or a Lambda function.
Configuration
Archive bot needs a bit of data to get started:
- Slack Bot Token
- Notification Channel ID
- Filter Prefixes (optional)
- The bot will ignore channels with these prefixes.
- Messages (optional)
- Configure messages to send prefixing updates.
- Staleness (optional)
- Configure how long a channel has to go without a message before it's considered "old."
- Small Channel Threshold (optional)
- Configure how small a channel has to be before it's considered "small."
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()
};
Or, using default values:
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()
};
Implementation
Currently this bot consists of a single runtime, with a single action. Further actions and config options TBD.
match bot.run().await {
Ok(_) => println!("Success!"),
Err(e) => panic!("Uhoh! {:}", e),
}
See the examples directory for further implementation details.
Setting Up Slack
See Slack documentation for basic app setup.
Generate your Bot User OAuth Token on the Slack API Admin > [Your App] > Features > OAuth & Permissions.
Your app needs the following scopes:
channels:history
channels:join
channels:read
chat:write
groups:history
groups:read
Logging
Archive Bot implements the log crate and does not produce output directly. See the examples directory for an implementation of simplelog.
Finding Slack Channel ID
To find the ID of a Slack channel, you can click the channel name for more info and find it at the bottom.
Dependencies
~8–21MB
~286K SLoC