python - Python Discord Bot - 命令并发
问题描述
我目前正在为我的服务器实施 Discord Bot,但遇到了一点并发问题。
一、目标:
在 Discord 上触发特定命令后,机器人应该发送一条用于“投票目的”的消息。它发送消息,添加一个喜欢和不喜欢的反应并等待其他三个喜欢(或在 15 秒后停止)。之后,它会回复原始消息(命令触发器)。
问题:
如果我运行此命令两次(或更多),而他们都在等待反应,如果我喜欢其中一个,它还会将“喜欢计数”添加到第二个。
我假设discord.py-rewrite会并行运行同一命令的多次执行,而不会相互交互。这个假设不正确吗?还是问题出在这段特定的代码中?
我在Stackoverflow上读过 asyncio不是线程安全的,但我也读过它是。
有没有办法解决这个问题?我该如何解决这个问题?
先感谢您。
PS: 如果一次只执行一次命令,所有导入都已到位并且一切正常
@client.command()
@commands.cooldown(1, 2, commands.BucketType.guild)
async def flames(ctx, *, msg):
msg = await ctx.send(f'blah? (15sec to vote)\n```{msg}```')
await msg.add_reaction('')
await msg.add_reaction('')
reaction = None
try:
while reaction == None or \
(str(reaction.emoji) != '' and reaction.count <= 3):
reaction, user = await client.wait_for('reaction_add', timeout=15.0)
except asyncio.TimeoutError:
await msg.delete()
await sendTempMsg(ctx, 3, f'{ctx.message.author.mention} denied.')
await ctx.message.add_reaction('')
else:
await msg.delete()
await sendTempMsg(ctx, 3, f'{ctx.message.author.mention} approved!')
await ctx.message.add_reaction('')
async def sendTempMsg(ctx, time, msg):
tempMsg = await ctx.send(msg)
await asyncio.sleep(time)
await tempMsg.delete()
解决方案
推荐阅读
- r - ggplot2散点图添加自定义置信区间带线;类似于 abline() 方法
- python - 有一个特殊的网页找不到任何元素
- java - 尊重非@Primary @Bean 上的@Lazy 注释
- flutter - 如何在 dart/flutter 中监听流值
- react-native - 在 React Native 中使用离线存储图像的最佳方式
- xpath - Xpath 在每 li 之后插入 ","
- python - 如何在 django rest 框架中获得评分计数
- python - 在 Mayavi 中绘制球体给出空图
- ansible - 我在用 ansible 编写剧本时遇到错误
- prestashop - Prestashop 邮件主题特殊字符问题