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

如何解决discord.py bot在SQLite数据库中计数异常递增的问题

Discord.py Bot SQLite计数异常修复:所有消息触发递增的问题

问题现象

给Discord.py Bot接入SQLite数据库后,做了个趣味功能——用户发送brilliant或brilliant!时,给该用户的计数加1。但出现异常:

  • 发送一次目标内容会多次递增计数
  • 未发送过目标内容的用户也被统计进数据库

原问题代码

import discord, sqlite3
from discord.ext import commands

class brilliant_count(commands.Cog):
    def __init__(self, bot):
        self.bot = bot

    @commands.Cog.listener()
    async def on_message(self, message):
        if message.author == self.bot.user:
            return
        if message.content.lower() == "brilliant" or "brilliant!":

            conn = sqlite3.connect(r"./cogs/brilliant_count.db")
            c = conn.cursor()

            # 获取用户数据
            user = message.author

            # 检查用户是否已在数据库中
            c.execute("SELECT count FROM brilliant_counter WHERE discord_id=?", (user.id,))
            result = c.fetchone()
            if result is None:
                # 用户未在库中,添加初始计数1
                c.execute("INSERT INTO brilliant_counter (discord_id, discord_username, count) VALUES (?, ?, ?)", (user.id, user.name, 1))
            else:
                # 用户已在库中,递增计数
                count = result[0]
                count += 1
                c.execute("UPDATE brilliant_counter SET discord_username=?, count=? WHERE discord_id=?", (user.name, count, user.id))

            # 提交数据库修改
            conn.commit()

            # 关闭数据库连接
            conn.close()

async def setup(bot):
    await bot.add_cog(brilliant_count(bot))

排查过程

最初误以为是on_message监听器因Bot加入多服务器被多次触发,尝试给消息添加自定义processed标记来避免重复处理:

if message.content.lower() == "brilliant" and not message.processed:
    message.processed = True

但Discord.py的Message对象并没有processed属性,该方法无效。

最终修复方案

问题出在条件判断的逻辑错误:
原错误条件:

if message.content.lower() == "brilliant" or "brilliant!":

由于or右侧的"brilliant!"是非空字符串,在Python中会被判定为True,导致所有消息都会触发计数逻辑。

修正为分别判断两个目标字符串:

if (message.content.lower() == "brilliant") or (message.content.lower() == "brilliant!"):

这样只有当消息内容严格匹配brilliant或brilliant!时,才会执行计数递增操作,异常问题解决。

内容的提问来源于stack exchange,提问作者gfran

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 14:55:27