Хороший бот discord.py не вызывает вручную все команды из on_message
, вы должны использовать @bot.command(pass_context=True)
для добавления команды.
Избавьтесь от def on_message(...):
, так как вы там ничего не делаете.
Грубая структура в одном файле (без разбиения):
from discord.ext import commands
bot = commands.Bot('//')
@bot.command(pass_context=True)
async def ping(ctx):
channel = ctx.message.channel
await bot.send_message(channel, "pong")
bot.run("TOKEN")
Это так просто!
Теперь, если несколько файлов разбиты на несколько файлов, самый простой способ - определить свой собственный builtins.bot
. Кроме того, вы можете посмотреть на bot.load_extension("filename")
с def setup(bot):
во втором файле. Оба являются допустимыми методами, но последний лучше всего работает с Cogs.
Следующий пример относится к первому способу:
# ksbot.py
from discord.ext import commands
import builtins
bot = commands.Bot('//')
builtins.bot = bot
import basiccommand
@bot.command(pass_context=True)
async def ping(ctx):
channel = ctx.message.channel
await bot.send_message(channel, "pong")
bot.run("TOKEN")
# basiccommand.py
from discord.ext import commands
from builtins import bot
@bot.command(pass_context=True)
async def hello(ctx):
channel = ctx.message.channel
await bot.send_message(channel, "hi")
Теперь у вас есть две команды: ping, которая отправляет "pong", и hello, которая отправляет "hi".
Если необходимо добавить дескриптор on_message
, обязательно добавьте bot.process_commands(message)
в конце on_message
, в приведенных выше примерах не требуется иметь дескриптор события.
Примечание: для соглашения имена файлов должны быть в нижнем регистре.