← Все вопросы

Чем commands.Bot отличается от discord.Client и как сделать команды с префиксом ! ?

Задан 23 месяца назад1.1к просмотров2 ответа
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 — иначе бот не увидит текст команды. Для слэш-команд он, кстати, не нужен.

Ваш ответ

Войдите, чтобы ответить на вопрос.