Discord.pyでリアクションを検知する方法&バラメータ一覧

Monageのリアクションtip機能作ってる時にだいぶ混乱したので残しておきます〜

メッセージと同じ感じでリアクションが検知された時はon_reaction_addが呼び出されるのでリアクションがつけられるたびになにか処理したいならこんな感じになる。

@client.event
async def on_reaction_add(reaction, user):
 #ここに処理書く

バラメータ

これが意外と曲者で、なんと標準で用意された絵文字にはidとnameがふり割られていない。これでちょっと混乱した。

絵文字そのままの取得

絵文字はreaction.emojiに収納されている。printしてみると右のような絵文字がでてきた。?

reaction.message以下

reaction.message以下はmessageにいつも収納されているものとかわらない。
リアクションがつけられたメッセージの投稿者のIDを取得する際はreaction.message.author.idを。名前を取得する際はreaction.message.authorをとってくればいい。チャンネルも同じでチャンネル名はreaction.message.channel 、チャンネルIDはreaction.message.channel.idに格納されている。

リアクションをつけたユーザーの取得

これになんやかんやで一番時間がかかった。
んで結果は。。user.idを引っ張るとリアクションをつけたユーザーのIDが、userを引っ張るとユーザー名がでてきた。

絵文字の名前、IDを取得

これもちょっと時間がかかった。
まず、どうやらデフォルトの絵文字にはIDやユーザー名が割り当てられていない?(自分が試した限りデフォルトの絵文字の際はエラーが出た)のでそこは注意。
reaction.emoji.idで絵文字のIDが、reaction.emoji.nameで絵文字の名前が出てくる。reaction.emoji.nameは:ok_hand:ではなくok_handのように::が取り除かれてでてくる。

おしまい

いやー口調を事務口調(?)にするとあっというまに記事がかけてちょっとおどろきですw

なんかDiscord.pyについて質問があったら遠慮なくコメントまでどうぞ〜

あといままでいったパラメーターを全部printする文も作っておいたのでよろしければどうぞ。

 

@client.event
async def on_reaction_add(reaction, user):
	print("reaction has been added")
	print(reaction)
	print("message")
	print(reaction.message)
	print("emoji")
	print(reaction.emoji)
	print("reaction-channel")
	print(reaction.message.channel)
	print("reaction-channel-id")
	print(reaction.message.channel.id)
	print("message-content")
	print(reaction.message.content)
	print("message-author")
	print(reaction.message.author.id)
	print("reaction-by")
	print(user.id)
	print("emoji-hash")
	print(hash(reaction.emoji))
	print("emoji-name")
	print(reaction.emoji.name)
	print("emoji-id")
	print(reaction.emoji.id)

それではまたお会いできるのを楽しみにしています。

Monage Discord Editionもよろしくね!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です