LoginSignup
4
1

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-12-04

はじめに

投稿者の自己紹介

どうもまぬおです!discord.pyでBotを開発しています。よろしくお願いします

お知らせ

Discord Bot Advent Calendar 2020
この記事はDiscord Bot Advent Calendarの5日目の記事です。ほかの方の投稿もぜひご覧になってください

1日目【Discord.py】Discord.py 1.5で追加されたIntentsを攻略する
2日目【Discord.py】チャンネルを持ったカテゴリを作成する
3日目【Discord.py】ボイスチャンネルの招待メッセージを送信する
4日目【Discord.py】Unicode絵文字とカスタム絵文字の違いを紹介

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

今回のテーマ

今回は、メッセージにリアクションをつける方法について紹介します
前回はUnicode絵文字とカスタム絵文字の違いと絵文字メッセージの送信の方法を紹介しましたが、今回はその絵文字をリアクションとしてメッセージに追加してみます
リアクションもBotのレスポンスとしてよく使いますので、ぜひ見ていってください!

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

PythonでDiscordBotを書く方法

リアクションとは

メッセージに対する反応

みなさんはリアクションをどういうタイミングで使いますか?
メッセージを読んだ意思表示をしたい時や、Twitterのいいねのような使い方をすることもあるかもしれません
image.png
また、メッセージに紐づけられることを利用して簡易的なアンケートとして使う場面もあるようですね
image.png

Botでのつけ方

メッセージにリアクションをつけますので、Messageが関数をadd_reaction()として持っています

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

この引数に代入するEmojiは前回紹介した方法で取得できますので、ぜひ参考にしてください

以上!

今回の予備知識は以上です!少ないですね
それではこれを踏まえて今回のコードを見てみましょう

実践

今回のコードです
前回のコードの返答の部分をリアクションを付ける処理に変更しています

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
前回取得の方法を紹介したUnicode絵文字とカスタム絵文字の両方を、リアクションとして付けられています

おわりに

実は…

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

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

# 中略

await Channel.send(UnicodeEmoji)
await Channel.send(CustomEmoji)

前回の絵文字メッセージを送る記事で、絵文字をこのように取得してから送る方法で紹介しました。
しかし、Unicode絵文字に限ってはもっと楽な方法がありまして

# Unicode絵文字
await Channel.send(":laughing:")
# カスタム絵文字
await Channel.send(":manuo:")

このコードのように、aliasを使う方法でも同じように絵文字を送ることができます。これなら取得の必要もないです
image.png
ではなぜあんなややこしい取得の方法を紹介したかというと、今回のリアクションで使うためEmoji型の変数を定義しておきたかったからです
絵文字はだいたい使いまわしますので、ややこしくても最初に取得しておくと便利ですよ
もちろんメッセージにのみ使う絵文字は取得しなくても良いので、状況によって使い分けてください
ただカスタム絵文字は残念ながらこの方法は使えず、前回の方法で取得する必要があります

おわりのあいさつ

前回の記事とまとめようかとも思ったのですが、前回は二つの絵文字の違いをメインで解説したかったので、二つに分けることにしました
少し短いですが、ここまで読んでいただきありがとうございました
この記事がみなさんの開発に役立つと幸いです
それでは良いDiscord Bot開発ライフを!

お知らせ

Discord Bot Advent Calendar 2020
冒頭でも紹介しましたが、この記事はDiscord Bot Advent Calendarの5日目の記事です。

明日の6日目は、@hisuie08さんの「Embedについて書こうと思います」です!
Embedは使いこなせればかっこいいと思いながらも、いまだに使い方がわかっていない機能なので楽しみです!

各種バージョン

Python3 : 3.6.9
Discord.py : 1.5.1

4
1
0

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
4
1