Продолжая свои эксперименты с «умным» домом, ради интереса я решил добавить группу в ВК для управления некоторыми его характеристиками.
Для этой статьи поставим задачу: попробуем написать на C# простого бота, который будет отвечать от имени сообщества в ВК, и рассмотрим, как его быстро запустить на арм32 (в моем случае на Orange Pi Zero).
Мысль о развертывании есть много других вариантов (например, установить рантайм), это один из них
Итак, давайте разобьем его на разделы.
Создание приложения в ВК Вот подробная документация
- Для создания бота идем здесь
Нажмите «Создать приложение» и выберите «Автономное приложение».
- Теперь зайдите в управление и во вкладке Application Id запомните его Id. Нам это пригодится позже.
- Отправляем запрос, просто вставив в строку браузера:
https://oauth.vk.com/authorizeЭclient_id=YOURAPPID&group_ids=YOURGROUPID6&display=page&scope=messages,wall,manage&response_type=token&v=5.92
- Предоставляем доступ к приложению
- И мы получаем этот ответ
https://oauth.vk.com/blank.html#expires_in=0&access_token_YOURGROUPID=YOURTOKEN
Где токен будет представлять собой очень длинную комбинацию латинских букв и цифр.
- Перейти к управлению сообществом
-
-
- Перейдите на вкладку «Управление сообществом».
- Использование API и API LongPoll в нем
- Типы событий (события), отмечаем нужные, для тестов я бы отметил все.
Добавлять ВКонтакте спойлер К сожалению, документация на вики немного устарела.
Одна из причин создания этого руководства.
Но есть отличная поддержка Здесь.
Мы разрешаем использовать наш токен: var api = new VkApi();
api.Authorize(new ApiAuthParams(){AccessToken =MyAppToken });
И в бесконечном цикле мы будем получать обновления var s = api.Groups.GetLongPollServer(MyGroupId);
while (true)
{
var poll = api.Groups.GetBotsLongPollHistory(
new BotsLongPollHistoryParams()
{Server = s.Server, Ts = s.Ts, Key = s.Key, Wait = 1});
}
Давайте проверим, получили ли мы что-нибудь if(poll?.
Updates== null) continue;
По всем полученным данным мы узнаем, является ли что-то из этого сообщением, если да, то распечатаем его содержимое foreach (var a in poll.Updates)
{
if (a.Type == GroupUpdateType.MessageNew)
{
Console.WriteLine(a.Message.Body);
}
}
И мы ответим пользователю тем же текстом api.Messages.Send(new MessagesSendParams()
{
UserId = a.Message.UserId,
Message = a.Message.Body
});
Получен код class Program
{
public static string MyAppToken =>
"f6bf5e26*************************************************************";
public static ulong MyGroupId => 10******;
static void Main(string[] args)
{
var api = new VkApi();
api.Authorize(new ApiAuthParams(){AccessToken =MyAppToken });
var s = api.Groups.GetLongPollServer(MyGroupId);
while (true)
{
try
{
var poll = api.Groups.GetBotsLongPollHistory(
new BotsLongPollHistoryParams()
{Server = s.Server, Ts = s.Ts, Key = s.Key, Wait = 1});
if(poll?.
Updates== null) continue;
foreach (var a in poll.Updates)
{
if (a.Type == GroupUpdateType.MessageNew)
{
Console.WriteLine(a.Message.Body);
api.Messages.Send(new MessagesSendParams()
{
UserId = a.Message.UserId,
Message = a.Message.Body
});
}
}
}
}
}
catch (LongPollException exception)
{
if (exception is LongPollOutdateException outdateException)
server.Ts = outdateException.Ts;
else
{
s = api.Groups.GetLongPollServer(MyGroupId);
}
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
}
Соберем полученный код для нашей платы dotnet publish .
-r linux-arm
И перетащим на доску нужный каталог
Отправить по ssh и запустить chmod +x ConsoleApp1
.
/ConsoleApp1
Результат Отправить сообщение
Получаем сообщение в консоли
Мы получаем ответ
Диалог
Теги: #Разработка на Raspberry Pi #vk #C++ #API ВКонтакте #.
NET #bot #core #vkapi
-
Toodoo Готовит Первый Виджет
19 Oct, 24 -
Оригинальный Подарок Своими Руками.
19 Oct, 24 -
Rust В 2019 Году И Далее: Пределы Роста
19 Oct, 24 -
Google Распространяет Книги В Формате Pdf
19 Oct, 24