Discord.py机器人输入-1时重复发消息且数值异常问题求助
问题排查与修复
核心问题分析
- 消息循环触发:
on_message事件会监听频道内所有消息,包括机器人自己发送的消息。当机器人发送包含"-1"的提示消息时,会再次触发startswith("-1")分支,导致无限循环发送消息。 - 减法逻辑错误:输入"-1"时,
num = int("-1")得到的值是-1,执行sum -= num等价于sum += 1,和你想要的"减1"逻辑完全相反,导致数值持续累加。
修复方案
步骤1:排除机器人自身消息
在on_message函数开头添加判断,跳过机器人自己发送的消息,从根源避免循环触发:
if message.author == client.user: return
步骤2:修正减法逻辑
当输入"-1"时,需要让总和减1,可以将sum -= num改为sum += num(因为num是-1,加-1等价于减1),或者直接写sum -= 1,两种方式都能实现正确逻辑。同时可以优化提示消息,把显示"-1 was subtracted"改成"1 was subtracted",提升用户体验。
修正后的完整代码
intents = discord.Intents.default() intents.message_content = True client = discord.Client(intents=intents) @client.event async def on_ready(): print(f"{client.user} is connected to Discord!") sum = 0 @client.event async def on_message(message): global sum # 跳过机器人自身消息,避免循环触发 if message.author == client.user: return if message.content.startswith("+1"): num = int(message.content.split(" ")[0]) sum += num await message.channel.send(f"{num} was added to your apples, you got {sum} apples.") elif message.content.startswith("-1"): num = int(message.content.split(" ")[0]) # 修正减法逻辑:加-1等价于减1 sum += num # 优化提示消息,显示正数更符合语义 await message.channel.send(f"{abs(num)} was subtracted from your apples, you got {sum} apples.") elif message.content.startswith("apples"): await message.channel.send(f"You have {sum} apples.") client.run('token')
内容的提问来源于stack exchange,提问作者wtfluciana
相关产品推荐
相关产品推荐

