You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Discord.py机器人输入-1时重复发消息且数值异常问题求助

问题排查与修复

核心问题分析

  1. 消息循环触发:on_message事件会监听频道内所有消息,包括机器人自己发送的消息。当机器人发送包含"-1"的提示消息时,会再次触发startswith("-1")分支,导致无限循环发送消息。
  2. 减法逻辑错误:输入"-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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 12:10:29