这是我在机器人中的代码
@Bot.event
async def on_voice_state_update(member,before,after): #Создвние войс комнат
if after.channel.id == &&&&&&&&&&&&&&&&&&:
print(f'{member} зашёл в канал')
for guild in Bot.guilds:
maincategory = discord.utils.get(guild.categories, id=$$$$$$$$$$$$$$$$$$)
channel2 = await guild.create_voice_channel(name=f'{member.display_name}`s Channel',category = maincategory)
await channel2.set_permissions(member,connect=True,mute_members=True,move_members=True,manage_channels=True)
await member.move_to(channel2)
def check(x,y,z):
return len(channel2.members) == 0
await Bot.wait_for('voice_state_update',check=check)
await channel2.delete()
这是我在终端中的错误
Traceback (most recent call last):
File "C:\Users\Макс\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0\LocalCache\local-packages\Python39\site-packages\discord\client.py", line 343, in _run_event
await coro(*args, **kwargs)
File "C:\Users\Макс\DRACULA-rms\bot.py", line 108, in on_voice_state_update
if after.channel.id == &&&&&&&&&&&&&&&&&&&&:
AttributeError: 'NoneType' object has no attribute 'id'
请帮帮我,我自己无法解决这个错误,我使用的是 Python 39
答案 0 :(得分:1)
不是最佳方式,但我想你可以使用这个:
if after:
if after.channel:
if after.channel.id == &&&&&&&&&&&&&&&&&&:
//Your code here
它基本上首先检查 after 是否为 none,如果不是,则如果 after,channel 为 none?如果不是,那么它将引用它的 id
答案 1 :(得分:0)
如果成员在此更新后(不再)处于语音频道中,则 after.channel
值为 None,如文档 here 所述。
你将不得不以某种方式处理这种情况,也许什么都不做:
if after.channel and after.channel.id == &&&&&&&&&&&&&&&&&&:
print(f'{member} зашёл в канал')