Не работает команда для Discord бота на Python
При запуске тупо ничего не делает, по идее эта команда должна читать сообщения в канале для запроса с позывными, искать там текст "3.", копировать текст после "3." (пример:
@Pro
Pro9051_10
"Alpha-00" | Pro9051_10
@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 секунд перед повторной проверкой