开发者问题收集

Telegram 机器人:如何通过 ID(而不是用户名)提及用户

2016-10-14
115413

我正在创建一个电报机器人并使用 sendMessage 方法发送消息。 使用 @username 很容易提及用户,但是当用户没有用户名时如何提及用户?

如果使用电报应用程序/网络,我们可以通过 @integer_id (name) 提及用户,电报应用程序/网络会将其转换为可点击的文本。当我们选择用户时,输入 @ 后,将自动生成 integer_id

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

我正在创建的机器人是一个“测验”类机器人。每个玩家都需要轮流,机器人会向他们发送问题,来自机器人的每条消息都会针对不同的玩家。

注意:我没有禁用 隐私模式 ,我不希望电报用我不需要的消息轰炸我的服务器。它使我便宜的服务器超载。因此,禁用它不是一个选择。

我愿意接受其他解决方案,让机器人可以听取选定的玩家的意见。

谢谢。

更新 21/10: 我已经与 BotSupport 谈过电报,他们说,目前机器人不能在没有用户名的情况下提及用户。

所以在我的情况下,我仍然继续使用 forceReply ,并且还向没有用户名的用户发送了一条简短的消息来设置它,这样他们就可以从 forceReply 功能中受益。

3个回答

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

[内联提及用户](tg://user?id=123456789)

Anatoly Rugalev
2017-09-19

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

Markdown style

To use this mode, pass Markdown in the parse_mode field when using sendMessage . Use the following syntax in your message:

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

您还可以使用 HTML 样式:

HTML style

To use this mode, pass HTML in the parse_mode field when using sendMessage. The following tags are currently supported:

<a href="tg://user?id=123456789">inline mention of a user</a>
GameO7er
2019-09-19

尝试一下:

@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")
Batichico
2019-06-27