古い Slack チャンネルを自動でアーカイブする機能を作りました

💡作ったもの

毎月第1月曜日に久しく投稿のないSlackチャンネルを1つだけアーカイブしてくれます。こういうのは機械的にやっちゃったほうがいいでしょ。

image.png

チャンネルに参加しているみんなが寂しくないように謎のメッセージを残してからアーカイブするようにしました。なお、参加者にはメンションが届くし、必要なら手動で戻せるので実害はないかと思います。

:octocat:成果物

saitota/SlackChannelArchiver
Lambda + Cloudwatch Events 起動のサーバレス構成です。

✋構築手順

README に書きました。Serverless Framework でさくっとデプロイできます。

🔧工夫したところ

Serverless Framework を活用するのが楽しくなってきました。単純にデプロイするだけではなく、ステージ毎に設定ファルを切り替えたり (environment_xxx.yml) 、プロファイルをオプションで切り替えられることを知りました。

sererless.yml
provider:
  stage:  ${opt:stage, self:custom.defaultStage}
  region: ${opt:region, self:custom.defaultRegion}
  profile: ${opt:profile, self:custom.defaultProfile}
custom:
  defaultStage: dev
  defaultRegion: ap-northeast-1
  defaultProfile: default
  otherfile:
    environment:
      dev: ${file(./environment_dev.yml)}
      prd: ${file(./environment_prd.yml)}
functions:
  fnc:
    environment:
      ${self:custom.otherfile.environment.${self:provider.stage}}
※一部省略してます

明示的に AWS-CLI プロファイル名を指定しなければ defaut を使うようにしました、個人的には事故らないように deault プロファイルを使わないので、私の環境では明示しないとエラーになります。プロファイルを指定する場合は、

console
$ serverless deploy --profile account1

ステージも指定しなければ dev 環境にデプロイされます。プロダクションなら次のように書く。間違えて prd にデプロイするようなミスがなくなります。

console
$ serverless deploy --stage prd

あと面白いのが、プラグイン serverless-plugin-aws-alerts で Invoke エラーやスロットリングに対してアラーム設定ができる。もう画面ポチポチしなくていいんだよ!

sererless.yml
custom:
  alerts:
    stages:
      - ${opt:stage, self:custom.defaultStage}
    alarms:
      - functionErrors
      - functionThrottles
plugins:
  - serverless-plugin-aws-alerts
※一部省略してます

image.png

🐛 ハマった所

Slack API を生で叩いててハマることがたまにあります。チャンネル一覧などは取得できるのに、channels.archive メソッド を呼ぶときだけエラーが。権限が不足している?ちゃんと channels:write もScope設定したし、そんなはずないんだけど…

{'ok': False, 'error': 'missing_scope', 'needed': 'channels:write', 'provided': 'identify,bot:basic'}

どうやらアーカイブなどの一部操作は BOT ユーザではきないみたいです。考えることを諦め Legacy トークンを利用しました。
後日調べたところ、 OAuth でアクセストークンを発行するのが正しいやり方のようです。

Slackで業務チャンネルの平穏を維持するbot、そして人間のトークンをbotに与える話 - Qiita
SlackでOAuth2を利用したときのメモ - Qiita

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.