ホームページ >バックエンド開発 >Python チュートリアル >「on_message()」を実装した後、Discord コマンドが動作しなくなるのはなぜですか?

「on_message()」を実装した後、Discord コマンドが動作しなくなるのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-13 15:58:18984ブラウズ

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() での両方のデバッグ出力を確実に行うことができます。カスタム コマンドは正しく機能します。

以上が「on_message()」を実装した後、Discord コマンドが動作しなくなるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。