Top.Mail.Ru
Ответы

Проблемка с чат ботом телеграмм на основе python

Здравствуйте у меня появилась такая проблема в коде

Код должен повышать людей через команду Up

триггер для бота это Up в ответ на сообщение пользователя и так же Up @username

триггер на ответ работает хорошо а вот при использовании триггера с @username постоянно пишет что пользователь не найдет

код ниже

123
 import sqlite3  
import telebot  
from telebot import types 
123456789101112131415161718192021222324252627282930313233
 def handle_up_down(message, chat_id):  
    try:  
        parts = message.text.split()  
        if len(parts) > 0:  
            action = parts[0]  
            if action == "Up" or action == "Down":  
                target_user_id = None  
                if message.reply_to_message:  
                    target_user_id = message.reply_to_message.from_user.id  
                    target_username = message.reply_to_message.from_user.username  
                elif len(parts) > 1:  
                    target_username = parts[1].lstrip('@')  
                    target_user_id = get_user_id_from_username(bot, message.chat.id, target_username)  
 
                if target_user_id is None:  
                    bot.reply_to(message, f"Пользователь не найден.")  
                    return  
 
                current_rank = get_rank(target_user_id, chat_id)  
                if action == "Up":  
                    new_rank = min(current_rank + 1, 3)  
                    set_rank(target_user_id, chat_id, new_rank)  
                    bot.reply_to(message, f"Ранг пользователя @{target_username} повышен до {new_rank}")  
                elif action == "Down":  
                    new_rank = max(current_rank - 1, 1)  
                    set_rank(target_user_id, chat_id, new_rank)  
                    bot.reply_to(message, f"Ранг пользователя @{target_username} понижен до {new_rank}")  
            else:  
                bot.reply_to(message, "Неправильный формат команды. Используйте Up/Down @username или в ответ на сообщение.")  
 
    except Exception as e:  
        print(f"Error handling Up/Down command: {e}")  
        bot.reply_to(message, "Произошла ошибка при изменении ранга.") 

вроде все должно работать
не знаю в чем проблема
P.s код написала нейросеть!

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

А где у тебя хотя бы логирование?

Аватар пользователя
Ученик
6мес

import sqlite3
import telebot
from telebot import types

# Инициализация бота с вашим токеном
bot = telebot.TeleBot("ВАШ_ТОКЕН")

def get_user_id_from_username(bot, chat_id, username):
try:
# Попытка получить пользователя из чата по username
user = bot.get_chat_member(chat_id, username)
return user.user.id if user else None
except Exception as e:
print(f"Ошибка при получении ID пользователя по username: {e}")
return None

def get_rank(user_id, chat_id):
# Ваша логика для получения текущего ранга пользователя
return 1 # Пример возвращаемого значения

def set_rank(user_id, chat_id, new_rank):
# Ваша логика для установки нового ранга пользователя
pass

@bot.message_handler(func=lambda message: True)
def handle_up_down(message):
chat_id = message.chat.id
try:
parts = message.text.split()
if len(parts) > 0:
action = parts[0]
if action == "Up" or action == "Down":
target_user_id = None
target_username = None

if message.reply_to_message:
target_user_id = message.reply_to_message.from_user.id
target_username = message.reply_to_message.from_user.username
elif len(parts) > 1:
target_username = parts[1].lstrip('@')
target_user_id = get_user_id_from_username(bot, message.chat.id, target_username)
print(f"ID пользователя для {target_username}: {target_user_id}")

if target_user_id is None:
bot.reply_to(message, f"Пользователь не найден.")
return

current_rank = get_rank(target_user_id, chat_id)
if action == "Up":
new_rank = min(current_rank + 1, 3)
set_rank(target_user_id, chat_id, new_rank)
bot.reply_to(message, f"Ранг пользователя @{target_username} повышен до {new_rank}")
elif action == "Down":
new_rank = max(current_rank - 1, 1)
set_rank(target_user_id, chat_id, new_rank)
bot.reply_to(message, f"Ранг пользователя @{target_username} понижен до {new_rank}")
else:
bot.reply_to(message, "Неправильный формат команды. Используйте Up/Down @username или в ответ на сообщение.")

except Exception as e:
print(f"Error handling Up/Down command: {e}")
bot.reply_to(message, "Произошла ошибка при изменении ранга.")

# Запуск бота
bot.polling()