Discord.py бот отвечает только на одно сообщение

#python #discord.py

#python #discord.py

Вопрос:

итак, я создаю 2 бота discord: один будет прослушивать команды, и когда он получит их, он отправит сообщение по частному каналу. когда первый бот отправляет сообщение по этому каналу, второй ответит, указав, что он подключен, затем бот 1 запрашивает запуск сервера Minecraft. проблема в том, что бот 2 отвечает только один раз, и если я хочу, чтобы он отвечал более одного раза, мне нужно вручную перезапустить код. я на python 3.8.6

 import discord

client = discord.Client()

@client.event
async def on_message(message):
    if message.author == client.user:
        return
        
    if message.author.id == bot 1 id:
        if message.content.startswith('<@!bot 2 id>'):
            starterChannel = client.get_channel('private channel')
            channel = message.channel
            if channel == starterChannel:
                await channel.send('ye')
                @client.event
                async def on_message(message):
                    if message.content.startswith('Can'):
                        message = message.content
                        request = message[8:]
                        print(request)
                        if request.startswith('start'):
                            await channel.send('idk how')
 

в чем проблема и как я могу ее исправить?

Ответ №1:

Я считаю (но не могу проверить, так как у меня нет бота discord для тестирования), что вы не можете переопределить on_message внутри себя и обновить обработчик on_message клиента. Вместо этого вы можете попробовать следующее, которое не объявляет новую функцию on_message:

 import discord

client = discord.Client()

@client.event
async def on_message(message):
    if message.author == client.user:
        return
        
    if message.author.id == bot 1 id:
        if message.content.startswith('<@!bot 2 id>'):
            starterChannel = client.get_channel('private channel')
            channel = message.channel
            if channel == starterChannel:
                await channel.send('ye')

        if message.content.startswith('Can'):
            channel = message.channel
            message = message.content
            request = message[8:]
            print(request)
            if request.startswith('start'):
                await channel.send('idk how')
 

Комментарии:

1. Я создал эту учетную запись, чтобы задать этот вопрос, чтобы он не показывал мой голос, но это сработало, спасибо!

Ответ №2:

Вам нужно поставить await client.process_commands(message) в конце

Комментарии:

1. Спасибо, но ответ thshea сработал для меня

2. @linkthehero1234 пожалуйста, отметьте ответ thshea как принятый, тогда