我正在创建一个电报机器人并使用sendMessage
方法发送消息。
很容易提到使用@username
的用户,但是如何在用户没有用户名时提及用户?
如果使用电报app / web,我们可以通过@integer_id (name)
提及用户,电报app / web会将其转换为可点击的文本。在输入integer_id
后,我们会在选择用户时自动生成@
。
另一个背景:
我正在尝试使用forceReply
,我希望定位用户,如果他们有用户名,我可以轻松定位他们,方法是在sendMessage
方法的文字中提及。
注意:我没有禁用Privacy Mode
,我不希望电报用我不需要的消息来轰炸我的服务器。它正在超载我的廉价讨厌的服务器。所以,禁用它不是一种选择。
我愿意接受其他解决方案,机器人可以听取选定的播放器。
感谢。
更新21/10: 他说,我已经和BotSupport联系过电报了,目前Bots不提用没有用户名的用户。
所以在我的情况下,我仍然继续使用forceReply
,并且还向用户提供了一个简短的消息,其中没有用户名来设置它,因此他们可以从forceReply
获益功能
答案 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")