gpt4 book ai didi

python - discord.py 机器人可以在语音通话中静音其他人的声音吗?

转载 作者:行者123 更新时间:2023-12-03 16:47:15 28 4
gpt4 key购买 nike

我是我们之间 Discord 公会的所有者,我在其中实现了一些机器人。当我们播放语音通话时,有时人们会忘记将自己静音,以便我们可以听到它们,这通常会揭示有值(value)的信息。
我正在尝试设计一组命令,让一个人可以轻松地将语音 channel 中的每个人静音。他们使用命令 claim "VC Name"在指定的语音 channel 上声明命令,然后使用命令 set_mute "true/false"将所有人静音或取消静音。我已经关闭了第一部分,但我正在努力处理实际上使语音 channel 成员静音/取消静音的第二部分的代码。
在阅读 discord.py 的文档时,我发现了一些可能有用的选项,但我不知道如何执行它们中的任何一个。

  • discord.VoiceState ( Documentation ): discord.VoiceState有属性 mute , muted , 和 self_mute .也许可以用类似 member.VoiceState.mute = True 的东西来修改成员的语音状态。 , member.VoiceState.muted = Truemember.VoiceState.self_mute = True .我不确定如何使用此方法,因为使用上述代码行会导致 AttributeError .
  • discord.Member.edit ( Documentation ): member.Member.edit可以选择设置 mute为真。这实际上将成员设置为服务器静音(我似乎无法撤消它),所以我宁愿避免使用此选项,除非通过此方法有解决方案。
  • 我可以设置分配给语音 channel 中所有成员的唯一角色,机器人可以根据命令设置发言权限。这是我现在正在使用的方法,但我想使用另一种方法(如果存在)。

  • 这是我现在拥有的代码。下最后 if/else声明是我将在调用中将成员静音和取消静音的解决方案的地方。
    async def mute(ctx, setting):
    regex, claimed = re.compile(f"_VC: (Lobby [0-9])_"), False
    for role in cx.message.author.roles:
    if regex.search(role.name):
    claimed = True
    break
    if not claimed:
    await ctx.send("You have not claimed any of the game lobbies")
    return
    voice_channel = discord.utils.get(ctx.guild.channels, name=regex.search(role.name).group(1))
    for member in voice_channel.members:
    if setting.lower() == 'true':
    await member.voice_state.set_to_muted()
    elif setting.lower() == 'false':
    await member.voice_state.set_to_not_muted()

    最佳答案

  • 对于您的第一个选项,如果您查看 discord.VoiceState.self_mute 的 API 引用,您将看到此属性的描述:

  • Indicates if the user is currently muted by their own accord.


    所以这意味着你不能设置任何值,这个属性返回 True/ False取决于用户是否静音。
  • 对于您的第二个选择,这似乎是最好的方法。是的,没有权限的成员无法取消静音,但您可以通过代码或手动取消静音。
  • 对于您的第三个选项,这是另一种解决方案,但我不会建议您使用 member.edit .

  • 所以我猜你正在尝试创建两个名为 set_to_muted 的方法和 set_to_unmuted但是为此,您必须编辑 discord.py 库的主要 python 文件。取而代之的是,您可以创建 2 个需要 member 的异步函数。作为参数,您可以通过这种方式将它们静音。
    async def set_to_muted(member: discord.Member):
    await member.edit(mute=True)

    async def set_to_unmuted(member: discord.Member):
    await member.edit(mute=False)

    @client.command()
    async def mute(ctx, setting):
    voice_channel = discord.utils.get(ctx.guild.channels, name='')
    if setting.lower() == 'true':
    for member in voice_channel.members:
    await set_to_muted(member)
    elif setting.lower() == 'false':
    for member in voice_channel.members:
    await set_to_unmuted(member)

    关于python - discord.py 机器人可以在语音通话中静音其他人的声音吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65114798/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com