[C#] Бот для Телеграмма

Flwk

Member
Регистрация
12.11.2018
Сообщения
46
Оценка реакций
29
Начал изучать C# и решил попробовать написать простенького бота для Телеги. Решил поделиться, вдруг кому то пригодится, для тех, кто начинает
P.S Как только разберусь с InLine Кнопками, могу добавить, если кому то интересно будет

Что нам необходимо : Библиотека Newtonsoft.Json (Проект - Управление пакетами Nuget -- там в поиск вбиваете )

Объявляем переменные:

Код:
int update_id = 0; // Для сообщений
int count = 0; // Уровень тупости ( писал для друзей, это не обязательно)
string messageFromId = ""; // ID отправителя
string messageText = ""; // Текст сообщения для бота
string token = ""; // Токен Вашего бота
Так как РКН блокирует все сервисы Телеграмма, а нам необходимо будет отправлять запросы и скачивать строку, то необходимы прокси. Тут все просто

Код:
WebClient webClient = new WebClient(); // Собсна сам клиент, который все и будет делать
webClient.Proxy = new WebProxy("Любой айпишник валидного прокси. Я юзал https");
Далее еще одна переменная, в которой по сути указан просто адрес нашего бота :

Код:
string startUrl = $"https://api.telegram.org/bot{token}";
Затем бесконечный цикл (while (true)), в котором пишем следующее :

Код:
Thread.Sleep(100); // Что б не было спама
string url = $"{startUrl}/getUpdates?offset={update_id + 1}";  // прибавляем к id сообщения +1, чтоб считалось прочитанным
string response = webClient.DownloadString(url); // Скачиваем строку с ответом, которую мы получили при запросе на url
var arr = JObject.Parse(response)["result"].ToArray(); // json массив (если можно так назвать?), в котором хранятся сообщения
После этого, создаем еще один цикл перебора по нашему массиву с ответами


Код:
 foreach (var message in arr) // logic

                {
                    string s1 = Convert.ToString(message["update_id"]);
                    update_id = Convert.ToInt32(s1);
Затем идет конструкция try ... catch в которую мы пишем следующее :


Код:
 try

                    {
                    
                        messageFromId = message["message"]["from"]["id"].ToString();
                        Console.WriteLine($"{update_id} {messageFromId} {messageText}");
                        string userMessage = message["message"]["text"].ToString();
                    
                        if (userMessage == "Тут Ваша команда")
                        {
                            // Ответ для пользователя
                            var whoispidorname = message["message"]["from"]["first_name"].ToString(); // Тут мы получаем Имя пользователя
                            var whoispidorlastname = message["message"]["from"]["last_name"].ToString(); //  Фамилию
                            messageText += whoispidorname + whoispidorlastname; // Сам текст сообщения, который отправит бот
                            url = $"{startUrl}/sendMessage?chat_id={messageFromId}&text={messageText}"; // Запрос
                            webClient.DownloadString(url); // Загрузка запроса
                            messageText = ""; // Делаем переменную пустую
                        
                        }
Другой пример
Код:
else if (userMessage == "")

                        {
                            messageText += ""; // Ваше сообщения для юзера
                            url = $"{startUrl}/sendMessage?chat_id={messageFromId}&text={messageText}";
                            webClient.DownloadString(url);
                            messageText = "";
                        }
Так как наш бот умеет принимать только текст, а остальное нам надо как то просто обработать и не крашануться, то тут используем catch :

Код:
catch (System.NullReferenceException)

                    {
                    
                            messageText += "Something"; // Текст сообщения
                            url = $"{startUrl}/sendMessage?chat_id={messageFromId}&text={messageText}";
                            webClient.DownloadString(url);
                            messageText = "";
Вот и все. Повторюсь, только начинаю, если кто - чего подскажет, буду благодарен.
Полный код

Код:
 static void Main(string[] args)

        {
        
            int update_id = 0; // for message
            int count = 0; // this count of the level of stupidity
            string messageFromId = ""; // id user from got message
            string messageText = ""; // text messag
            string token = ""; // token your bot
        

            WebClient webClient = new WebClient();
            webClient.Proxy = new WebProxy("199.195.251.143:03128");
            string startUrl = $"https://api.telegram.org/bot{token}"; // start
            while (true)
            {
            
                Thread.Sleep(100); // for antispam
                string url = $"{startUrl}/getUpdates?offset={update_id + 1}";  // i am do +1 for the message has been read
                string response = webClient.DownloadString(url); // download string

                var arr = JObject.Parse(response)["result"].ToArray(); // this array of all message

                foreach (var message in arr) // logic
                {
                    string s1 = Convert.ToString(message["update_id"]); // id message
                    update_id = Convert.ToInt32(s1); // convert
                    try
                    {
                    
                        messageFromId = message["message"]["from"]["id"].ToString();
                        Console.WriteLine($"{update_id} {messageFromId} {messageText}");
                        string userMessage = message["message"]["text"].ToString();
                    
                        if (userMessage == "?") // any command
                        {
                            //its response for users command
                            var whoispidorname = message["message"]["from"]["first_name"].ToString();
                            var whoispidorlastname = message["message"]["from"]["last_name"].ToString();
                            messageText += whoispidorname + whoispidorlastname;
                            url = $"{startUrl}/sendMessage?chat_id={messageFromId}&text={messageText}";
                            webClient.DownloadString(url);
                            messageText = "";
                        
                        }
                        // the same
                        else if (userMessage == "")
                        {
                            messageText += ""; // text message for users
                            url = $"{startUrl}/sendMessage?chat_id={messageFromId}&text={messageText}";
                            webClient.DownloadString(url);
                            messageText = "";
                        }
                        //something
                        else if (userMessage == "")
                        {
                            messageText += "somethingTextForUsers";
                            url = $"{startUrl}/sendMessage?chat_id={messageFromId}&text={messageText}";
                            webClient.DownloadString(url);
                            messageText = "";
                        }
                    
                        else
                        {
                            messageText += "Введите команду\nВведите слово Команды, если не знакомы со списком команд";
                            url = $"{startUrl}/sendMessage?chat_id={messageFromId}&text={messageText}";
                            webClient.DownloadString(url);
                            messageText = "";
                        
                        }
                    }
                    catch (System.NullReferenceException) // The bot is broken when you receive something, in addition to the text
                    {
                        if (count < 3)
                        {
                            messageText += "Something";
                            url = $"{startUrl}/sendMessage?chat_id={messageFromId}&text={messageText}";
                            webClient.DownloadString(url);
                            messageText = "";
                            count++;
                        }
                        else if (count == 3)
                        {
                            messageText += "Something";
                            url = $"{startUrl}/sendMessage?chat_id={messageFromId}&text={messageText}";
                            webClient.DownloadString(url);
                            messageText = "";
                            count++;
                        }
                        else if(count > 3)
                        {
                            messageText += "Something";
                            url = $"{startUrl}/sendMessage?chat_id={messageFromId}&text={messageText}";
                            webClient.DownloadString(url);
                            messageText = "";
                        }
                    }
                }
            }
        }
 
  • Like
Реакции: shellest

KrasnowekO

New Member
Регистрация
04.08.2019
Сообщения
4
Оценка реакций
0
Нужен совет по подбору тэна для см siltal TI056X, см довольно древняя но хотелось бы ее оживить. Тэн на ней установлен своеобразный, насколько я понимаю непосредственно на нем присутствует рэле прерывания при перегреве. На фото его видно. Какой тэн можно установить вместо этого?
 

Uno-uno

Member
Регистрация
08.01.2019
Сообщения
50
Оценка реакций
10
Отправь свои контакты в телеге.