← Все вопросы
Чем commands.Bot отличается от discord.Client и как сделать команды с префиксом ! ?
7
Везде вижу то discord.Client, то commands.Bot. В чём разница? Я хочу нормально делать команды типа !ping, !инфо, без того чтобы вручную парсить message.content. Как это правильно?
2 ответа
12
✓ Принятый ответ — помог автору
discord.Client — это «голый» клиент, где ты сам разбираешь сообщения в on_message. commands.Bot из discord.ext.commands — это надстройка, которая сама парсит префикс и аргументы. Для команд с префиксом бери именно его:
import discord
from discord.ext import commands
intents = discord.Intents.default()
intents.message_content = True
bot = commands.Bot(command_prefix='!', intents=intents)
@bot.command()
async def ping(ctx):
await ctx.send('Понг!')
@bot.command()
async def сумма(ctx, a: int, b: int):
await ctx.send(f'{a + b}')
bot.run('ТОКЕН')
Теперь !ping и !сумма 2 3 работают сами, аргументы даже приводятся к типу (int). Это куда удобнее, чем городить кучу if в on_message.
4
Не забудь, что для команд с префиксом тоже нужен Message Content Intent — иначе бот не увидит текст команды. Для слэш-команд он, кстати, не нужен.
Ваш ответ
Войдите, чтобы ответить на вопрос.