programkeyj
@programkeyj
Начинающий unity разработчик, использую linux

Как банить по упоминанию телеграм c#?

Провёл пару экспериментов и результат всегда один и тот-же...
var entities = message.Entities;
Тут всё нормально и даже если вывести тип Console.WriteLine(entities[0].Type);, получаю вывод Mention.(В телеграме пишу при этом упоминание через @ и там вроде всё как надо)
Но если попробовать вывести UserConsole.WriteLine(entities[0].User); получаю пустую строку,
а если айдиConsole.WriteLine(entities[0].User.Id);вообще ловлю NullReferenceException, что в принципе логично. Но не понятно по чему он не возвращает мне User

Если попробовать Console.WriteLine(entities[0].Length);получаю 20, что совпадает с количеством символов в упоминании

Это всё происходит в группе(если это важно)

Если описывать целиком, то у меня бот обрабатывает все сообщения
и если попадается подходящая команда, идёт уже выполнение. С этим проблем нет, он умеет выводить инфу об админах и о тебе.
Но я хочу сделать чтобы можно было командой банить участников типа ban @username И всё хорошо только этот самый username он не может мне вернуть типом User да и вообще никак(проверяю опять-же с участником группы, а не с рандомным @)

UPD: Да, выяснилось что получить User можно только из text_mention и тогда так банить получается. Но Вопрос остаётся открытым как банить по упоминанию? Потому что у большенства есть юзернеймы, а если он есть ты неможешь упомянуть через text_mention

Спасибо.
  • Вопрос задан
  • 224 просмотра
Решения вопроса 1
KPoseidon
@KPoseidon
Шарпист с косяками
В ТГ Бот Апи нельзя получить по юзернейму Юзер Айди и т.д.
Поэтому придётся немного в проект всунуть ТГ Апи(ТГ Апи и ТГ Бот Апи - разные вещи).
Можешь попробовать библу WTelegram, раз на Шарпе пишешь + тебе так нужно по юзернейму получить данные о юзере.

В офф сайте телеги регаем наше приложение, чтобы получить api_id и api_hash для нашего будущего клиента, который будет через юзернейм добывать данные о пользователе.

Примерный код(надеюсь вы не нулёвый Шарпист):

private static int api_id = 0; //айди клиента с сайта
        private static string api_hash = "хэш клиента с сайта";

        private static Client client = new Client(api_id, api_hash); //Инициализация клиента

        public static async Task<object[]> GetUserIdByUsernameAsync(string username, string token, Client client) //создаём метод, который будет принимать токен бота, клиента и юзернейм, а дальше в проекте просто вызываем этот метод
        {
            try
            {
                await client.LoginBotIfNeeded(token);
                var user = await client.Contacts_ResolveUsername(username);
                object[] userData = { user.User.id, user.User.first_name };
                await client.Auth_LogOut();
                return userData;
            }
            catch(Exception exc)
            {
                Console.WriteLine(exc);
                return null;
            }
        }
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы