F
Flwk
Original poster
Начал изучать C# и решил попробовать написать простенького бота для Телеги. Решил поделиться, вдруг кому то пригодится, для тех, кто начинает
P.S Как только разберусь с InLine Кнопками, могу добавить, если кому то интересно будет
Что нам необходимо : Библиотека Newtonsoft.Json (Проект - Управление пакетами Nuget -- там в поиск вбиваете )
Объявляем переменные:
Так как РКН блокирует все сервисы Телеграмма, а нам необходимо будет отправлять запросы и скачивать строку, то необходимы прокси. Тут все просто
Далее еще одна переменная, в которой по сути указан просто адрес нашего бота :
Затем бесконечный цикл (while (true)), в котором пишем следующее :
После этого, создаем еще один цикл перебора по нашему массиву с ответами
Затем идет конструкция try ... catch в которую мы пишем следующее :
Другой пример
Так как наш бот умеет принимать только текст, а остальное нам надо как то просто обработать и не крашануться, то тут используем catch :
Вот и все. Повторюсь, только начинаю, если кто - чего подскажет, буду благодарен.
Полный код
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 (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 = "";
}
}
}
}
}