1
0
Fork 0
mirror of https://github.com/muerwre/vk-tg-bot.git synced 2025-04-24 22:46:41 +07:00

#6 added joiin-leave handler

This commit is contained in:
Fedor Katurov 2021-05-13 10:26:37 +07:00
parent 4f321373f9
commit 37b0bf13be
7 changed files with 86 additions and 3 deletions

View file

@ -17,6 +17,8 @@ vk:
templates:
message_new: templates/message_new.md
wall_post_new: templates/post_new.md
group_join: templates/group_join.md
group_leave: templates/group_leave.md
# groups:
# - id: 0
# name: 'Group name'

View file

@ -101,7 +101,7 @@ export class TelegramService {
* @param signal
*/
public stop = (signal: string) => {
if (!this.isWebhookEnabled) {
if (this.isWebhookEnabled) {
return;
}

View file

@ -0,0 +1,61 @@
import { VkEventHandler } from "./VkEventHandler";
import { GroupMemberContext } from "vk-io";
import { NextMiddleware } from "middleware-io";
import logger from "../../logger";
import { UsersUserFull } from "vk-io/lib/api/schemas/objects";
import { ConfigGroup } from "../types";
import { ExtraReplyMessage } from "telegraf/typings/telegram-types";
interface Fields {}
interface Values {
user: UsersUserFull;
group: ConfigGroup;
isJoined: boolean;
isLeave: boolean;
count: number;
}
export class JoinLeaveHandler extends VkEventHandler<Fields, Values> {
public execute = async (
context: GroupMemberContext,
next: NextMiddleware
) => {
const user = await this.getUserByID(String(context.userId));
const dir = context.isJoin ? "joined" : "left";
const count = await this.getMembersCount();
logger.debug(
`vk, group ${this.group.name}: ${user.first_name} ${user.last_name} ${dir} the group`
);
const parsed = this.template.theme({
user,
group: this.group,
isJoined: context.isJoin,
isLeave: context.isLeave,
count,
});
const extras: ExtraReplyMessage = {
parse_mode: "Markdown",
disable_web_page_preview: true,
};
await this.telegram.sendMessageToChan(this.channel.id, parsed, extras);
await next();
};
/**
* Returns current members count
* @private
*/
private getMembersCount = async () => {
const resp = await this.instance.api.groups.getMembers({
group_id: this.group.id.toString(),
});
return resp.count;
};
}

View file

@ -42,6 +42,7 @@ export class MessageNewHandler extends VkEventHandler<Fields, Values> {
const extras: ExtraReplyMessage = {
parse_mode: "Markdown",
disable_web_page_preview: true,
};
this.appendButtons(extras, user.id);

View file

@ -7,6 +7,7 @@ import { TelegramService } from "../../telegram";
import { Template } from "../../template";
import { PostNewHandler } from "./PostNewHandler";
import { Storage } from "../../db";
import { JoinLeaveHandler } from "./JoinLeaveHandler";
interface Handler {
new (
@ -22,8 +23,8 @@ interface Handler {
}
export const vkEventToHandler: Record<VkEvent, Handler> = {
[VkEvent.GroupJoin]: StubHandler,
[VkEvent.GroupLeave]: StubHandler,
[VkEvent.GroupJoin]: JoinLeaveHandler,
[VkEvent.GroupLeave]: JoinLeaveHandler,
[VkEvent.MessageNew]: MessageNewHandler,
[VkEvent.WallPostNew]: PostNewHandler,
};

9
templates/group_join.md Normal file
View file

@ -0,0 +1,9 @@
---
---
{{!--
use handlebars template here
available variables are: user, group, text, isJoined, isLeave, count
(see JoinLeaveHandler)
--}}
😃 [{{user.first_name}} {{user.last_name}}](https://vk.com/id{{user.id}}) {{#ifEq user.sex 1}}присоединилась{{else}}присоединился{{/ifEq}}
к группе. Участники: {{count}}.

9
templates/group_leave.md Normal file
View file

@ -0,0 +1,9 @@
---
---
{{!--
use handlebars template here
available variables are: user, group, text, isJoined, isLeave, count
(see JoinLeaveHandler)
--}}
😡 [{{user.first_name}} {{user.last_name}}](https://vk.com/id{{user.id}}) {{#ifEq user.sex 1}}свалила{{else}}свалил{{/ifEq}}
из группы. Участники: {{count}}.