1
0
Fork 0
mirror of https://github.com/muerwre/vk-tg-bot.git synced 2025-04-24 22:46:41 +07:00
vk-tg-bot/src/service/vk/handlers/JoinLeaveHandler.ts
2022-05-26 10:11:25 +07:00

72 lines
1.8 KiB
TypeScript

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 {
silent?: boolean
}
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();
const { first_name = "[unknown]", last_name = "[unknown]" } = user || {};
logger.debug(
`vk, group ${this.group.name}: ${first_name} ${last_name} ${dir} the group`
);
const parsed = this.template.theme(
{
user,
group: this.group,
isJoined: context.isJoin,
isLeave: context.isLeave,
count,
},
!!this.channel.markdown
);
const extras: ExtraReplyMessage = {
disable_web_page_preview: true,
disable_notification: !!this.template.fields.silent,
};
await this.telegram.sendMessageToChan(
this.channel.id,
parsed,
!!this.channel.markdown,
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;
};
}