K
K
k3rd0r2020-12-18 13:43:14
Python
k3rd0r, 2020-12-18 13:43:14

Why doesn't event and command python discord bot combine?

I wrote a conversational bot in python for discord - @client.event, added chat cleaning - @client.command, the bot replies to messages, but the chat does not clear, when I commented out the code with conversations, the bot started to clear the chat on command, but after uncommenting the code the bot stopped clearing the chat again.

import discord
from config import settings
from discord.ext import commands

client = discord.Client
client = commands.Bot(command_prefix=settings['prefix'],)  # prefix = "." пример: .help

# WORDS
hello_words = ['hello', 'hi', 'privet', 'qq', 'ky', 'ку', 'q', 'helo',
               'привет', 'дороу', 'дорова', 'хай', 'хелло', 'хелоу', 'хеллоу', 'здарова', 'й', 'йй']
answer_words = ['инфо сервера', 'инфо о сервере', 'информация о сервере', 'информация сервера',
                'команды', 'все команды', 'команды севера', 'узнать инфо о сервере', 'узнать инфо сервера',
                'узнать информацию о сервере', 'узнать информацию сервера', 'помощь', 'что здесь делать', 'помоги',
                'что сдесь делать', 'что делать']
goodbye_word = ['бб', 'bb', 'goodbye', 'пока', 'poka', 'прощай', 'до завтра', 'bb all', 'бб олл', 'бб алл',
                'пока всем', 'бб всем']

# clear message


@client.command(pass_context=True)
async def clear(ctx, amount=100):
    await ctx.channel.purge(limit=amount)


@client.event
async def on_ready():
    print('Бот {0.user} подключён'.format(client))
# когда бот включается нам пишет сообщение "Бот "Respect" подключен"


@client.event
async def on_message(message):  # message это переменная которая означает сообщение
    author = message.author
    msg = message.content.lower()  # весь контент который будет записан-будет нижним регистром

    if author == client.user:  # не реагируем если отправитель-бот
        return

    if msg in hello_words:  # при вводе слов из переменной hello_words он будет с нами здороваться
        await message.channel.send(f'Привет, {author.mention}, чем могу помочь?')

    if msg in answer_words:  # при вводе слов из переменной answer_words он будет говорить нам ввести .help
        await message.channel.send('Для более подробной информации о сервере напишите в чат .help')

    if msg in goodbye_word:  # при вводе слов из переменной goodbye_words он будет прощаться
        await message.channel.send(f'Что? { author.mention}, ты уже уходишь? Ладно, пока-пока!')
client.run(settings['token'])  # connect

Answer the question

In order to leave comments, you need to log in

1 answer(s)
S
soremix, 2020-12-18
@k3rd0r

https://discordpy.readthedocs.io/en/latest/faq.htm...

Replacing the default `on_message` prevents any additional commands from being executed. To fix this, add the line `bot.process_commands(message)` at the end of your `on_message`, like so:

@bot.event
async def on_message(message):
    # do some extra stuff here

    await bot.process_commands(message)

The solution was:
Ignoring the discord.py command?
Does discord.py support reacting to both messages and commands at the same time?
Does not respond to command after writing on_message how to fix it?
Discord.py commands not working?

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question