marukot-chの日記

弱小SEの雑記です

DiscordでReacji-ChannelerできるBot作って公開した(使ってみて感想ください)

Reacji Channelerとは?

「リアク字」と呼ばれる専用の絵文字リアクションを使用して、パブリックチャンネルから別のチャンネルにメッセージをサクッとコピーできます。 あるチャンネルに投稿された内容が、ワークスペース内の他のチャンネルでの会話にも役立つ場合などに便利な機能

slack.com

june29.jp

 

今回作ったBotの特徴

・Discordのスラッシュコマンドに対応(追加, 削除, 確認)

Botが見えるところなら、プライベートなチャンネルにも対応

環境変数で許可すれば、DiscordのWebhookを転送先として指定可能

・リアクションを何回でも反応するように環境変数で指定可能

・ひとつのリアクションに複数のチャンネルを登録可能

・reacji-channeler(本家)は本人にしか見えないが、このBotは他人にも見える(今のソースがそういう状態にしてあるだけで、Discordのスラッシュコマンドの関数の呼び方で挙動を変えることもできる*1

 

招待リンク

https://discord.com/api/oauth2/authorize?client_id=845237643322327060&permissions=2147871824&scope=bot%20applications.commands

*ぜひ、使ってみてください! 処理が重い場合、後述するReplitでクローンして自分専用のやつを作ってみるといいと思います!!

f:id:marukot-ch:20210523195522p:plain

Discord-Reacji-Channelerの画像


 

 

GitHubリポジトリ

github.com

 

動いてる場所(Replit)

discord-reacji-channeler - Replit

*フォークすれば簡単に自分で試せます

--------

1.右上のForkを押す

2.Consuleで./start.shに実行権限を与える

chomd 744 ./start.sh

3.左の鍵マーク「Secrets」で以下の環境変数を設定する

DISCORD_TOKEN: ここにDiscordのトークンを書き込む
LOG_LEVEL: INFOやERRORやDEBUG
IS_HEROKU: TRUEかFALSE(TRUEだとデータをDiscordに保管する(勝手にチャンネル作る))
FIRST_REACTION_CHECK: True
REACJI_CHANNELER_PERMIT_WEBHOOK_ID: webhook_id(転送先にWebhookを選ぶことができる*DiscordのWebhookのみしか動かない。複数指定する場合、;で区切る。なんでも許可するなら、allを記載する)

4.Runボタンを押して起動する

5.uptime robotで定期的にアクセスする

Discord Developer Portalの説明とかちらっと書きました

scrapbox.io

--------

 

挙動について比較

追加

Slack

f:id:marukot-ch:20210523184459p:plain

/reacji-channeler :cucumber: #cucumber

f:id:marukot-ch:20210523184747p:plain

Slackでリアク字チャンネラーが登録されたときのメッセージ1

f:id:marukot-ch:20210523184829p:plain

Slackでリアク字チャンネラーが登録されたときのメッセージ2(登録されたチャンネルに投稿される)
DIscord

f:id:marukot-ch:20210523184600p:plain

/reacji-channeler-add reaction::cucumber: channel:#cucumber

f:id:marukot-ch:20210523184653p:plain

Discordでリアク字チャンネラーが登録された後のメッセージ
確認

Slack

f:id:marukot-ch:20210523185045p:plain

/reacji-channeler list

*Slackは説明が出ないのでちょっとわかりにくい(/reacji-channeler helpで確認する必要アリ)

 

f:id:marukot-ch:20210523185016p:plain

Discord

f:id:marukot-ch:20210523185155p:plain

/reacji-channeler-list

f:id:marukot-ch:20210523185221p:plain


削除

Slack

f:id:marukot-ch:20210523185450p:plain

/reacji-channeler remove :cucumber:

f:id:marukot-ch:20210523185521p:plain

Slackでリアク字チャンネラーを削除したあとのメッセージ

Discord


f:id:marukot-ch:20210523185623p:plain

/reacji-channeler-delete reaction::cucumber: channel:#cucumber

説明文章が間違っているのに今気づいた...。リアクションの転送先を複数指定できるので、ちゃんとチャンネルまで指定する必要がある(Slackより面倒くさいね!)

f:id:marukot-ch:20210523185654p:plain

Discordでリアク字チャンネラーを削除したあとのメッセージ
全削除

Discordのやつは、全部一気に削除できたほうが便利!!と思ったので、そういう機能を付けた。だれでも実行できるので、たくさんの人がいる場合、愉快犯的に削除されてしまう気もする。。。しかし、Slackでもやろうと思えば削除していくのは可能?なのかな?? その辺教えてください!

f:id:marukot-ch:20210523185952p:plain

/reacjiChanneler purge(スラッシュコマンドは無し)

f:id:marukot-ch:20210523190041p:plain

きくやつ

f:id:marukot-ch:20210523190141p:plain

全削除(1回目は30秒制限で失敗。2回目で全削除できた)

 

動画(Slack)

youtu.be

 

動画(Discord)

youtu.be

 

*1:Migration — discord-py-slash-command documentation

にある通り、ctx.sendのパラメータに、hidden = Trueを入れるだけ