如何使用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
相关产品推荐
相关产品推荐

