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

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

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

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

Q&A

3回答

910閲覧

discordpyでグローバルチャットが上手く動かない

BroccoliGG

総合スコア4

Python

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

0グッド

0クリップ

投稿2021/02/27 20:27

前提・実現したいこと

Discordpyでグローバルチャットを作りたくてコードを書きましたが、うまく動作しません。
上手く動作させるためにはどうすればよいでしょうか。

発生している問題・エラーメッセージ

コンソールには何も表示されませんでした。

該当のソースコード

python

1@client.event 2async def on_message(message): 3 if message.author.bot: 4 return 5 6 with open("gchat_ch.txt") as f: 7 gchat_ch=f.read() 8 9 GLOBAL_WEBHOOK_NAME = "Broccoli Candy" 10 11 if message.channel.id == gchat_ch: 12 await message.delete() 13 14 channels = client.get_all_channels() 15 global_channels = [ch for ch in channels if ch.id == gchat_ch] 16 17 for channel in global_channels: 18 ch_webhooks = await channel.webhooks() 19 webhook = discord.utils.get(ch_webhooks, name=GLOBAL_WEBHOOK_NAME) 20 21 if webhook is None: 22 continue 23 embed = discord.Embed(description=f"\n{message.content}", color=0x00bfff) 24 embed.set_author(name=f"{message.author.name}#{message.author.discriminator}(ID:{message.author.id})") 25 embed.set_footer(text=f"{message.guild.name} | サーバーID:{message.guild.id}",icon_url=message.guild.icon_url_as(format="png")) 26 embed.set_thumbnail(url="https://cdn.discordapp.com/avatars/"+str(message.author.id)+"/"+message.author.avatar+".png") 27 if message.attachments: 28 message2 = await client.get_channel(731052201601925151).send(file=await ctx.message.attachments[0].to_file()) 29 embed.set_image(url=message2.attachments[0].url) 30 await webhook.send(content=embed,username="Broccoli Candy")

試したこと

inの代わりにre.searchを使用して試しましたが状況は全く変わらず、エラーメッセージも出力されません。
gchat_ch.txtの中身には000000,111111のような感じでグローバルチャット化したいチャンネルIDを指定しています。

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

WindowsのVScode上のターミナルでデバックしました。
VScode上のPythonバージョンは3.9.2です。
他にUbuntu20.04環境下でデバックも行いましたがWindowsと同様の症状です。
Discordのテキストチャンネル上での権限不足は何度も確認しましたが一切ありません。

またgchat_ch.txtに記入しているチャンネルID間のみに制限する理由としては、gchat_ch.txtには信頼できるDiscordサーバー上のチャンネルIDを指定しておくことで、荒らしやセルフボット等を未然に防ぐためです。

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

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

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

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

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

guest

回答3

0

ctxは要らないと思います

投稿2021/10/31 03:44

gx1285

総合スコア136

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

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

0

グローバルチャットのコードの下に

@client.event async def on_message(message): # 略

がありませんか?
もしある場合は、グローバルチャットのon_messageと一つに統一するとうまくいきます。

投稿2021/07/22 05:53

編集2021/10/31 12:07
Awayume

総合スコア60

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

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

0

python

1if message.channel.id == gchat_ch:

これが原因だと思われます。

python

1gchat_ch = 00000,11111

gchat_chがこのようになっている場合、message.channel.idも00000,11111にしないといけません。
これだと動かないのでgchat_chをリストに
if 分岐で in を。

python

1gchat_ch = ['00000','11111'] 2if message.channel.id in gchat_ch:

投稿2021/11/10 07:23

8ka1alu

総合スコア38

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問