- PVSM.RU - https://www.pvsm.ru -
Продолжая свои эксперименты с “умным” домом, ради забавы я решил добавить группу в Вк для управления некоторыми его характеристиками. Для данной статьи конкретизируем задачу: попробуем написать на языке с# простого бота, который будет отвечать от имени сообщества в вк, и рассмотрим, как быстро его запустить на arm32 (в моем случае на orange pi zero).

Итак, разложим по полочкам.

https://oauth.vk.com/authorize?client_id=<b>YOURAPPID</b>&group_ids=<b>YOURGROUPID</b>6&display=page&scope=messages,wall,manage&response_type=token&v=5.92
где YOURAPPID — id приложения, что мы нашли в предыдущем спойлере, а YOURGROUPID id — вашего сообщества.

https://oauth.vk.com/blank.html#expires_in=0&access_token_YOURGROUPID=YOURTOKEN
Где токен будет очень длинной комбинацией латинских букв и цифр
Переходим к основной части:
Запускаем любимую ide, создаем консольное приложение на net core
Добавляем VkNet [3]

Авторизуемся при помощи нашего токена:
var api = new VkApi();
api.Authorize(new ApiAuthParams(){AccessToken =MyAppToken });
И в бесконечном цикле будем получать обновления
while (true)
{
var s = api.Groups.GetLongPollServer(api.MyGroupId);
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 });
while (true)
{
var s = api.Groups.GetLongPollServer(MyGroupId);
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
});
}
}
}
}
}
Соберем полученный код для нашей платы
dotnet publish . -r linux-arm
И утянем на плату нужную директорию

Отправляемся по ssh и запускаем
chmod +x ConsoleApp1
./ConsoleApp1



Автор: Larymar
Источник [5]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/c-2/300305
Ссылки в тексте:
[1] Вот тут подробная документация: https://vk.com/dev
[2] сюда: https://vk.com/apps?act=manage
[3] VkNet: https://vknet.github.io/vk/
[4] здесь.: https://t.me/VkDotNet
[5] Источник: https://habr.com/post/431090/?utm_campaign=431090
Нажмите здесь для печати.