Загрузка...

Асинхронный эхо бот на запросах в ВК

Тема в разделе C# создана пользователем Sad0w 19 июн 2024. 217 просмотров

Загрузка...
  1. Sad0w
    Sad0w Автор темы 19 июн 2024 50 27 май 2023
    Всем привет. Решил я переписать своего бота с Python на .NET 8

    Зависимости:
    Для работы кода, необходимо установить пакет Newtonsoft.Json


    Исходный код с пояснениями:
    CSHARP
    using Newtonsoft.Json.Linq;

    class Program
    {
    private static HttpClient client = new();
    private static Random random = new();

    private static string token = ""; // здесь хранится токен бота
    private static string version = "5.199"; // версия longpoll. на момент написания темы, последняя версия 5.199

    static async Task Main()
    {
    string res = await client.GetStringAsync($"https://api.vk.com/method/messages.getLongPollServer?v={version}&access_token={token}&need_pts=1"); // получаем данные longpoll сервера
    JObject getLongPollServer = JObject.Parse(res); // получаем json

    while (true)
    {
    res = await client.GetStringAsync($"https://api.vk.com/method/messages.getLongPollHistory?v={version}&access_token={token}"
    + $"&ts={getLongPollServer["response"]["ts"]}&pts={getLongPollServer["response"]["pts"]}"); // получаем все события
    JObject getLongPollHistory = JObject.Parse(res); // получаем json

    if (getLongPollHistory["response"]["history"].Count() > 0) // если найдено событие
    getLongPollServer["response"]["pts"] = getLongPollHistory["response"]["new_pts"]; // получаем новый pts

    if (getLongPollHistory["response"]["messages"]["count"].Value<int>() > 0) // если сообщений больше нуля
    {
    long user_id = getLongPollHistory["response"]["messages"]["items"][0]["from_id"].Value<long>(); // получаем айди отправителя
    string message = getLongPollHistory["response"]["messages"]["items"][0]["text"].Value<string>(); // получаем сообщение

    await client.GetAsync($"https://api.vk.com/method/messages.send?v={version}&access_token={token}"
    + $"&random_id={random.Next(1, 2147483647)}&user_id={user_id}&message={message}"); // отправляем сообщение в ответ
    }
    }
    }
    }
     
  2. Fekre
    Fekre 19 июн 2024 просите скидки 1591 8 апр 2019
    ура, дождались
     
  3. vtlstolyarov
    vtlstolyarov 20 июн 2024 474 8 янв 2022
    В .NET8 есть
    System.Text.Json
    вместо
    Newtonsoft.Json
     
    1. Sad0w Автор темы
      vtlstolyarov, знаю, но мне привычнее использовать Newtonsoft.Json
Top