質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Discord

Discordは、ゲーマー向けのボイスチャットアプリです。チャット・通話がブラウザ上で利用可能で、個人専用サーバーも開設できます。通話中でも音楽を流したり、PC画面を共有できるなど多機能な点が特徴です。

非同期処理

非同期処理とは一部のコードを別々のスレッドで実行させる手法です。アプリケーションのパフォーマンスを向上させる目的でこの手法を用います。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

1801閲覧

Discord.py returnが邪魔してる説 リアクションに反応しない

watn

総合スコア0

Discord

Discordは、ゲーマー向けのボイスチャットアプリです。チャット・通話がブラウザ上で利用可能で、個人専用サーバーも開設できます。通話中でも音楽を流したり、PC画面を共有できるなど多機能な点が特徴です。

非同期処理

非同期処理とは一部のコードを別々のスレッドで実行させる手法です。アプリケーションのパフォーマンスを向上させる目的でこの手法を用います。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/09/27 15:26

編集2021/09/27 15:38

前提・実現したいこと

プログラミング超初心者です
ここからのテンプレを元にいろいろいじってます

やりたいこと
①BOTが接続したら任意のメッセージを任意のチャンネル(CHANNEL_ID4)で発言する 
②発言したメッセージにあらかじめ設定したリアクション(EMOJI_n(13))がついたら、リアクションを元に処理を変える
処理1 EMOJI_n(1
3)がついたら任意のチャンネル(CHANNEL_IDn(13)で任意のメッセージを発言する
処理2 発言先で特定のリアクション(EMOJI_4)がついたらロールを付与
処理3 EMOJI_n(1
3)のリアクションが消されたら処理1で発言したメッセージと処理2で付与したロールを削除

まだできたところは①のみです。
色々参考記事を見つけては応用して作ってます

発生している問題・疑問

①returnを使った処理をするとその下のBOT起動&discordに接続するコードまでたどり着けていないようです
②payloadは何をしているものですか?
③テストでリアクションを検知したらメッセージを発言するようにしましたがどうやら検知していないみたいです
EMOJI_nでの絵文字の指定の仕方がおかしいのか単純にコードがおかしいのかわかりません

該当のソースコード

@bot.event() async def on_add_reaction(payload): if payload.channel_id != CHANNEL_ID4: return else: if payload.emoji.neme != EMOJI_1 or EMOJI_2 or EMOJI_3: return else: if payload.emoji.neme == EMOJI_1: channel = bot.get_channel(CHANNEL_ID1) await channel.send('xxxxx') else: if payload.emoji.neme == EMOJI_2: channel = bot.get_channel(CHANNEL_ID2) await channel.send('xxxxx') else: if payload.emoji.neme == EMOJI_3: channel = bot.get_channel(CHANNEL_ID3) await channel.send('xxxxx') return token = getenv('DISCORD_BOT_TOKEN') bot.run(token)

ソースコード

python

1import discord 2from discord.ext import commands 3from os import getenv 4import traceback 5 6 7bot = commands.Bot(command_prefix='/') 8 9 10CHANNEL_ID1 = 0123456789 11CHANNEL_ID2 = 0123456789 12CHANNEL_ID3 = 0123456789 13CHANNEL_ID4 = 0123456789 14EMOJI_1 = "<:xxx:0123456789>" 15EMOJI_2 = "<:xxx:0123456789>" 16EMOJI_3 = "<:xxx:0123456789>" 17EMOJI_4 = "<:xxx:0123456789>" 18 19@bot.event 20async def on_command_error(ctx, error): 21 orig_error = getattr(error, "original", error) 22 error_msg = ''.join(traceback.TracebackException.from_exception(orig_error).format()) 23 await ctx.send(error_msg) 24 25 26@bot.command() 27async def ping(ctx): 28 await ctx.send('pong') 29 30 31@bot.event #BOTが接続したら任意のメッセージを任意のチャンネルで発言する 32async def on_ready(): 33 await bot.change_presence(activity=discord.Game(name="ピポピポ", type=1)) 34 channel = bot.get_channel(CHANNEL_ID4) 35 await channel.send('xxxxx') 36 37 38@bot.command() 39async def ready(ctx): 40 channel = bot.get_channel(CHANNEL_ID4) 41 await channel.send('xxxxx') 42 43 44@bot.event() 45async def on_add_reaction(payload): 46 if payload.channel_id != CHANNEL_ID4: 47 return 48 else: 49 if payload.emoji.neme != EMOJI_1 or EMOJI_2 or EMOJI_3: 50 return 51 else: 52 if payload.emoji.neme == EMOJI_1: 53 channel = bot.get_channel(CHANNEL_ID1) 54 await channel.send('xxxxx') 55 else: 56 if payload.emoji.neme == EMOJI_2: 57 channel = bot.get_channel(CHANNEL_ID2) 58 await channel.send('xxxxx') 59 else: 60 if payload.emoji.neme == EMOJI_3: 61 channel = bot.get_channel(CHANNEL_ID3) 62 await channel.send('xxxxx') 63 return 64 65 66token = getenv('DISCORD_BOT_TOKEN') 67bot.run(token)

試したこと

BOT起動&Discordに接続するコードをreturnより手前に記述するとBOT自体は動きます(pingに反応する)

補足情報(FW/ツールのバージョンなど)

Discord.py 1.7.3
GitHub

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

return という命令は、その関数を終了させる、という命令です

なので、その関数で処理を続けたいなら、returnは使ってはいけません


ってよくみたら、

if payload.emoji.neme != EMOJI_1 or EMOJI_2 or EMOJI_3:

これは、
if (((payload.emoji.neme != EMOJI_1) or EMOJI_2) or EMOJI_3):

って動作となりますが、これでいいんでしょうか

投稿2021/09/27 22:47

編集2021/09/27 22:51
y_waiwai

総合スコア88042

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問