discord.py 机器人可以在语音通话中将其他人的声音静音吗?
Can a discord.py bot mute the voice of others in a voice call?
我是 Among Us Discord 公会的所有者,我在其中实施了一些机器人。当我们重播语音通话时,有时人们会忘记将自己静音以便我们能听到他们的声音,这通常会透露出有价值的信息。
我正在尝试设计一组命令,让一个人可以轻松地将语音通道中的所有人静音。他们使用命令 claim "VC Name"
来获取指定语音通道的命令,然后使用命令 set_mute "true/false"
将所有人静音或取消静音。第一部分我听不懂,但我正在努力处理第二部分的代码,实际上 mutes/unmutes 语音频道成员。
在阅读 discord.py 的文档时,我发现了一些可能有效的选项,但我不知道如何执行它们。
discord.VoiceState
(Documentation):discord.VoiceState
具有属性 mute
、muted
和 self_mute
。也许可以用 member.VoiceState.mute = True
、member.VoiceState.muted = True
或 member.VoiceState.self_mute = True
之类的方式修改成员的语音状态。我不确定如何使用此方法,因为使用上面的代码行会导致 AttributeError
.
discord.Member.edit
(Documentation):member.Member.edit
可以选择将 mute
设置为 True。这实际上将成员设置为服务器静音(我似乎无法撤消它),所以我宁愿避免使用此选项,除非通过此方法有解决方案。
- 我可以设置一个独特的角色,分配给语音频道中的所有成员,机器人可以根据命令设置发言权限。这是我现在正在使用的方法,但我想使用另一种方法(如果存在)。
这是我现在拥有的代码。在最后一个 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.
所以这意味着你不能设置任何值,这个属性 returns True
/False
取决于用户是否静音 his/herself。
- 对于你的第二个选项,这似乎是最好的方法。是的,没有权限的成员无法取消静音,但您可以通过代码或手动取消静音。
- 对于您的第三个选项,这是另一种解决方案,但我不会建议您使用
member.edit
。
所以我猜你正在尝试制作名为 set_to_muted
和 set_to_unmuted
的 2 个方法,但是为此,你必须编辑 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)
我是 Among Us Discord 公会的所有者,我在其中实施了一些机器人。当我们重播语音通话时,有时人们会忘记将自己静音以便我们能听到他们的声音,这通常会透露出有价值的信息。
我正在尝试设计一组命令,让一个人可以轻松地将语音通道中的所有人静音。他们使用命令 claim "VC Name"
来获取指定语音通道的命令,然后使用命令 set_mute "true/false"
将所有人静音或取消静音。第一部分我听不懂,但我正在努力处理第二部分的代码,实际上 mutes/unmutes 语音频道成员。
在阅读 discord.py 的文档时,我发现了一些可能有效的选项,但我不知道如何执行它们。
discord.VoiceState
(Documentation):discord.VoiceState
具有属性mute
、muted
和self_mute
。也许可以用member.VoiceState.mute = True
、member.VoiceState.muted = True
或member.VoiceState.self_mute = True
之类的方式修改成员的语音状态。我不确定如何使用此方法,因为使用上面的代码行会导致AttributeError
.discord.Member.edit
(Documentation):member.Member.edit
可以选择将mute
设置为 True。这实际上将成员设置为服务器静音(我似乎无法撤消它),所以我宁愿避免使用此选项,除非通过此方法有解决方案。- 我可以设置一个独特的角色,分配给语音频道中的所有成员,机器人可以根据命令设置发言权限。这是我现在正在使用的方法,但我想使用另一种方法(如果存在)。
这是我现在拥有的代码。在最后一个 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.
所以这意味着你不能设置任何值,这个属性 returns True
/False
取决于用户是否静音 his/herself。
- 对于你的第二个选项,这似乎是最好的方法。是的,没有权限的成员无法取消静音,但您可以通过代码或手动取消静音。
- 对于您的第三个选项,这是另一种解决方案,但我不会建议您使用
member.edit
。
所以我猜你正在尝试制作名为 set_to_muted
和 set_to_unmuted
的 2 个方法,但是为此,你必须编辑 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)