首页 >后端开发 >Python教程 >为什么我的 Discord 命令在实现 `on_message()` 后停止工作?

为什么我的 Discord 命令在实现 `on_message()` 后停止工作?

Susan Sarandon
Susan Sarandon原创
2024-12-13 15:58:18986浏览

Why Do My Discord Commands Stop Working After Implementing `on_message()`?

执行 on_message() 后命令被禁用

使用discord.py 的 on_message() 事件时,用户可能会遇到命令无法执行的问题停止工作。这是由于 on_message() 的重写性质造成的,除非专门启用,否则它会禁用命令的执行。

解决问题

要解决此问题,需要在 on_message() 函数末尾添加对 bot.process_commands(message) 的调用至关重要。此行指示 Discord 处理消息中存在的任何命令。

修改后的代码

这是代码的修改版本,其中包含bot.process_commands(message):

import discord
import asyncio
from discord.ext import commands

bot = commands.Bot(command_prefix = '-')

@bot.event
async def on_ready():
    print('Logged in as')
    print(bot.user.name)
    print(bot.user.id)
    print('------')

@bot.event
async def on_message(message):
    if message.content.startswith('-debug'):
        await message.channel.send('d')

    # Process any commands present in the message
    await bot.process_commands(message)

@bot.command(pass_context=True)
async def ping(ctx):
    await ctx.channel.send('Pong!')

@bot.command(pass_context=True)
async def add(ctx, *, arg):
    await ctx.send(arg)

说明

默认的 on_message() 事件包括内部对 bot.process_commands(message) 的调用。该行允许执行消息中的命令。通过覆盖默认的 on_message(),您可以有效地阻止命令的处理。手动添加 bot.process_commands(message) 可以恢复所需的功能。

结论

通过实现上述解决方案,您可以确保 on_message() 中的调试输出并且您的自定义命令可以正常运行。

以上是为什么我的 Discord 命令在实现 `on_message()` 后停止工作?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn