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

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

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

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

2453閲覧

【discord.py】特定のボイスチャンネルに接続/切断したらロールを追加/削除したい

HachiRai

総合スコア1

Discord

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2021/06/13 15:29

前提・実現したいこと

discord.pyを使ったbotで特定のボイスチャンネルに接続/切断したらロールを追加/削除したいです
例えば、
”A”というボイスチャンネルに接続したら”A”というロール付与、切断したらロール削除
”B”というボイスチャンネルに接続したら”B”というロール付与、切断したらロール削除

というイメージです

該当のソースコード

@client.event async def on_voice_state_update(member, before, after): roleA = member.guild.get_role(ROLEA)       roleB = member.guild.get_role(ROLEB) if(ボイスチャンネル判定)       await member.add_roles(roleA)       if(ボイスチャンネル判定)       await member.add_roles(roleB)

試したこと

うまくロール付与がされませんでした。

①ボイス参加の判定は「 on_voice_state_update」で合っているか
②ロール削除の処理はどのようにすればいいか?(上記コードには追加しか反映できていません)

ご教授いただけると助かります。
よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

> ①ボイス参加の判定は「 on_voice_state_update」で合っているか

これは、メンバーのvoiceの状態が変更された時に呼び出されます。
つまり、参加した・切断した・各種のミュートをした・各種のミュートを解除したなど全ての場合で呼び出されます。
ですから、このイベントで何かが変更された事は察知できるが、何がどのように変更されたかを判定しないと当然ボイス参加の判定はできません。

> ②ロール削除の処理はどのようにすればいいか?

Memberオブジェクトのremove_rolesメソッドを使います。
await メンバーオブジェクト.remove_roles(*roles, reason=None, atomic=True)

投稿2021/06/13 16:13

編集2021/06/13 16:23
udon-ken

総合スコア657

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

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

HachiRai

2021/06/14 11:22

ありがとうございます 追加時はbefore→未登録、after→参加 削除時はbefore→参加、after→切断 の条件が必要ということですね APIのVoiceStateを確認しましたが、未参加状態と切断状態のステータスがどれにあたるか不明(参加はchannelのIDで判定と判断)のため、実現にはもう少し調査が必要そうです
HachiRai

2021/06/15 15:34

解決しました ありがとうございました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問