Telegram 机器人:如何通过 ID(而不是用户名)提及用户
我正在创建一个电报机器人并使用
sendMessage
方法发送消息。
使用
@username
很容易提及用户,但是当用户没有用户名时如何提及用户?
如果使用电报应用程序/网络,我们可以通过
@integer_id (name)
提及用户,电报应用程序/网络会将其转换为可点击的文本。当我们选择用户时,输入
@
后,将自动生成
integer_id
。
另一个背景:
我正在尝试使用
forceReply
,我想定位用户,如果他们有用户名,我可以通过
sendMessage
方法上的文本提及他们来轻松定位他们。
我正在创建的机器人是一个“测验”类机器人。每个玩家都需要轮流,机器人会向他们发送问题,来自机器人的每条消息都会针对不同的玩家。
注意:我没有禁用
隐私模式
,我不希望电报用我不需要的消息轰炸我的服务器。它使我便宜的服务器超载。因此,禁用它不是一个选择。
我愿意接受其他解决方案,让机器人可以听取选定的玩家的意见。
谢谢。
更新 21/10: 我已经与 BotSupport 谈过电报,他们说,目前机器人不能在没有用户名的情况下提及用户。
所以在我的情况下,我仍然继续使用
forceReply
,并且还向没有用户名的用户发送了一条简短的消息来设置它,这样他们就可以从
forceReply
功能中受益。
根据 官方文档 ,可以使用标记通过数字 ID 提及用户:
[内联提及用户](tg://user?id=123456789)
根据此 链接 : 可以使用标记通过数字 ID 提及用户:
Markdown style
To use this mode, pass Markdown in the
parse_mode
field when usingsendMessage
. 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>
尝试一下:
@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")