Попытка получить все сообщения в пределах определенного канала, созданного в другой команде

#python #python-3.x #discord.py #discord.py-rewrite

#python #python-3.x #discord.py #discord.py-переписать

Вопрос:

В настоящее время я кодирую бота, который позволит двум людям играть в шахматы глобально, на сервере, с одной учетной записью или против бота. В настоящее время мой метод для этого включает в себя алгоритм подбора партнеров (который не самый сложный), затем он создает канал для игроков для отправки сообщений или два канала с веб-ссылками на разных серверах в случае глобальной игры. Мой вопрос: как мне выполнять код всякий раз, когда сообщение отправляется по одному из этих каналов? В частности, мне нужно отправить копию каждого сообщения, отправленного по одному каналу, другому через веб-хук в глобальной игре, чтобы оба игрока могли общаться, а также проверять, находится ли входное сообщение в формате хода, и в этом случае бот сделает ход, а также скопирует сообщение.сообщение на другой канал. Я думал об использовании

 @bot.event
async def on_message(mes)
 

но я не могу сделать это глобально, поскольку каналы для проверки сообщений не будут известны в глобальной области, и я не знаю, можно ли это определить в функции таким образом, чтобы можно было проверять канал. Спасибо!

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

1. я не знаком с интернет-частью python, но возможно ли, чтобы пользователь отправил сообщение промежуточному, который отправляет его всем людям на канале?

Ответ №1:

 @bot.event
async def on_message(message):
    if message.channel.id in my_list_of_channel_ids:
        # It's a chess channel
        # Now you can check if the message contains a valid move
 

или вы можете использовать bot.wait_for

 # The `is_game_over` var indicates if the game is over
while not is_game_over:
    def check(message):
        """Checks if the message contains a valid move,

        you should also check if `message.author == `ctx.author` 
        if you're doing this in a command

        and if message.channel is the same as the channel you created before"""

        return message.content.upper() in ['A1', 'A2', 'A3'] # Put all the valid moves here

    message = await bot.wait_for('message', check=check)
    # from here do your thing, add the moves, check if someone won the game, etc...
 

Не могу быть более конкретным без фрагмента кода того, что у вас есть в данный момент