web-dev-qa-db-ja.com

テレグラムボット:ユーザー名ではなくIDでユーザーに言及する方法

電報ボットを作成し、sendMessageメソッドを使用してメッセージを送信しています。 _@username_を使用してユーザーに言及するのは簡単ですが、ユーザー名がない場合にユーザーに言及するにはどうすればよいですか?

電報アプリ/ウェブを使用している場合、@integer_id (name)でユーザーに言及でき、電報アプリ/ウェブはそれをクリック可能なテキストに変換します。 _integer_id_を入力した後、ユーザーを選択すると、_@_が自動的に生成されます。

別の背景: forceReply を使用しようとしています。ユーザー名を持っている場合は、sendMessage 方法。

私が作成しているボットは、ボットのような「クイズ」です。各プレーヤーが順番に進む必要があり、ボットが質問を送信する場合、ボットからの各メッセージは異なるプレーヤーをターゲットにします。

注:_Privacy Mode_を無効にしているわけではありません。不要なメッセージで電報をサーバーに爆撃したくないのです。それは私の安い厄介なサーバーを過負荷にしていた。そのため、オプションではなく無効にします。

私は、ボットが選択されたプレーヤーを聞くことができる他のソリューションに対してオープンです。

ありがとう。

UPDATE 21/10:電報のためにボットサポートと話した、彼らは言った、今のところボットはユーザー名なしでユーザーに言及できない。

私の場合、forceReplyを使用し続け、また、セットアップするためのユーザー名を持たないユーザーに短いmsgを与えたので、forceReply関数から利益を得ることができます。

16
Awang Setyawan

公式ドキュメント によると、マークアップ付きの数値IDでユーザーに言及することが可能です。

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

16
Anatoly Rugalev

これによると 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>
0
GameO7er

これを試して:

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

ボットはIDでユーザーにタグを付けることができますが、公式のHTTPボットAPIを使用してこれを行うことはできません。

更新:もう必要ではありません。Telegramがこのためのネイティブサポートを追加したためです。

MadelineProto (PHP)でボットアカウントにログインすると、この 'link'を使用して、parse_modeがmarkdownに設定されたIDで誰かに言及できます。

 
 [Daniil Gentili](mention:@danogentili)
 
0
Jonas Fowl