LoginSignup
12
11

More than 3 years have passed since last update.

Discordの投稿につけたリアクションを通知するボット

Last updated at Posted at 2018-07-17

どうして作ろうと思ったか

最近は友人とグループでDiscordを使って会話をすることが多く、わざわざ返事を書くほどでもないけど反応はしたいと言う気持ちでリアクションを使っていました。しかし、リアクションをされた側は通知がこないので

A「昨日の投稿見た?」
B「リアクションつけたよ」
Aが確認してから
A「本当だ、気づかなかった」

ということが何度かありました。そこで、リアクションに通知がくればいいじゃないかとBotを書いてみました。

できないこと(追記)

コメントで@1ntegrale9のこの実装の弱点を教えてもらったのでここに追記しておきます。

以下に書く方法ではBotが起動してから受信したメッセージ以外に対して反応できません(botにキャッシュされているメッセージにしか反応ができないようです)。つまり、Herokuのように1日に1回再起動するような仕様のPaaSを利用している場合あまり使えない実装となっております。

完成品

作り方も下に書いてありますが一応完成したものはここにDiscord-Reactorと言う名前で置いてあります

一応README.mdを見ればある程度分かるように書いたつもりですがわからないところがあれば、ここのコメントでもissueでも何でも質問してください。

作り方

Botを作る

とりあえずまずBotがないといけないので私が以前書いたまあまあアクセスがあってビビってる下の記事を参考にBotを作って見てください。

Pythonで簡単なDiscord Botの作り方

Botが動くのを確認できたら次に進んでください

リアクションに反応する

上の記事ではメッセージに反応するために

@client.event
async def on_message(message):

のような関数を書きました。リアクションも似たようなものです。下のように書きます。

@client.event
async def on_reaction_add(reaction, user):

ここの引数の説明を軽くすると

  • reaction

    • discord.Reactionのクラス。リアクションの種類やreaction.messageでリアクションがついたメッセージを参照できたりする。
  • user

    • discord.Userのクラス。リアクションをつけた人のデータ。

これを利用することでメッセージを投稿した人に「リアクションがつきました」と通知ができます!

実装

特に説明する要素がない気がするので最小限のコードだけ載せておきます。

import discord

client = discord.Client()

@client.event
async def on_reaction_add(reaction, user):
    # author: リアクションがついたメッセージを書いた人
    author = reaction.message.author
    await client.send_message(author, f"{user} さんがリアクションをしました")


client.run("あなたのBotのトークン")

このコードを実行すると、誰かがあなたの投稿にリアクションをつけると通知がくるようになります。

最後に

このbotを入れてからTwitterの良いね感覚でリアクションが使えるのでかなり便利です。

このbotはできればPublicにして誰でも使えるようにしたかったのですが自分のサーバーがかなり貧弱なので諦めました。もし誰か強いサーバーが余ってる方がいましたらぜひやってくれると嬉しいです。
追記 2018/7/31
コメントでこの実装がサーバーに載せずらいことが分かりました。

12
11
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
11