Не работает команда для Discord бота на Python

При запуске тупо ничего не делает, по идее эта команда должна читать сообщения в канале для запроса с позывными, искать там текст "3.", копировать текст после "3." (пример:

  1. @Pro

  2. Pro9051_10

  3. "Alpha-00" | Pro9051_10

  4. @leader )

    после чего команда должна ждать пока человек с ролью "Leader" ID которой указан в самом начале кода поставит под сообщение эмодзи ✅, после чего она должна менять ник отправителю сообщения например на "Alpha-00" | Pro9051_10, при этом убирая пользователю старый ник и не копируя 4 пункт.

    Говорю сразу, возможно в коде нет ошибок, я забыл добавить проверку, код должен проверять старые сообщения, искать есть ли под ними ✅, при этом от лидера, после чего проверять ник пользователя, смотреть изменён ли он, смотреть дату сообщения, если ему более 5 дней не менять пользователю ник, если же у пользователя ещё не стоит ник который он запрашивал, под сообщением стоит ✅ от пользователя с ролью "Leader" и сообщению меньше 5 дней делать всё выше перечисленное, то есть копировать текст после "3.", не трогая "4.", убирать пользователю старый ник и ставить новый.

    Так же там стоит fonity_number, то есть фигня которая меняет скопированному позывному шрифт, то есть а = ?, А = ? и тп, меняя ник допустим на "?????-??" | ???????_??.

    Вот сам код:

        allowed_channels = [1230204417492385908]  # замените на реальный ID канала
        YOUR_LEADER_ROLE_ID = 1215869495168467029  # замените на реальный ID роли Leader
    
        # Функция для конвертации текста в желаемый шрифт
        async def fontify_string(input_string):
            font_map = {'a': '?', 'b': '?', 'c': '?', 'd': '?', 'e': '?',
                'f': '?', 'g': '?', 'h': '?', 'i': '?', 'j': '?',
                'k': '?', 'l': '?', 'm': '?', 'n': '?', 'o': '?',
                'p': '?', 'q': '?', 'r': '?', 's': '?', 't': '?',
                'u': '?', 'v': '?', 'w': '?', 'x': '?', 'y': '?',
                'z': '?',
                'A': '?', 'B': '?', 'C': '?', 'D': '?', 'E': '?',
                'F': '?', 'G': '?', 'H': '?', 'I': '?', 'J': '?',
                'K': '?', 'L': '?', 'M': '?', 'N': '?', 'O': '?',
                'P': '?', 'Q': '?', 'R': '?', 'S': '?', 'T': '?',
                'U': '?', 'V': '?', 'W': '?', 'X': '?', 'Y': '?',
                'Z': '?'}
            converted_string = ''
            for char in input_string:
                if char.lower() in font_map:
                    converted_char = font_map[char.lower()]
                    if char.isupper():
                        converted_char = converted_char.upper()
                    converted_string += converted_char
                else:
                    converted_string += char
            return converted_string
    
        @bot.event
        async def on_raw_reaction_add(payload):
            if str(payload.emoji) == '✅':
                channel = bot.get_channel(payload.channel_id)
                message = await channel.fetch_message(payload.message_id)
                if message.channel.id in allowed_channels and "3." in message.content:
                    leader_role = message.guild.get_role(YOUR_LEADER_ROLE_ID)
                    user = message.author
                    if leader_role in user.roles:
                        content_parts = message.content.split('3.')
                        text_after_3 = content_parts[1].split('4.')[0].strip()
                        nickname = await fontify_string(text_after_3)
                        if nickname != user.display_name:
                            try:
                                await user.edit(nick=nickname)
                            except discord.Forbidden as e:
                                print(f"Не удалось изменить ник пользователя: {e}")
    
        @tasks.loop(seconds=60)
        async def check_reactions():
            await bot.wait_until_ready()  # Ждем, пока бот будет готов
            while not bot.is_closed():  # Проверяем, что бот не закрыт
                for channel_id in allowed_channels:  # Перебираем разрешенные каналы
                    channel = bot.get_channel(channel_id)
                    if channel:  # Убеждаемся, что канал найден
                        async for message in channel.history(limit=10):  # Перебираем последние 10 сообщений в канале
                            for reaction in message.reactions:  # Перебираем реакции на сообщение
                                if str(reaction.emoji) == '✅':  # Проверяем реакцию
                                    users = []
                                    async for user in reaction.users():
                                        users.append(user)
                                    bot_user = discord.utils.get(users, id=bot.user.id)  # Ищем своего бота в списке пользователей
                                    if bot_user:  # Проверяем, что бот найден
                                        payload = discord.RawReactionActionEvent(  # Создаем объект RawReactionActionEvent
                                            data={
                                                'user_id': bot_user.id,
                                                'message_id': message.id,
                                                'channel_id': channel.id,
                                                'emoji': '✅',
                                                'event_type': discord.RawReactionActionEvent.REACTION_ADD,
                                            })
                                        await bot.on_raw_reaction_add(payload)  # Вызываем on_raw_reaction_add с объектом payload
                                        break  # Выходим из цикла реакций, так как уже обнаружена нужная реакция
                await asyncio.sleep(60)  # Ждем 60 секунд перед повторной проверкой


Ответы (0 шт):