Telegram bot: Как указать пользователя по его идентификатору (а не по имени пользователя)

Я создаю бот телеграммы и использую метод sendMessage для отправки сообщений. легко упомянуть пользователя, использующего @username, но как упомянуть пользователя, когда у него нет имени пользователя?

При использовании приложения/веб-телеграммы мы можем упомянуть пользователя @integer_id (name), а приложение telegram app/web преобразует его в текст с текстом. integer_id будет сгенерирован автоматически, когда мы выберем пользователя после ввода @.

другой фон: Я пытаюсь использовать forceReply, и я хочу настроить таргетинг пользователя, если у них есть имя пользователя, я могу легко настроить их, указав их на текст по методу sendMessage.

бот, который я создаю, является "викториной", как бот. где каждый игрок должен повернуть, и бот отправляет им вопрос, каждый из сообщений бота будет нацелен на другого игрока.

ПРИМЕЧАНИЕ. Я не отключу Privacy Mode, я не хочу, чтобы телеграмма бомбардировала мой сервер с помощью msg, который мне не нужен. это перегрузило мой дешевый неприятный сервер. поэтому отключить его не вариант.

Я открыт для другого решения, где бот может прослушивать выбранного игрока.

спасибо.

ОБНОВЛЕНИЕ 21/10: Я говорил с BotSupport для телеграммы, сказали они, на данный момент Боты не могут упоминать пользователя без имени пользователя.

поэтому в моем случае я все еще использую forceReply, а также предоставил короткий запрос пользователю, у которого нет имени пользователя для его настройки, поэтому они могут получить выгоду от функции forceReply.

Ответ 2

Боты могут отмечать пользователей по их идентификатору, они просто не могут этого сделать, используя официальный HTTP-API-браузер.

Обновление: больше не требуется, поскольку Telegram добавила встроенную поддержку для этого.

Если вы входите в свою учетную запись ботов с MadelineProto (PHP), вы можете использовать эту ссылку, чтобы упомянуть кого-то по этому идентификатору с параметром parse_mode для уценки

[Daniil Gentili](mention:@danogentili)

Ответ 3

Попробуй это:

@bot.message_handler(func=lambda message: True)     
def echo_message(message):
    cid = message.chat.id 
    message_text = message.text 
    user_id = message.from_user.id 
    user_name = message.from_user.first_name 
    mention = "["+user_name+"](tg://user?id="+str(user_id)+")"

    if message_text.lower() == "hi":
        bot.send_message(cid,"Hi, " + mention,parse_mode="Markdown")

Ответ 4

По этой ссылке : можно упомянуть пользователя по числовому идентификатору с разметкой:

Markdown style

Чтобы использовать этот режим, передайте Markdown в поле parse_mode при использовании sendMessage. Используйте следующий синтаксис в вашем сообщении:

[inline mention of a user](tg://user?id=123456789)

и вы также можете использовать стиль HTML:

HTML style

Чтобы использовать этот режим, передайте HTML в поле parse_mode при использовании sendMessage. В настоящее время поддерживаются следующие теги:

<a href="tg://user?id=123456789">inline mention of a user</a>