Top.Mail.Ru
Ответы
Аватар пользователя
7мес
Изменено
Аватар пользователя
Аватар пользователя
Аватар пользователя
Программирование
+3

Проблема с кодом на python для бот-чата телеграмм

Здравствуйте такая проблема происходит с кодом для чат-бота на python
в крации есть команда /up
она повышает пользователя в ранге
на нее есть 2 триггера
1 триггер /up @username ранг (1-3)
2 триггер в ответ на сообщение то есть /up 1-3
2 триггер работает хорошо но вот 1 работает не корректно
я предполагаю что бот не может получить @username человека
код ниже
ошибка журнала тоже ниже
пожалуйста помогите исправить код!
P.s код писала нейросеть
https://github.com/Frelinq-afk/error-code.git

По дате
По рейтингу
Аватар пользователя
Оракул
7мес

Вот исправленный код: https://pastebin.com/iNRAsjwQ

Аватар пользователя
Просветленный
7мес

Проблема в том, как ваш код обрабатывает упоминания пользователей (@username). Нейросеть, скорее всего, некорректно интерпретировала, как Telegram API передает информацию об упоминаниях в сообщении. Вместо того, чтобы напрямую извлекать username из текста, нужно использовать данные, предоставляемые Telegram API о пользователях, упомянутых в сообщении. Предполагается, что ваш обработчик сообщений получает объект update от Telegram Bot API. Этот объект содержит информацию о сообщении, включая список упомянутых пользователей.

1234567891011121314151617181920212223242526272829303132333435363738394041
 import telebot 
from telebot import types 
 
# ... ваш код ... 
 
@bot.message_handler(commands=['up']) 
def handle_up(message): 
    text = message.text.split() 
    chat_id = message.chat.id 
 
    if len(text) == 3:  # Обрабатываем /up @username ранг 
        try: 
            username = text[1] 
            rank = int(text[2]) 
            #  Здесь проблема!  Нельзя просто взять username из текста 
            #  Нужно найти ID пользователя по username с помощью метода get_chat_member 
            member = bot.get_chat_member(chat_id, username) 
            if member: 
                user_id = member.user.id 
                # ... ваш код для повышения ранга пользователя с user_id ... 
            else: 
                bot.reply_to(message, "Пользователь не найден.") 
        except ValueError: 
            bot.reply_to(message, "Неверный формат команды. Используйте /up @username ранг (1-3).") 
        except IndexError: 
            bot.reply_to(message, "Неверный формат команды. Используйте /up @username ранг (1-3).") 
    elif len(text) == 2:  # Обрабатываем /up ранг (ответ на сообщение) 
        try: 
            rank = int(text[1]) 
            # ... ваш код для повышения ранга пользователя, который отправил сообщение ... 
            # Здесь user_id будет message.from_user.id 
            user_id = message.from_user.id 
            # ... ваш код для повышения ранга пользователя с user_id ... 
 
        except ValueError: 
            bot.reply_to(message, "Неверный формат команды. Используйте /up 1-3.") 
    else: 
        bot.reply_to(message, "Неверный формат команды. Используйте /up @username ранг (1-3) или /up 1-3 в ответ на сообщение.") 
 
 
# ... остальной ваш код ...