Загрузка...

Авторская статья Делаем своего чат бота на C#.

Тема в разделе C# создана пользователем Checkerchin 8 янв 2019. 3789 просмотров

  1. Checkerchin
    Checkerchin Автор темы 8 янв 2019 178 16 апр 2017
    Всем привет! Сегодня я вам покажу, как сделать своего чат бота для вк на C#.
    Бот будет реализован через группу.

    1. Идете вот сюда: https://vk.com/groups
    Жмете вот эту кнопку
    [IMG]
    И создаете свое сообщество.
    Думаю как это делать вопросов не возникнет.

    Идем в управление.
    [IMG]
    Управление -> Настройки ->Работа с API.

    Создаете ключ доступа. Ставите все галочки, если вам это нужно. А так можно ограничиться вроде только доступом к сообщениям.
    [IMG]
    Далее вам дадут ключ вида букв с цифрами.

    2. Создаете консольное приложение на C#.
    Сразу установите NuGet пакет под названием Newtonsoft.Json.
    ПКМ по проекту -> Manage NuGet Packages...
    [IMG]

    Подключите то, что нам нужно.
    Код

    using Newtonsoft.Json.Linq;
    using static System.Console;

    Давайте сделаем запрос для получения 100 диалогов:
    Метод: messages.getDialogs
    Документация на метод: https://vk.com/dev/messages.getDialogs
    Код
    string requesturl1 = "https://api.vk.com/method/messages.getDialogs?v=5.85&access_token=ТУТ_ВАШ_КЛЮЧ&count=100&offset=0"
    Давайте скачаем ответ в нашу программу. Воспользуемся классом System.Net.WebClient
    Код

    WebClient wc = new WebClient();
    string str = wc.DownloadString(requesturl1);
    Теперь будем работать с json.
    Код
    dynamic json = JObject.Parse(str);
    Исследовав ответ, спарсим id пользователей из диалогов
    Код

    for (int i = 0; i < Convert.ToInt32(json.response.count); i++)
    {
    WriteLine($"ID {i}: {json.response.items[i].message.user_id}");
    }
    Как мы будем понимать, что есть не прочитанные сообщения?
    Дело в том, что если вашему боту написали, то появится параметр unanswered == true.
    Код

    json.response.unread_dialogs != 0
    json.response.items[i].unanswered == true
    Это мы и будем проверять. И дальше отвечать на сообщения.

    Код

    if (Convert.ToInt32(json.response.unread_dialogs) != 0)
    {
    string messagefromhell;
    for (int i = 0; i < Convert.ToInt32(json.response.count); i++)
    {
    if (json.response.items[i].unanswered == true)
    {
    string temp = json.response.items[i].message.body;
    messagefromhell = Encoding.UTF8.GetString(Encoding.Default.GetBytes(temp)); //Хз у меня одного проблема с кодировкой была или нет. Но если вам приходят, какая-то хуета не в нормальной кодировке, то пробуйте фиксить, как я.
    int user_id = json.response.items[i].message.user_id;
    string chat_id = json.response.items[i].message.id;
    string message = "";
    Random r = new Random();

    switch (messagefromhell.ToLower()) //Кста зацените фишку с String.ToLower(). Если пользователь даун и пишет капсом или разными буквами, то это фиксится)))
    {
    case "привет":
    message = "Привет!";
    break;
    case "hello":
    message = "Hello!";
    break;
    case "help":
    message = "Help или Помощь - вывести данное сообщение\nВероятность - узнать вероятность события.";
    break;
    case "помощь":
    message = "Help или Помощь - вывести данное сообщение\nВероятность - узнать вероятность события.";
    break;
    default:
    if(messagefromhell.ToLower() == "вероятность")
    {
    message = "Укажите событие!";
    break;
    }
    if (messagefromhell.ToLower().Contains("вероятность") && messagefromhell.ToLower() != "вероятность")
    {
    message = "Вероятность этого события равна " + r.Next(0, 100) + "%";
    break;
    }
    message = "Данной команды не существует! Введите \"Помощь\"";
    break;
    }

    Мы сделали обработчик команд. В зависимости от сообщения пользователя мы будем ставить соответствующий ответ.
    Теперь мы должны отправить наш ответ.
    Методом: messages.send
    Документация: https://vk.com/dev/messages.send
    Кста половина параметров не нужна. Я сам ахерел.
    [IMG]
    (Если что user_id рандомный на скрине написан, просьба не писать этому человеку xDD)
    Отправим нашу команду.
    Код

    string request2 = $"https://api.vk.com/method/messages.send?v=5.85&access_token={key}&user_id={user_id}&chat_id={chat_id}&message={message}";
    str = wc.DownloadString(request2);
    Если вам нужно - проверяйте str на ошибки или что-то, как я показывал при помощи json.

    Всё это засовываете в огромный цикл while(true)
    С задержкой Thread.Sleep(2000).
    Тк вас могут послать с ошибкой, тип вы много запросов делаете.

    Это вставляете (опять таки если вам это надо) после
    Код
    dynamic json = JObject.Parse(str);

    Фиксы:
    Код

    #region fixed_errors
    try
    {
    if (Convert.ToInt32(json.error.error_code) == 5)
    {
    WriteLine(json.error.error_msg);
    ReadKey();
    Environment.Exit(0);
    }
    if (Convert.ToInt32(json.error.error_code) == 6)
    {
    WriteLine(json.error.error_msg);
    ReadKey();
    Environment.Exit(0);
    }
    if (Convert.ToInt32(json.error.error_code) == 7)
    {
    WriteLine(json.error.error_msg);
    ReadKey();
    Environment.Exit(0);
    }
    if (Convert.ToInt32(json.error.error_code) == 10)
    {
    WriteLine(json.error.error_msg);
    ReadKey();
    Environment.Exit(0);
    }
    if (Convert.ToInt32(json.error.error_code) == 15)
    {
    WriteLine(json.error.error_msg);
    ReadKey();
    Environment.Exit(0);
    }
    else
    {
    WriteLine("Нестандартная ошибка!");
    WriteLine($"Error code: {Convert.ToInt32(json.error.error_code)}");
    WriteLine($"Error message: {json.error.error_msg}");
    ReadKey();
    Environment.Exit(0);
    }
    }
    catch (Exception ex) { }
    #endregion

    Всем спасибо за внимание и прочтение. Надеюсь вам это пригодится.
    Задавайте свои вопросы ниже.

    #АвторскаяСтатья
    RaysMorgan
     
    8 янв 2019 Изменено
  2. Восемнадцать
    Восемнадцать 8 янв 2019 Услуги дизайна — zelenka.guru/threads/2546871 16 694 17 окт 2016
    Круто, если не копипаст откуда-то
     
  3. Checkerchin
    Checkerchin Автор темы 8 янв 2019 178 16 апр 2017
    Не копипаст. Сам делал всё.
     
  4. RaysMorgan
  5. Checkerchin
    Checkerchin Автор темы 8 янв 2019 178 16 апр 2017
    Проще. Но тут сам)))) И все можешь сам настроить как душе угодно. Всё таки такие сервисы, как robochat имеют рамки.
    Если честно, никогда не использовал его.
     
  6. Checkerchin
    Checkerchin Автор темы 8 янв 2019 178 16 апр 2017
    [IMG]
    [IMG]
    [IMG]
     
  7. TrueFalse
    TrueFalse 8 янв 2019 Цвв 239 12 май 2018
    а если я бля проведу неск уроков по пайтону, как хуячить ботов в тг и мне тоже авторку ёбнут??? Без всяких библиотек и зависимостей, кроме библы requests.:thinking::thinking::thinking::thinking::thinking::thinking::thinking::thinking::thinking::thinking:
     
  8. Checkerchin
    Checkerchin Автор темы 8 янв 2019 178 16 апр 2017
    Бля, конечно вопрос не по теме, но скорее всего да.
     
  9. ПавелЛинг91717
    Красавчик. Честно говоря, ничего не понял, но читать было очень интересно
     
  10. Checkerchin
    Checkerchin Автор темы 8 янв 2019 178 16 апр 2017
    Вот бы мне так девушки писали :C
     
  11. ПавелЛинг91717
    Пиши им любовные письма. И поймут, и будет интересно :love::love:
     
  12. MrFaank
    MrFaank 8 янв 2019 22 6 янв 2019
    Норм :)Попробуем:)
     
  13. TrueFalse
    TrueFalse 8 янв 2019 Цвв 239 12 май 2018
    Не по теме, но кому нужна почти такая же залупа, только для тг, пишите в лс. Мб тоже как тс сделаю несколько таких уроков
     
  14. Checkerchin
    Checkerchin Автор темы 8 янв 2019 178 16 апр 2017
    Делай, интересно будет почитать и посмотреть на твою реализацию.
    А вообще ты же в тюрьме, не ?
     
  15. TrueFalse
    TrueFalse 8 янв 2019 Цвв 239 12 май 2018
    Я не тот сорик.. Настоящий во всю на плюсах хуячил, и да, возможно в тюрьме.. А я так, начинающий питонист.....
     
  16. Checkerchin
    Checkerchin Автор темы 13 янв 2019 178 16 апр 2017
    так и на шарпе у него были проекты.
     
  17. vitya790
    vitya790 5 фев 2019 C# Developer | vityaSteam 19 3 июн 2017
    Лучше через библу vkApi работать
     
  18. Checkerchin
    Checkerchin Автор темы 5 фев 2019 178 16 апр 2017
    Да какие библы, скачал библу для работы с джесоном и как хард пошел разгребать ответы
     
  19. PAWZIRE
    PAWZIRE 5 фев 2019 Заблокирован(а) 45 13 янв 2019
    Зачем лишняя библиотека, в C# есть средства для работы с JSON.
     
  20. Checkerchin
    Checkerchin Автор темы 5 фев 2019 178 16 апр 2017
    Во-первых, я не знал.
    Во-вторых, мне кажется это удобнее, чем штатные средства.
     
Загрузка...
Top