Начал изучать C# и решил попробовать написать простенького бота для Телеги. Решил поделиться, вдруг кому то пригодится, для тех, кто начинает P.S Как только разберусь с InLine Кнопками, могу добавить, если кому то интересно будет Что нам необходимо : Библиотека Newtonsoft.Json (Проект - Управление пакетами Nuget -- там в поиск ****аете ) Объявляем переменные: int update_id = 0; // Для сообщений int count = 0; // Уровень тупости ( писал для друзей, это не обязательно) string messageFromId = ""; // ID отправителя string messageText = ""; // Текст сообщения для бота string token = ""; // Токен Вашего бота Код int update_id = 0; // Для сообщений int count = 0; // Уровень тупости ( писал для друзей, это не обязательно) string messageFromId = ""; // ID отправителя string messageText = ""; // Текст сообщения для бота string token = ""; // Токен Вашего бота Так как РКН блокирует все сервисы Телеграмма, а нам необходимо будет отправлять запросы и скачивать строку, то необходимы ******. Тут все просто WebClient webClient = new WebClient(); // Собсна сам клиент, который все и будет делать webClient.Proxy = new WebProxy("Любой айпишник валидного ******. Я юзал https"); Код WebClient webClient = new WebClient(); // Собсна сам клиент, который все и будет делать webClient.Proxy = new WebProxy("Любой айпишник валидного ******. Я юзал https"); Далее еще одна переменная, в которой по сути указан просто адрес нашего бота : string startUrl = $"https://api.telegram.org/bot{token}"; Код 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 массив (если можно так назвать?), в котором хранятся сообщения Код 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); Код 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 = ""; // Делаем переменную пустую } Код 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 = ""; } Код 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 = ""; Код 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 = ""; } } } } } Код 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 = ""; } } } } }
В чем проблема? Хочу просто отправить сообщение с помощью бота и выдает такую ошибку http://prntscr.com/kbfac2 http://prntscr.com/kbfarg
Там показывает id последнего человека, который отправил сообщение боту. То есть, если ты отправил боту сообщение, то id будет твой, если друг, то id твоего друга
Я хочу сделать обычную отправку сообщения ботом себе в лс. Сам запрос правильный http://prntscr.com/kboe1t . В чем тогда проблема? string MyID = "XXXXXX"; string messageText = "Test"; string token = "XXXXXXXXX; WebClient webClient = new WebClient(); webClient.Proxy = new WebProxy("138.197.157.68:8080"); string startUrl = $"https://api.telegram.org/bot{token}"; string url = $"{startUrl}/sendMessage?chat_id={MyID}&text={messageText}"; webClient.DownloadString(url); Код string MyID = "XXXXXX"; string messageText = "Test"; string token = "XXXXXXXXX; WebClient webClient = new WebClient(); webClient.Proxy = new WebProxy("138.197.157.68:8080"); string startUrl = $"https://api.telegram.org/bot{token}"; string url = $"{startUrl}/sendMessage?chat_id={MyID}&text={messageText}"; webClient.DownloadString(url);