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

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

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

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

イベントハンドラ

マウスのクリックなどの特定の事象(イベント)が発生した時に実行される処理のことをイベントハンドラと呼びます。

Python

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

Q&A

1回答

2505閲覧

discord.pyのイベントが発火しない

Hkr-Y

総合スコア96

Discord

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

イベントハンドラ

マウスのクリックなどの特定の事象(イベント)が発生した時に実行される処理のことをイベントハンドラと呼びます。

Python

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

0グッド

0クリップ

投稿2022/01/06 11:03

編集2022/01/06 13:35

やりたいこと

メンバーのボイスチャンネルの移動の検知

できないこと

on_voice_state_updateのイベントが発火しない。
しかしon_messageは発火している。

コード

python

1import discord 2 3//下記の二行を追加しました 4intents = discord.Intents.all() 5client = discord.Client(intents=intents) 6 7TOKEN = '---' 8afkCH_ID = "xxx" 9commandCH_ID = "ooo" 10 11client = discord.Client() 12 13# チャンネル入退室時の通知処理 14@client.event 15async def on_voice_state_update(member, before, after): 16 17 # チャンネルへの入室ステータスが変更されたとき(ミュートON、OFFに反応しないように分岐) 18 if before.channel != after.channel: 19 # 通知メッセージを書き込むテキストチャンネル(チャンネルIDを指定) 20 botRoom = client.get_channel(afkCH_ID) 21 22 # 入退室を監視する対象のボイスチャンネル(チャンネルIDを指定) 23 announceChannelIds = commandCH_ID 24 25 # 退室通知 26 if before.channel is not None and before.channel.id in announceChannelIds: 27 await botRoom.send("**" + before.channel.name + "** から、__" + member.name + "__ が抜けました!") 28 # 入室通知 29 if after.channel is not None and after.channel.id in announceChannelIds: 30 await botRoom.send("**" + after.channel.name + "** に、__" + member.name + "__ が参加しました!") 31 32 # メッセージ受信時に動作する処理 33@client.event 34async def on_message(message): 35 # メッセージ送信者がBotだった場合は無視する 36 if message.author.bot: 37 return 38 39 if message.content == '/help': 40 await message.channel.send('How can I help you?') 41 42# Botの起動とDiscordサーバーへの接続 43client.run(TOKEN) 44

環境

サーバーはHeroku CLIを利用してます
python-3.8.9
os mac

補足

[質問の編集]下記の全てにチェックをいれまいた
イメージ説明

質問に至らない点があったら教えてください。
何か私のコードに問題を見つけたらご教授ください。
宜しくお願いします。

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

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

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

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

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

guest

回答1

0

https://discordpy.readthedocs.io/ja/latest/api.html#discord.on_voice_state_update

This requires Intents.voice_states to be enabled.

intentをonにしてください

参考

投稿2022/01/06 11:35

編集2022/01/06 11:36
pecop

総合スコア411

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

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

Hkr-Y

2022/01/06 13:41

頂いた回答を参考にコードとbotの設定を変更しましたが、それでも意図した通りにイベントが発火しませんでした。 コードとbotの設定の変更点は質問を編集して追加しました。 正確にはコードに intents = discord.Intents.all() client = discord.Client(intents=intents) を追加し、botの設定は写真に写っている項目全てにチェック(ON)にしました。 intentをonにする方法が違うのでしょうか? お手数おかけしてしまい申し訳ありません。 もしお時間に余裕がありましたら回答宜しくお願い致しします。
pecop

2022/01/06 23:53

```python # 退室通知 if before.channel is not None and before.channel.id == announceChannelIds: await botRoom.send("**" + before.channel.name + "** から、__" + member.name + "__ が抜けました!") # 入室通知 if after.channel is not None and after.channel.id == announceChannelIds: await botRoom.send("**" + after.channel.name + "** に、__" + member.name + "__ が参加しました!") ``` かな
pecop

2022/01/06 23:54

`is`じゃなくて`==`
pecop

2022/01/08 06:18

うまくいきましたか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問