Загрузка...

The simplest cart bot [C#]

Thread in C# created by Falweek Jul 21, 2018. 654 views

  1. Falweek
    Falweek Topic starter Jul 21, 2018 Купил как то раз мужик шляпу, а она ему как раз 14 Jun 12, 2017
    Начал изучать C# и решил попробовать написать простенького бота для Телеги. Решил поделиться, вдруг кому то пригодится, для тех, кто начинает
    P.S Как только разберусь с InLine Кнопками, могу добавить, если кому то интересно будет

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

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

    Code

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

    Code

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

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

    Code

    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 массив (если можно так назвать?), в котором хранятся сообщения
    После этого, создаем еще один цикл перебора по нашему массиву с ответами


    Code
     foreach (var message in arr) // logic

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


    Code
     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 = ""; // Делаем переменную пустую

    }
    Другой пример
    Code
    else if (userMessage == "")

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

    Code
    catch (System.NullReferenceException) 

    {

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

    Code
     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 = "";
    }
    }
    }
    }
    }
     
  2. nsmk_inactive95033
    nsmk_inactive95033 Jul 21, 2018 Banned 182 Mar 19, 2017
    ебать
    whoispidorlastname
    :D
     
  3. DiLittle228
    DiLittle228 Jul 21, 2018 No Problem, DUDE 4 Mar 8, 2018
    Бот годный. Надо попробовать
     
  4. Falweek
    Falweek Topic starter Jul 21, 2018 Купил как то раз мужик шляпу, а она ему как раз 14 Jun 12, 2017
    Да я просто для друзей писал, а там выводило, кто пидор, поэтому так и назвал переменную :D
     
  5. Allkatraz
    Allkatraz Jul 26, 2018 0 Jun 29, 2018
  6. Allkatraz
    Allkatraz Jul 26, 2018 0 Jun 29, 2018
    Я отправлю себе в лс. Т.е. в messageFromId должен быть мой id моего акка в телеге?
     
  7. Falweek
    Falweek Topic starter Jul 26, 2018 Купил как то раз мужик шляпу, а она ему как раз 14 Jun 12, 2017
    Там показывает id последнего человека, который отправил сообщение боту. То есть, если ты отправил боту сообщение, то id будет твой, если друг, то id твоего друга
     
  8. Allkatraz
    Allkatraz Jul 27, 2018 0 Jun 29, 2018
    Я хочу сделать обычную отправку сообщения ботом себе в лс. Сам запрос правильный http://prntscr.com/kboe1t . В чем тогда проблема?
    Code
    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);
     
Loading...
Top