Continuing my experiments with a “smart” home, for fun, I decided to add a group to VK to control some of its characteristics. For this article, we specify the task: we will try to write in the language of a simple bot, which will respond on behalf of the community in VK, and consider how quickly it can be run on arm32 (in my case, orange pi zero).
Thought about the warmthThere are many other options (for example, runtime), this is one of them
So, decompose on shelves.
Create an application in VCHere is the detailed documentation.
- To create a bot go here
Click "create application" and select "Standalone Application". - Now we are moving to the management and in the Application Id tab we remember its Id. It is useful to us further.

We get a token for working with groups- We send the request by simply inserting into the browser string:
https://oauth.vk.com/authorize?client_id=YOURAPPID&group_ids=YOURGROUPID6&display=page&scope=messages,wall,manage&response_type=token&v=5.92
where YOURAPPID is the application id that we found in the previous spoiler, and YOURGROUPID id is your community.
- We give access to the application

- And we get this answer
https://oauth.vk.com/blank.html#expires_in=0&access_token_YOURGROUPID=YOURTOKEN
Where the token will be a very long combination of Latin letters and numbers
Easier we get the token- Go to the community management


Set up a community to work with long poll- Go to the management tab of our community.
- Api Usage and LongPoll Api

- Event types (events), we mark the necessary ones in them, for tests I would note everything.
Go to the main part:
')
We start favorite ide, we create the console application on net core
Add
VkNet
spoilerUnfortunately on the wiki, the documentation is a bit outdated. One of the reasons for creating this guide.
But there is great support
here.
Log in using our token:
var api = new VkApi(); api.Authorize(new ApiAuthParams(){AccessToken =MyAppToken });
And in an endless loop we will receive updates.
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}); }
Check if something has come to us
if(poll?.Updates== null) continue;
For all received data, we will find out if any of this is a message, if so, then we will print its contents.
foreach (var a in poll.Updates) { if (a.Type == GroupUpdateType.MessageNew) { Console.WriteLine(a.Message.Body); } }
And answer the user with the same text
api.Messages.Send(new MessagesSendParams() { UserId = a.Message.UserId, Message = a.Message.Body });
Received code 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 }); } } } } }
Collect the resulting code for our board
dotnet publish . -r linux-arm
And we drag the directory to the board
Go through ssh and run
chmod +x ConsoleApp1 ./ConsoleApp1
ResultWe send the message
We receive the message in the console
We get the answer
Dialogue