频道设置权限和move_to频道

时间:2020-07-28 14:21:28

标签: python python-3.x discord.py

所以我正在使用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)

这不起作用。谁能帮我吗?

1 个答案:

答案 0 :(得分:0)

有几个错误。

首先,事件on_voice_state_update接受三个参数,分别是memberbeforeafter,而不是user_nameuser_idafter

使用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错误。