提问者:小点点

使用用户ID(telegramBot)在电报中提及人


我试图让我的电报机器人提及用户的电报谁没有用户名,并希望提及他们使用用户ID。下面是我的python代码。。它不会标记那些没有用户名的用户。

def welcome(update, context, new_member):
    # Greets a person who joins the chat
    message = update.message
    chat_id = message.chat.id
    if new_member.username is None:
        username = "["+new_member.first_name+"](tg://user?id="+str(new_member.id)+")"
    else:
        username = new_member.username
    logger.info(
        "%s joined to chat %d (%s)",
        escape(username),
        chat_id,
        escape(message.chat.title),
    )

    text = (
        f"Hello @{username}! Welcome to the {message.chat.title} "
        "telegram group!\n"
        "Please introduce yourself."
    )

    context.bot.send_message(chat_id=chat_id, text=text)

根据链接:可以通过带有标记的数字id提及用户:Markdown样式

要使用此模式,请在使用sendMessage时在parse_mode字段中传递Markdown。在消息中使用以下语法:

内联提及用户

我无法将其应用到我的代码中并使其工作。有人能帮我吗?该功能已在此处成功应用

https://github.com/domdorn/telegram/commit/ea308cadb739a9a018c7fbabc16824e2ff82d415

我想在我的代码中应用相同的方法,以便它会提到没有用户名和ID的用户。


共2个答案

匿名用户

您必须指定解析模式=电报。解析模式。标记或send\u message方法中的parse\u mode='MARKDOWN'。您编辑的代码应如下所示:

def welcome(update, context, new_member):
    # Greets a person who joins the chat
    message = update.message
    chat_id = message.chat.id
    if new_member.username is None:
        username = "["+new_member.first_name+"](tg://user?id="+str(new_member.id)+")"
    else:
        username = new_member.username
    logger.info(
        "%s joined to chat %d (%s)",
        escape(username),
        chat_id,
        escape(message.chat.title),
    )

    text = (
        f"Hello @{username}! Welcome to the {message.chat.title} "
        "telegram group!\n"
        "Please introduce yourself."
    )

    context.bot.send_message(
        chat_id=chat_id,
        text=text,
        parse_mode=telegram.ParseMode.MARKDOWN,
    )

您也可以使用HTML或MARKDOWN\u V2。

链接到留档和完整信息:
https://python-telegram-bot.readthedocs.io/en/stable/telegram.parsemode.html#telegram.ParseModehttps://core.telegram.org/bots/api#formatting-options

提高代码质量和简化代码的提示(我认为您正在使用python Telegrame bot):

  • 像这样导入库。它使您可以更容易地从电报导入编码:
    *
    。外部导入*

匿名用户

您应该指定parse\u mode参数:

context.bot.send_message(
    chat_id=chat_id,
    text=text,
    parse_mode='markdown',
)

顺便说一句,当您使用内联链接时,没有必要写“@”。

此外,我建议您使用电报文本模块来编写指向用户的链接:

from telegram_text import InlineUser, User


def welcome(update, context, new_member):
    ...
    if new_member.username is None:
        user = InlineUser(new_member.first_name, new_member.id)
    else:
        user = User(new_member.username)

    text = (
        f"Hello {user}! Welcome to the {message.chat.title} "
        "telegram group!\n"
        "Please introduce yourself."
    )