Как можно получить ID пользователя в библиотеке Telebot для Python, зная его username?

Как я могу получить числовой идентификатор (айди) пользователя из юзернейма, например: если пользователь вводит ".айди @koctekmayn", то бот должен вернуть 6279972467? Также, учитывая, что у некоторых пользователей нет юзернейма, как мне извлечь айди из упоминания, когда выводится только их имя?
  • 5 марта 2025 г. 14:54
Ответы на вопрос 2
Чтобы получить ID пользователя из его username в библиотеке Telebot для Python, необходимо использовать метод `get_chat` из Telegram API. Мы можем сделать это при поступлении текстового сообщения с командой. Однако следует учитывать, что Telegram не предоставляет прямого метода для получения ID по username, поэтому нам необходимо использовать взаимодействие с ботом.

Также стоит помнить, что для некоторых пользователей может не быть username, и в этом случае мы получим только ID из упоминания в виде `@username`. Однако если пользователь просто вводит имя без упоминания, мы не сможем получить его ID, так как у нас не будет никаких идентификаторов.

Вот пример реализации команды, чтобы получить ID пользователя по username или упоминанию:

```python
import telebot
from telebot import types

API_TOKEN = 'YOUR_API_TOKEN'
bot = telebot.TeleBot(API_TOKEN)

@bot.message_handler(commands=['айди'])
def send_user_id(message):
    # Убираем команду и получаем аргумент
    args = message.text.split()
    
    if len(args) < 2:
        bot.reply_to(message, "Пожалуйста, укажите username или упоминание пользователя.")
        return

    username = args[1]

    # Проверяем, является ли введенное значение ссылкой на пользователя
    if username.startswith('@'):
        # Убираем '@' из строки
        username = username[1:]
        
        try:
            user = bot.get_chat(username)
            bot.reply_to(message, f"ID пользователя {username}: {user.id}")
        except Exception as e:
            bot.reply_to(message, f"Не удалось получить ID пользователя: {e}")

    else:
        # В данном случае, если это просто имя, у нас нет возможности получить ID
        bot.reply_to(message, "Необходимо указать username, начинающийся с '@'.")

bot.polling()
```

Этот код реализует команду `/.айди @username`, которая возвращает ID пользователя, если пользователь с указанным username существует. Если пользователь не указан или введен неправильный username, бот возвращает соответствующее сообщение об ошибке.

Важно: у бота должны быть соответствующие права для получения информации о пользователях, и он должен сам быть членом группового чата, чтобы получить данные пользователей в группах.
Подсказка здесь: Как получить username пользователя в aiogram? 

При вызове команды /start записывайте в БД user_id и username пользователя.
А при вызове команды /айди ищите в БД переданный в команде юзернейм.
Всё просто =)
Похожие вопросы