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在使用时在字段中传递 MarkdownsendMessage。在您的消息中使用以下语法:
[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)
尝试这个:
@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)