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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 16:24:32