Discord机器人.say命令失效求助:代码问题排查
修复Discord机器人KaburBot的.say命令问题
我尝试给Discord机器人KaburBot添加.say命令,期望发送.say wine时,机器人回复“wine”并删除原命令消息,但现有代码无法正常运行。原代码如下:
import discord import os from discord.ext import commands import asyncio from discord.ext.commands import Bot KaburBot = Bot('.') @KaburBot.command(pass_context = True) async def say(ctx, *args): mesg = ' '.join(args) await KaburBot.delete_message(ctx.message) return await KaburBot.say(mesg)
问题根源
- 代码基于Discord.py旧版本(v0.x)编写,当前主流v1.x+版本的API已做多处变更
- 未配置必要的网关权限(Intents),机器人无法读取消息内容
- 旧版的消息删除、发送方法已被弃用
修复后的代码
import discord from discord.ext import commands # 启用必要的Intents,确保机器人能读取和操作消息 intents = discord.Intents.default() intents.message_content = True # 初始化机器人,指定命令前缀和权限配置 KaburBot = commands.Bot(command_prefix='.', intents=intents) @KaburBot.command() async def say(ctx, *, mesg): # 删除用户发送的命令消息 await ctx.message.delete() # 发送用户指定的内容 await ctx.send(mesg) # 替换成你的机器人Token,运行机器人 KaburBot.run('你的机器人Token')
关键修改说明
- Intents配置:新版本必须显式开启
message_content权限,否则机器人无法识别命令内容,这是原代码失效的核心原因 - 命令参数优化:用
*, mesg替代*args,直接接收带空格的完整消息,省去手动拼接字符串的步骤 - 方法更新:
- 用
ctx.message.delete()替换过时的KaburBot.delete_message(ctx.message) - 用
ctx.send(mesg)替换已弃用的KaburBot.say(mesg)
- 用
- 冗余清理:移除了不必要的
os、asyncio导入,以及重复的Bot类引用
内容的提问来源于stack exchange,提问作者Kabur
相关产品推荐
相关产品推荐

