Code for managing Cleanup of Stale Channels
Making it work in your environment
You'll need to install a few libraries:
pip install -r requirements.txt
You'll also need to change
archiver.py should then work from the command line. Productionized automated deployments and running on a schedule are left unspecified because every production environment is unique.
That said, if you're running on Heroku, you can create a single
clock process that runs
We recommend using
virtualenv to manage your development environment.
pip install virtualenv virtualenv env source env/bin/activate
In addition to
requirements.txt, there's also
build-requirements.txt for development environments.
./bin/install will install both.
Build a local docker image:
docker build . -t destalinator
You can also use the prebuilt Docker image at randsleadershipslack/destalinator.
Checking code coverage locally
docker run -it -p 8080:80 destalinator sh -c "coverage html --skip-covered && python -m http.server 80" open http://localhost:8080/htmlcov/
The Warner notifies channels that have been inactive for a period of time.
The archiver archives channels that have been inactive for a period of time.
The Announcer will notify a channel of all new channels created within a period of time.
The Flagger uses a ruleset defined in a specific channel to perform actions such as notifying channels of messages that have received a certain number of reactions.
You'll want to change this to the name of your Slack
Tune these two variables to decide how long after inactivity a channel should be warned for inactivity and then subsequently archived.
These channels need to be manually created by you in your Slack.
All configs in
configuration.yaml are overrideable through environment variables with the same name prefixed by
DESTALINATOR_ACTIVATED). Set array environment variables (e.g.
DESTALINATOR_IGNORE_CHANNELS) by comma delimiting items. If you only have one value for an array type environment variable add a training comma to denote the variable as a list.
- Make sure the Slackbot app is installed for your Slack
- Add a Slackbot integration, and copy the
tokenparameter from the URL provided
The best way to get an
API_TOKEN is to create a new Slack App.
Once you create and name your app on your team, go to "OAuth & Permissions" to give it the following permission scopes:
After saving, you can copy the OAuth Access Token value from the top of the same screen. It probably starts with
Destalinator can be chatty and make potentially big changes to a Slack team (by warning or archiving a large amount of channels), especially when first installed.
To minimize the risk of making a mistake, Destalinator will run in a dry-run mode unless the
DESTALINATOR_ACTIVATED environment variable exists. Set it to true and Destalinator is "active." If you want to remain in dry-run mode, ensure this variable is unset/does not exist.
DESTALINATOR_LOG_LEVEL (Optional; Default:
Tune your preferred log level for server logs or local debugging. Does not affect the ENV var specified by
If you would like to log to a Slack channel as well as the default log destination, you can set
true here. The channel
will then be pulled from
If you don't want to start archiving channels until a certain date right after introducing destalinator to your team,
you can set an ISO-8601 date here (
Disable the Flagger by setting
When should the destalinator run? Defaults to 4. Which time that means depends on your operating system time zone. Good luck!
DESTALINATOR_ prefix! The Sentry plugin uses this environment variable on its own.
If you would like to configure exception handling & tracking with Sentry, set up a Sentry account and configure this environment variable with the appropriate DSN value.
If you're on Heroku, you can provision this with:
heroku addons:create sentry:f1
Code of Conduct
As part of the Rands Leadership Slack community, the Rands Leadership Slack Code of Conduct applies to this project.