電報ボットを作成し、sendMessage
メソッドを使用してメッセージを送信しています。 _@username
_を使用してユーザーに言及するのは簡単ですが、ユーザー名がない場合にユーザーに言及するにはどうすればよいですか?
電報アプリ/ウェブを使用している場合、@integer_id (name)
でユーザーに言及でき、電報アプリ/ウェブはそれをクリック可能なテキストに変換します。 _integer_id
_を入力した後、ユーザーを選択すると、_@
_が自動的に生成されます。
別の背景: forceReply
を使用しようとしています。ユーザー名を持っている場合は、sendMessage
方法。
私が作成しているボットは、ボットのような「クイズ」です。各プレーヤーが順番に進む必要があり、ボットが質問を送信する場合、ボットからの各メッセージは異なるプレーヤーをターゲットにします。
注:_Privacy Mode
_を無効にしているわけではありません。不要なメッセージで電報をサーバーに爆撃したくないのです。それは私の安い厄介なサーバーを過負荷にしていた。そのため、オプションではなく無効にします。
私は、ボットが選択されたプレーヤーを聞くことができる他のソリューションに対してオープンです。
ありがとう。
UPDATE 21/10:電報のためにボットサポートと話した、彼らは言った、今のところボットはユーザー名なしでユーザーに言及できない。
私の場合、forceReply
を使用し続け、また、セットアップするためのユーザー名を持たないユーザーに短いmsgを与えたので、forceReply
関数から利益を得ることができます。
公式ドキュメント によると、マークアップ付きの数値IDでユーザーに言及することが可能です。
[inline mention of a user](tg://user?id=123456789)
これによると link :マークアップ付きの数値idでユーザーを言及することが可能です:
マークダウンスタイル
このモードを使用するには、
sendMessage
を使用するときにparse_mode
フィールドにMarkdownを渡します。メッセージで次の構文を使用します。
[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>
これを試して:
@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")
ボットはIDでユーザーにタグを付けることができますが、公式のHTTPボットAPIを使用してこれを行うことはできません。
更新:もう必要ではありません。Telegramがこのためのネイティブサポートを追加したためです。
MadelineProto (PHP)でボットアカウントにログインすると、この 'link'を使用して、parse_modeがmarkdownに設定されたIDで誰かに言及できます。
[Daniil Gentili](mention:@danogentili)