(Discord.py) 如何锁定和解锁语音通道

Posted

技术标签:

【中文标题】(Discord.py) 如何锁定和解锁语音通道【英文标题】:(Discord.py) How to lock and unlock voice channel 【发布时间】:2021-12-11 17:51:23 【问题描述】:

我是编程新手。在 *** 和 YouTube 上玩了几个小时后,我创建了 Bot,它允许为所有服务器用户(任何角色)自动创建临时语音频道,并在他们清空时删除这些频道。

async def on_voice_state_update(member, before, after):
    person_freq=['1', '2', '3']
    person = member.name
    
    if member.bot:
        return
    if str(after.channel) == "+ NEW":

        if str(after) != str(before):
            guild = member.guild
            freq = person_freq[0]
            act_voice_channels = (c.name for c in guild.voice_channels)
            for freq in person_freq:
                if freq not in act_voice_channels:
                    await after.channel.clone(name=freq)
                    channel = discord.utils.get(guild.voice_channels, name=freq)
                    await member.move_to(channel)
                    return
        
    if len(before.channel.members) == 0: 
        await before.channel.delete()

 

我故意删除了部分带有其他 'IF' 条件的代码。

现在我想为创建每个特定频道的成员添加本地管理员角色的权限。并在频道被删除后将其删除。该本地管理员需要能够“锁定”和“解锁”他自己的语音频道。 在“锁定”命令的情况下,除了服务器管理员之外,没有人允许加入频道。 在“解锁”命令的情况下 - 此禁令被解除。

我想我需要在这两个defs中写smtn

#lock
@client.command(pass_context=True)
@commands.has_permissions(**administrator**=True)
async def lock(ctx):



#unlock
@client.command(pass_context=True)
@commands.has_permissions(**administrator**=True)
async def unlock(ctx):

考虑到可能有很多这样的渠道,我该怎么做?

【问题讨论】:

this 对您有帮助吗?而不是ctx.channel 使用ctx.voice_channel AttributeError: 'Context' 对象没有属性 'Voice_channel' 看看docs voice_channel 用于公会,但不用于 ctx 我在 GitHub 上找到了this issue。从这里参考。 【参考方案1】:

感谢 @ChaoticNebula 在 GitHub 上分享相同的问题。由于新版本的 discord.py 我做了一些更正并解决了这个问题:

#lock
@client.command(pass_context=True)
@commands.has_permissions(manage_channels=True)
async def lock(ctx):
    await ctx.channel.purge (limit=1)
    channel = ctx.message.author.voice.channel
    overwrite = channel.overwrites_for(ctx.guild.default_role)
    overwrite.connect = False
    await channel.set_permissions(ctx.guild.default_role, overwrite=overwrite)


#unlock
@client.command(pass_context=True)
@commands.has_permissions(manage_channels=True)
async def unlock(ctx):
    await ctx.channel.purge (limit=1)
    channel = ctx.message.author.voice.channel
    overwrite = channel.overwrites_for(ctx.guild.default_role)
    overwrite.connect = True
    await channel.set_permissions(ctx.guild.default_role, overwrite=overwrite)

【讨论】:

以上是关于(Discord.py) 如何锁定和解锁语音通道的主要内容,如果未能解决你的问题,请参考以下文章

获取一个类别Channel的权限并设置为语音通道discord.py

如何在 discord.py 机器人加入语音通道之间添加暂停?

如何锁定和解锁 SQL SERVER 表?

10分钟后锁定和解锁屏幕时发生的崩溃如何解决?

如何从服务中可靠地捕获 Windows 登录、注销、锁定和解锁事件?

Discord.py channel.connect() 永远不会返回