You need to enable JavaScript to run this app. 如何使用discord.py开发带经济系统的Discord机器人 现有代码故障求助
优惠活动
大模型
产品
解决方案
定价
更多

如何使用discord.py开发带经济系统的Discord机器人 现有代码故障求助

现有代码问题排查
  • 实例重复定义:同时初始化了discord.Client()和commands.Bot()两个独立实例,commands.Bot本身是discord.Client的子类,无需额外创建Client实例,你当前给Client注册事件、运行Client,却调用Bot实例修改状态,两个实例完全不连通,状态设置必然失效
  • 未定义变量报错:on_message事件中使用了未定义的ctx变量,ctx是命令装饰器传入的上下文对象,手动判断消息内容的场景下不会生成该变量,运行到此处会直接抛出异常
  • 缺少网关意图配置:discord.py v2.0及以上版本默认关闭消息内容等敏感意图,未手动开启的话on_message无法接收普通用户消息,初始化Bot时必须显式传入intents参数
  • 实例启动错误:最终调用client.run()启动的是Client实例,你声明的Bot实例从未启动,所有调用Bot实例的逻辑都不会生效
修正后可运行基础代码
import discord
from discord.ext import commands

print("This might take a few seconds")
print("Please wait...\n\n")

# 开启必要的网关意图,需要先在Discord开发者后台的Bot页面开启Message Content Intent开关
intents = discord.Intents.default()
intents.message_content = True

# 只保留Bot实例即可,无需额外创建Client
bot = commands.Bot(command_prefix='/', intents=intents)

@bot.event
async def on_ready():
    activity = discord.Game(name="test", type=3)
    # 直接用当前bot实例修改状态
    await bot.change_presence(status=discord.Status.idle, activity=activity)
    print("Bot Online!\n")
    print('We have logged in as {0.user}'.format(bot))

@bot.event
async def on_message(message):
    if message.author == bot.user:
        return
    # 固定回复逻辑,移除不存在的ctx变量调用
    if message.content.startswith('secret'):
        await message.channel.send('What is the "secret" you speak of?')
        await message.channel.send('Shh!', delete_after=5)
    # 必须加这行,否则前缀命令会失效
    await bot.process_commands(message)

# 替换为自己的Bot Token,运行Bot实例
bot.run('XXXXXXXXXXXXXXX')

注意:运行前需要先进入Discord开发者后台的Bot管理页面,开启Message Content Intent开关,否则无法接收普通消息内容。

经济系统开发指导
  • 数据存储:优先选用sqlite做本地存储,无需额外部署服务,新建3张核心表即可:用户余额表(存用户ID、持有金币、存款金币)、商品配置表(存商品ID、名称、价格、库存、功能描述)、用户背包表(存用户ID、持有商品ID、数量)
  • 银行模块核心功能:注册/balance(查询余额)、/deposit(存金币到银行)、/withdraw(从银行取金币)、/transfer(给其他用户转金币)四个核心指令,所有操作增加合法性校验:取款/转账金额不能超过持有余额、不能给自己转账、金额必须为正
  • 商店模块核心功能:注册/shop(列出所有在售商品)、/buy 商品ID(购买指定商品)两个核心指令,购买逻辑按顺序执行:校验商品是否存在>校验用户金币是否足够>扣除对应金币>给用户背包添加对应商品>返回购买成功提示,后续可扩展限购、限时折扣、商品使用功能
  • 指令优化:建议全部使用Discord官方主推的斜杠指令,通过@bot.tree.command()装饰器注册,无需用户记忆前缀,也不需要开启消息内容意图,体验和稳定性更好
  • 异常处理:所有指令增加异常捕获逻辑,对用户输入错误、数值非法等场景返回友好提示,避免机器人直接崩溃

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 23:27:04