前提・実現したいこと
Discord.pyにてBOTの作成を始めたPython初心者です。
Discord鯖にBOTが参加した際にその鯖のボイスチャンネルのみのIDだけ取得し、
それを配列の中に格納し、VCに人が参加したり抜けた時にその入退室ログを「vclog」という
テキストチャンネルに送りたいのですが、どうして良いのかわかりません。
監視するボイスチャンネルと入退室ログを送るテキストチャンネルのチャンネルIDを手動で設定し、
BOTを動かすことはできたのですが、これでは毎度IDで指定しなくてはならず非常に不便です。
発生している問題・エラーメッセージ
判別の方法がわからない。
該当のソースコード
Python
1#入退室ログBOT 2import discord 3from time import sleep 4 5client = discord.Client() 6 7#vclog.txtのファイルパス 8vclogpath = "/mnt/share/vclog.txt" 9 10#入退室ログの表示を行うチャンネルのID 11logch = 878058288883834951 12#testVC_870078948246171708 13 14#監視するVCのチャンネルID 15acvc01 = 872387756381319178 16#testVC_VC_847993185254113314 17acvc02 = 856780992958431232 18#testVC_test_878057066286153788 19acvc03 = 849616978021056532 20acvc04 = 853495690026418206 21acvc05 = 870151770159054849 22acvc06 = 876407340528697375 23 24# 起動時処理 25@client.event 26async def on_ready(): 27 #コンソールへの起動通知と追記処理 28 for channel in client.get_all_channels(): 29 print("----------") 30 print("チャンネル名:" + str(channel.name)) 31 print("チャンネルID:" + str(channel.id)) 32 print("----------") 33 #チャンネル名とIDの追記 34 with open(vclogpath, mode="a", encoding="utf-8") as fout: 35 fout.write("Name:" + str(channel.name) + "___") 36 fout.write("ID:" + str(channel.id) + "\n") 37 fout.write("----------\n") 38 39##########入退室ログの表示 40@client.event 41async def on_voice_state_update(member, before, after): 42 43 #チャンネルへの入室ステータスが変更されたとき(ミュートON、OFFに反応しないように分岐) 44 if before.channel != after.channel: 45 #logを書き込むテキストチャンネル(チャンネルID) 46 botRoom = client.get_channel(logch) 47 48 #監視するボイスチャンネル(チャンネルID) 49 announceChannelIds = [acvc01, acvc02, acvc03, acvc04, acvc05, acvc06] 50 51 #退室log 52 if before.channel is not None and before.channel.id in announceChannelIds: 53 await botRoom.send("**" + before.channel.name + "** を__" + member.name + "__ が抜けました!" + " ID_" + str(member.id)) 54 print(member.name + "_が_" + before.channel.name + "_をLeft" + "___ID_" + str(member.id)) 55 with open(vclogpath, mode="a", encoding="utf-8") as fout: 56 fout.write(member.name + "_が_" + before.channel.name + "_をLeft" + "___ID_" + str(member.id) + "\n") 57 58 #入室log 59 if after.channel is not None and after.channel.id in announceChannelIds: 60 await botRoom.send("**" + after.channel.name + "** へ__" + member.name + "__ が参加しました!" + " ID_" + str(member.id)) 61 print(member.name + "_が_" + after.channel.name + "_にJoin" + "___ID_" + str(member.id)) 62 with open(vclogpath, mode="a", encoding="utf-8") as fout: 63 fout.write(member.name + "_が_" + after.channel.name + "_Join" + "___ID_" + str(member.id) + "\n") 64 65client.run()#←BOT-token
上記のソースコード
上記のソースコードでBOT起動時にチャンネルの名前とIDを取得できますが、
ボイスチャンネルとテキストチャンネルの判別ができません。
補足情報(FW/ツールのバージョンなど)
discord.py
Python3.9.1
少し整理させていただきたいのですが、
やりたいこととしては
・ユーザーがどこかしらのVCに参加
・それを特定のチャンネルにメッセージを送る
というような形かと思います。
その、「ログ」の内容は具体的に何が送信できれば良いとお考えでしょうか...?
例えば、ボイスチャンネル名や、ユーザーなど具体的なものを教えていただけると幸いです????
回答ありがとうございます。
わかりにくい質問内容で本当にすみません。
VCの入退室ログを表示するBOTの作成を目指しています。
監視対象のVCと入退室ログを表示するテキストチャンネルのIDを手動で設定することで、
目的の動作をさせることには成功しているのですが、IDで指定しているため他のサーバーでも使用する場合に毎度IDを入力する必要が出てきます。これをなんとかしたいと考えています。
https://www.youtube.com/watch?v=wvCl4TgsZhs
では、目的の動作をさせることに成功しているコードを追記していただければ回答しやすいかと思います。
先程「該当のソースコード」の部分を修正いたしました。