为啥我的不和谐机器人只执行一次我的命令,而且只执行一次?
Posted
技术标签:
【中文标题】为啥我的不和谐机器人只执行一次我的命令,而且只执行一次?【英文标题】:Why is my discord bot only executing my command one time and one time only?为什么我的不和谐机器人只执行一次我的命令,而且只执行一次? 【发布时间】:2017-09-10 11:15:22 【问题描述】:我正在完成一个简单的声音剪辑 Discord 机器人,我通过在 python 中回收一个基本的音乐机器人示例来制作。我想要机器人做的就是进入调用命令(!womble)的用户的语音通道,从声音剪辑文件夹中播放随机声音剪辑,然后离开语音通道。
“很简单,对吧?”当然不是,显然不是这个 API。
经过一堆试验和错误,寻找至少 3 个 API 修订版,我让机器人实际执行命令.....一次。该命令的任何进一步提示都会遇到蟋蟀。我可以执行 !summon 并将机器人带入频道,但 !womble 命令不再起作用。
def bot_leave(self, ctx):
state = self.get_voice_state(ctx.message.server)
coro = state.voice.disconnect()
fut = asyncio.run_coroutine_threadsafe(coro, state.voice.loop)
try:
fut.result()
except:
# an error happened sending the message
pass
@commands.command(pass_context=True, no_pm=True)
async def womble(self, ctx):
state = self.get_voice_state(ctx.message.server)
opts =
'default_search': 'auto',
'quiet': True,
if state.voice is None:
success = await ctx.invoke(self.summon)
if not success:
return
try:
random_clip = clip_dir + "\\" + random.choice(os.listdir(clip_dir))
player = state.voice.create_ffmpeg_player(random_clip, after=lambda: self.bot_leave(ctx))
player.start()
except Exception as e:
fmt = 'An error occurred while processing this request: ```py\n: \n```'
await self.bot.send_message(ctx.message.channel, fmt.format(type(e).__name__, e))
我尝试进入 Python 聊天是 Discord API 服务器,但很像我的机器人,我遇到了蟋蟀。 (猜猜这就是我试图从已经进行 4 次对话的聊天中寻求支持的原因。)
【问题讨论】:
【参考方案1】:我猜您可能不再需要帮助,但以防万一您应该尝试删除 coroutine.result() 并直接运行它。即改变:
def bot_leave(self, ctx):
state = self.get_voice_state(ctx.message.server)
coro = state.voice.disconnect()
fut = asyncio.run_coroutine_threadsafe(coro, state.voice.loop)
try:
fut.result()
except:
# an error happened sending the message
pass
到:
def bot_leave(self, ctx):
state = self.get_voice_state(ctx.message.server)
coro = state.voice.disconnect()
try:
asyncio.run_coroutine_threadsafe(coro, state.voice.loop)
except:
# an error happened sending the message
pass
这是我看到你的代码 sn-p 唯一能想到的,但问题可能出在代码的其他地方。
【讨论】:
Welp,它设法在一个方面改进了机器人:机器人现在将重新加入服务器。第一次完美无缺,第二次,机器人出现了......然后就坐在那里。它似乎不喜欢多次创建播放器......或者至少这是我的假设。以上是关于为啥我的不和谐机器人只执行一次我的命令,而且只执行一次?的主要内容,如果未能解决你的问题,请参考以下文章