【Discord.py】チャットのメッセージにリアクションを付ける

#はじめに
###投稿者の自己紹介
どうもまぬおです！discord.pyでBotを開発しています。よろしくお願いします

###お知らせ
[Discord Bot Advent Calendar 2020](https://qiita.com/advent-calendar/2020/discordbot)
この記事はDiscord Bot Advent Calendarの5日目の記事です。ほかの方の投稿もぜひご覧になってください

[1日目【Discord.py】Discord.py 1.5で追加されたIntentsを攻略する](https://qiita.com/manuo/items/7f62dc2f1e0a801a0708)
[2日目【Discord.py】チャンネルを持ったカテゴリを作成する](https://qiita.com/manuo/items/0723b9d47bddd755ea76)
[3日目【Discord.py】ボイスチャンネルの招待メッセージを送信する](https://qiita.com/manuo/items/7811987a932a1d25c780)
[4日目【Discord.py】Unicode絵文字とカスタム絵文字の違いを紹介](https://qiita.com/manuo/items/30663f4f1d4029bbee19)


他の日にも投稿しています。たくさんのViewありがとうございます！
良ければ、LGTMもよろしくお願いします！

###今回のテーマ
今回は、メッセージにリアクションをつける方法について紹介します
[前回](https://qiita.com/manuo/items/30663f4f1d4029bbee19)はUnicode絵文字とカスタム絵文字の違いと絵文字メッセージの送信の方法を紹介しましたが、今回はその絵文字をリアクションとしてメッセージに追加してみます
リアクションもBotのレスポンスとしてよく使いますので、ぜひ見ていってください！

また、この記事はある程度Botを開発したことがある**中級者向け**の記事になっています。Botの開発を始める方法などは書きませんので注意してください
初心者の方には、別の方が書いていただいた初心者向けの記事があります
ボクもこの記事からDiscord Bot開発を勉強し始めましたのでおすすめです！

[PythonでDiscordBotを書く方法](https://qiita.com/1ntegrale9/items/9d570ef8175cf178468f)
##リアクションとは
###メッセージに対する反応
みなさんはリアクションをどういうタイミングで使いますか？
メッセージを読んだ意思表示をしたい時や、Twitterのいいねのような使い方をすることもあるかもしれません
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527954/94b9ae6c-a495-eb70-07d6-2f3f7a1d6b11.png)
また、メッセージに紐づけられることを利用して簡易的なアンケートとして使う場面もあるようですね
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527954/7ba4f369-f4d9-2256-ff3a-e16beb1128b5.png)
###Botでのつけ方
メッセージにリアクションをつけますので、[Message](https://discordpy.readthedocs.io/ja/latest/api.html#message)が関数を[add_reaction()](https://discordpy.readthedocs.io/ja/latest/api.html#discord.Message.add_reaction)として持っています

~~~python3
# リアクションを付ける
await message.add_reaction(Emoji)
~~~

この引数に代入するEmojiは[前回](https://qiita.com/manuo/items/30663f4f1d4029bbee19)紹介した方法で取得できますので、ぜひ参考にしてください
###以上！
今回の予備知識は以上です！少ないですね
それではこれを踏まえて今回のコードを見てみましょう
##実践
今回のコードです
[前回](https://qiita.com/manuo/items/30663f4f1d4029bbee19)のコードの返答の部分をリアクションを付ける処理に変更しています

~~~python3
import discord

TOKEN = "TOKEN"

client = discord.Client()

# Unicode絵文字
UnicodeEmoji = "\N{SMILING FACE WITH OPEN MOUTH AND TIGHTLY-CLOSED EYES}"

# カスタム絵文字
CustomEmoji = "<:manuo:784105295328313394>"

@client.event
async def on_message(message):
    # 送信者がBotの場合は反応しない
    if message.author.bot:
        return

    # リアクションを付ける
    await message.add_reaction(UnicodeEmoji)
    await message.add_reaction(CustomEmoji)

client.run(TOKEN)
~~~
結果はこんな感じになりました
![result.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527954/78bbad80-19aa-adf0-3685-e526b7881fc2.gif)
[前回](https://qiita.com/manuo/items/30663f4f1d4029bbee19)取得の方法を紹介したUnicode絵文字とカスタム絵文字の両方を、リアクションとして付けられています
##おわりに
###実は…

~~~python3
# Unicode絵文字
UnicodeEmoji = "\N{SMILING FACE WITH OPEN MOUTH AND TIGHTLY-CLOSED EYES}"

# カスタム絵文字
CustomEmoji = "<:manuo:784105295328313394>"

# 中略

await Channel.send(UnicodeEmoji)
await Channel.send(CustomEmoji)
~~~
[前回](https://qiita.com/manuo/items/30663f4f1d4029bbee19)の絵文字メッセージを送る記事で、絵文字をこのように取得してから送る方法で紹介しました。
しかし、Unicode絵文字に限ってはもっと楽な方法がありまして

~~~python3
# Unicode絵文字
await Channel.send(":laughing:")
# カスタム絵文字
await Channel.send(":manuo:")
~~~
このコードのように、aliasを使う方法でも同じように絵文字を送ることができます。これなら取得の必要もないです
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527954/2734cf93-2ffd-c2a7-d15d-a0c27a425df1.png)
ではなぜあんなややこしい取得の方法を紹介したかというと、今回のリアクションで使うためEmoji型の変数を定義しておきたかったからです
絵文字はだいたい使いまわしますので、ややこしくても最初に取得しておくと便利ですよ
もちろんメッセージにのみ使う絵文字は取得しなくても良いので、状況によって使い分けてください
ただカスタム絵文字は残念ながらこの方法は使えず、[前回](https://qiita.com/manuo/items/30663f4f1d4029bbee19)の方法で取得する必要があります
###おわりのあいさつ
[前回の記事](https://qiita.com/manuo/items/30663f4f1d4029bbee19)とまとめようかとも思ったのですが、[前回](https://qiita.com/manuo/items/30663f4f1d4029bbee19)は二つの絵文字の違いをメインで解説したかったので、二つに分けることにしました
少し短いですが、ここまで読んでいただきありがとうございました
この記事がみなさんの開発に役立つと幸いです
それでは良いDiscord Bot開発ライフを！
###お知らせ
[Discord Bot Advent Calendar 2020](https://qiita.com/advent-calendar/2020/discordbot)
冒頭でも紹介しましたが、この記事はDiscord Bot Advent Calendarの5日目の記事です。

明日の6日目は、@hisuie08さんの「Embedについて書こうと思います」です！
[Embed](https://discordpy.readthedocs.io/ja/latest/api.html#embed)は使いこなせればかっこいいと思いながらも、いまだに使い方がわかっていない機能なので楽しみです！
###各種バージョン
Python3 : 3.6.9
Discord.py : 1.5.1