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

时间:2016-10-14 17:03:08

标签: telegram telegram-bot

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

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

另一个背景: 我正在尝试使用forceReply,我希望定位用户,如果他们有用户名,我可以轻松定位他们,方法是在sendMessage方法的文字中提及。

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

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

我愿意接受其他解决方案,机器人可以听取选定的播放器。

感谢。

更新21/10: 他说,我已经和BotSupport联系过电报了,目前Bots不提用没有用户名的用户。

所以在我的情况下,我仍然继续使用forceReply,并且还向用户提供了一个简短的消息,其中没有用户名来设置它,因此他们可以从forceReply获益功能

4 个答案:

答案 0 :(得分:16)

根据official documentation,可以通过带有标记的数字ID来提及用户:

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

答案 1 :(得分:5)

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

  

降价样式

     

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

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

,您还可以使用HTML样式:

  

HTML样式

     

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

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

答案 2 :(得分:0)

Bots能够通过他们的ID标记用户,他们无法使用官方HTTP Bot API执行此操作。

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

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


[Daniil Gentili](mention:@danogentili)

答案 3 :(得分:0)

尝试一下:

@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")