python - 不和谐机器人独自离开语音频道
问题描述
我正在寻找让我的机器人在单独在语音通道中时断开连接的代码,即使它正在播放音乐也是如此。我尝试了不同的代码,但它们不起作用。这就是我所拥有的,但每当它检测到事件时我都会收到错误消息。(它在一个齿轮中),我想在一个名为 music(Music._leave) 的类中使用另一个名为 _leave 的命令
@commands.Cog.listener()
async def on_voice_state_update(self, member, before, after):
if before.channel and len(before.channel.members) == 1:
voice = get(bot.voice_clients, guild=member.guild)
if voice is None:
return
else:
#use _leave command
_离开代码:
@commands.command(name='leave', aliases=['l'])
async def _leave(self, ctx: commands.Context):
if not ctx.voice_state.voice:
embedVar = discord.Embed(title="",
description='Not connected to any voice channel.',
color=0x000000)
return await ctx.send(embed=embedVar)
await ctx.voice_state.stop()
del self.voice_states[ctx.guild.id]
解决方案
Guild.voice_client
可以是如果机器人没有连接到语音通道,你可以用一个简单的语句None
来检查它if
@client.event
async def on_voice_state_update(member, before, after):
voice_state = member.guild.voice_client
if voice_state is None:
# Exiting if the bot it's not connected to a voice channel
return
if len(voice_state.channel.members) == 1:
await voice_state.disconnect()
还要确保启用intents.voice_states
参考:
推荐阅读
- java - 不同包中的实体创建“引用未知实体”(多数据源场景)
- arrays - 使用 Matlab 获取矩阵中的唯一值
- php - 在 add_action 函数中使用 apply_filters 而不应用过滤器更改
- c - 在while循环中编辑int时C中的分段错误错误
- matlab - %A*算法中用于评估的临时矩阵
- c# - 选择堆积条形图显示的查询
- encoding - 这是什么类型的编码,它翻译成什么?}(]&[([%!"=))%%!")"
- java - Shogun 在 Linux 中缺少 java jar
- mysql - 如果我的库存中相同产品的价格相同,如何编写查询以显示数量的总和?
- android-studio - android studio错误:解析时到达文件末尾