Как получить идентификатор пользователя из сообщения.Сущность?

#c# #telegram-bot

Вопрос:

В настоящее время я пытаюсь получить идентификаторы пользователей из update.Message.Entities , для операций с элементами управления работой. Дело в том, что я сопоставил идентификаторы пользователей организации с идентификаторами пользователей Telegram. У меня есть 2 варианта:

  • @username
  • 1234567890

Telegram docs устанавливает этот формат для упоминания в MarkDown: [inline mention of a user](tg://user?id=123456789) и я не могу использовать имя пользователя для упоминания пользователя.

Итак,

  1. Каков правильный путь для получения значения user_id ( long ) ?.
  2. Есть ли способ упомянуть user by user_name ?

Ответ №1:

Хорошо, прежде всего, вам нужно будет собрать объект сообщения, ссылающийся на пользователя, что, я полагаю, вы уже делаете. Допустим, например, что пользователь упоминается index [1] в message.Entities массиве, для сбора идентификатора пользователя вам нужно сделать что-то вроде этого:

 User usr = message.Entities[1].User as User;
long id = usr.Id;
 

и вот, у вас есть идентификатор.

Во-вторых, да, вы можете «упомянуть» пользователя по его «first_name», но используя немного взлома … вот оно:

 await bot.SendTextMessageAsync(message.Chat, $"<a href="tg://user?id={usr.Id}">{usr.FirstName}</a>", parseMode: Telegram.Bot.Types.Enums.ParseMode.Html);
 

и вот оно!