Загрузка...

Author's article Making our own chat bot in C#.

Thread in C# created by Checkerchin Jan 8, 2019. 3819 views

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

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

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

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

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

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

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

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

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

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

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

    Code

    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)
    Отправим нашу команду.
    Code

    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).
    Тк вас могут послать с ошибкой, тип вы много запросов делаете.

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

    Фиксы:
    Code

    #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
     
  2. Восемнадцать
    Восемнадцать Jan 8, 2019 Услуги дизайна — zelenka.guru/threads/2546871 17,070 Oct 17, 2016
    Круто, если не копипаст откуда-то
     
  3. Checkerchin
    Checkerchin Topic starter Jan 8, 2019 178 Apr 16, 2017
    Не копипаст. Сам делал всё.
     
  4. RaysMorgan
    RaysMorgan Jan 8, 2019 :finger_up: 54,038 Mar 7, 2013
  5. Checkerchin
    Checkerchin Topic starter Jan 8, 2019 178 Apr 16, 2017
    Проще. Но тут сам)))) И все можешь сам настроить как душе угодно. Всё таки такие сервисы, как robochat имеют рамки.
    Если честно, никогда не использовал его.
     
  6. Checkerchin
    Checkerchin Topic starter Jan 8, 2019 178 Apr 16, 2017
    [IMG]
    [IMG]
    [IMG]
     
  7. TrueFalse
    TrueFalse Jan 8, 2019 Цвв 238 May 12, 2018
    а если я бля проведу неск уроков по пайтону, как хуячить ботов в тг и мне тоже авторку ёбнут??? Без всяких библиотек и зависимостей, кроме библы requests.:thinking::thinking::thinking::thinking::thinking::thinking::thinking::thinking::thinking::thinking:
     
  8. Checkerchin
    Checkerchin Topic starter Jan 8, 2019 178 Apr 16, 2017
    Бля, конечно вопрос не по теме, но скорее всего да.
     
  9. ПавелЛинг91717
    Красавчик. Честно говоря, ничего не понял, но читать было очень интересно
     
  10. Checkerchin
    Checkerchin Topic starter Jan 8, 2019 178 Apr 16, 2017
    Вот бы мне так девушки писали :C
     
  11. ПавелЛинг91717
    Пиши им любовные письма. И поймут, и будет интересно :love::love:
     
  12. MrFaank
    MrFaank Jan 8, 2019 22 Jan 6, 2019
    Норм :)Попробуем:)
     
  13. TrueFalse
    TrueFalse Jan 8, 2019 Цвв 238 May 12, 2018
    Не по теме, но кому нужна почти такая же залупа, только для тг, пишите в лс. Мб тоже как тс сделаю несколько таких уроков
     
  14. Checkerchin
    Checkerchin Topic starter Jan 8, 2019 178 Apr 16, 2017
    Делай, интересно будет почитать и посмотреть на твою реализацию.
    А вообще ты же в тюрьме, не ?
     
  15. TrueFalse
    TrueFalse Jan 8, 2019 Цвв 238 May 12, 2018
    Я не тот сорик.. Настоящий во всю на плюсах хуячил, и да, возможно в тюрьме.. А я так, начинающий питонист.....
     
  16. Checkerchin
    Checkerchin Topic starter Jan 13, 2019 178 Apr 16, 2017
    так и на шарпе у него были проекты.
     
  17. vitya790
    vitya790 Feb 5, 2019 19 Jun 3, 2017
    Лучше через библу vkApi работать
     
  18. Checkerchin
    Checkerchin Topic starter Feb 5, 2019 178 Apr 16, 2017
    Да какие библы, скачал библу для работы с джесоном и как хард пошел разгребать ответы
     
  19. PAWZIRE
    PAWZIRE Feb 5, 2019 Banned 45 Jan 13, 2019
    Зачем лишняя библиотека, в C# есть средства для работы с JSON.
     
  20. Checkerchin
    Checkerchin Topic starter Feb 5, 2019 178 Apr 16, 2017
    Во-первых, я не знал.
    Во-вторых, мне кажется это удобнее, чем штатные средства.
     
Top
Loading...