Telegram bot:如何通过id(不是用户名)提及用户

Awa*_*wan 17 telegram telegram-bot

我正在创建一个电报机器人并使用sendMessage方法发送消息.很容易提到用户使用@username,但是如果用户没有用户名怎么提呢?

如果使用电报app/web,我们可以提到用户@integer_id (name),电报app/web会将其转换为可点击的文本.integer_id在我们选择用户后,将在键入后自动生成@.

另一个背景:我正在尝试使用forceReply,我想要定位用户,如果他们有用户名,我可以轻松地定位他们,通过在sendMessage方法上的文字提及它们.

我正在创建的机器人是像机器人一样的"测验".每个玩家都需要转弯,并且机器人向他们发送问题,机器人的每个消息将针对不同的玩家.

注意:我没有禁用Privacy Mode,我不希望电报轰炸我的服务器与我不需要的消息.它正在超载我的廉价讨厌的服务器.所以,禁用它不是一个选项.

我对其他解决方案持开放态度,机器人可以听取选定的播放器.

谢谢.

更新21/10:我已经与BotSupport联系了电报,他们说,现在Bots不能提及没有用户名的用户.

所以在我的情况下,我仍然继续使用forceReply,并且还给用户一个简短的消息,没有用户名设置,所以他们可以从forceReply功能中获益.

Gam*_*7er 18

根据此链接:可以通过带有标记的数字 ID 提及用户:

降价风格

要使用此模式,请parse_mode在使用时在字段中传递 Markdown sendMessage。在您的消息中使用以下语法:

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

Run Code Online (Sandbox Code Playgroud)

你也可以使用HTMLstyle :

HTML 样式

要使用此模式,请在使用 sendMessage 时在 parse_mode 字段中传递 HTML。目前支持以下标签:

<a href="tg://user?id=123456789">inline mention of a user</a>
Run Code Online (Sandbox Code Playgroud)


Ana*_*lev 16

根据官方文档,可以通过标记的数字ID来提及用户:

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

  • 仅当用户过去联系过机器人、通过内联按钮向机器人发送回调查询或者是提及他的组中的成员时,这些提及才能保证有效。 (6认同)
  • 如果用户从隐私设置中禁用“转发消息”,则不起作用 (4认同)
  • 此方法的另一个问题是,即使您设置了“disable_notification”,它也会通知用户。 (2认同)

Bat*_*ico 6

尝试这个:

@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)+")"
    bot_msg = f"Hi, {mention}"
    if message_text.lower() == "hi":
        bot.send_message(cid, bot_msg, parse_mode="Markdown")
Run Code Online (Sandbox Code Playgroud)


Jon*_*owl -4

机器人能够通过 ID 标记用户,但无法使用官方 HTTP 机器人 API 来做到这一点。

更新:不再需要了,因为 Telegram 添加了对此的原生支持。

如果您使用MadelineProto (PHP)登录您的机器人帐户,您可以使用此“链接”通过 ID 提及某人,并将 parse_mode 设置为 markdown

[Daniil Gentili](提及:@danogentili)

  • OP 想知道如何通过用户 ID 来提及用户,它是一个 32 位整数,而不是您建议的用户名 (2认同)