#c# #telegram-bot
Вопрос:
В настоящее время я пытаюсь получить идентификаторы пользователей из update.Message.Entities
, для операций с элементами управления работой. Дело в том, что я сопоставил идентификаторы пользователей организации с идентификаторами пользователей Telegram. У меня есть 2 варианта:
- @username
- 1234567890
Telegram docs устанавливает этот формат для упоминания в MarkDown: [inline mention of a user](tg://user?id=123456789)
и я не могу использовать имя пользователя для упоминания пользователя.
Итак,
- Каков правильный путь для получения значения user_id (
long
) ?. - Есть ли способ упомянуть 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);
и вот оно!