Всем привет! Сегодня я вам покажу, как сделать своего чат бота для вк на C#. Бот будет реализован через группу. 1. Идете вот сюда: https://vk.com/groups Жмете вот эту кнопку И создаете свое сообщество. Думаю как это делать вопросов не возникнет. Идем в управление. Управление -> Настройки ->Работа с API. Создаете ключ доступа. Ставите все галочки, если вам это нужно. А так можно ограничиться вроде только доступом к сообщениям. Далее вам дадут ключ вида букв с цифрами. 2. Создаете консольное приложение на C#. Сразу установите NuGet пакет под названием Newtonsoft.Json. ПКМ по проекту -> Manage NuGet Packages... Подключите то, что нам нужно. using Newtonsoft.Json.Linq; using static System.Console; Код 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" Код 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); Код WebClient wc = new WebClient(); string str = wc.DownloadString(requesturl1); Теперь будем работать с json. dynamic json = JObject.Parse(str); Код 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}"); } Код 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 Код 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; } Код 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 Кста половина параметров не нужна. Я сам ахерел. (Если что 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); Код 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); Код 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 Код #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
Проще. Но тут сам)))) И все можешь сам настроить как душе угодно. Всё таки такие сервисы, как robochat имеют рамки. Если честно, никогда не использовал его.
а если я бля проведу неск уроков по пайтону, как хуячить ботов в тг и мне тоже авторку ёбнут??? Без всяких библиотек и зависимостей, кроме библы requests.
Не по теме, но кому нужна почти такая же залупа, только для тг, пишите в лс. Мб тоже как тс сделаю несколько таких уроков
Я не тот сорик.. Настоящий во всю на плюсах хуячил, и да, возможно в тюрьме.. А я так, начинающий питонист.....