所以我正在使用discord.py
造成不和谐Client
。我正在使用on_voice_state_update
来查看成员的VoiceState
是否更改。
如果成员在特定的VoiceChannel
内,则我希望客户端使用该成员的用户名作为该信道的名称来创建一个新的语音信道,并将该成员移动到该新的语音信道内。这是我的代码:
import discord, asyncio
app = discord.Client()
@app.event
async def on_voice_state_update(user_name, user_id, after):
name2 = str(user_name)
ch = app.get_channel(660213767820410918)
guild = app.get_guild(660213767820410893)
member = str(user_id)
if after.channel == ch:
await guild.create_voice_channel(name=(name2+'`s Room'), category=guild.get_channel(660213767820410908) ,user_limit=99 ,overwrites=(user_name ,{'manage_channels': True}))
await guild.member.move_to(channel, reason=None)
这不起作用。谁能帮我吗?
答案 0 :(得分:0)
有几个错误。
首先,事件on_voice_state_update
接受三个参数,分别是member
,before
和after
,而不是user_name
,user_id
和after
。
使用guild.create_voice_channel
函数时,您没有传递适当的字典,而忘记将channel
分配给新创建的频道(这就是channel
未定义的原因)。 / p>
最后,您应该使用member.move_to
而不是guild.member.move_to
,因为guild.member
是未定义的。
import discord, asyncio
app = discord.Client()
@app.event
async def on_voice_state_update(member, before, after):
username = str(member)
guild = app.get_guild(660213767820410893)
ch = guild.get_channel(660213767820410918)
if after.channel == ch:
channel = await guild.create_voice_channel(
name = (username+"'s Room"),
category = guild.get_channel(660213767820410908),
user_limit = 99,
overwrites = {member: discord.PermissionOverwrite(manage_channels=True)}
)
await member.move_to(channel)
最后,请检查该应用程序是否在服务器中并具有服务器上的Move Members
权限,否则member.move_to
将引发discord.Forbidden
错误。