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

#4 storing events in db

This commit is contained in:
Fedor Katurov 2021-05-05 12:14:31 +07:00
parent a78fc0bfe3
commit a6e6209770
5 changed files with 38 additions and 12 deletions

View file

@ -15,7 +15,8 @@ export interface Storage {
eventId: number,
groupId: number,
channel: string,
tgMessageId: number
tgMessageId: number,
text: Record<any, any>
): Promise<Event>;
createOrUpdateLike(like: Partial<Like>): Promise<Like>;

View file

@ -25,6 +25,6 @@ export class Event {
createdAt: Date;
@UpdateDateColumn()
updatedAt: Date;
@Column({ type: "text", default: "", nullable: false })
text: string;
@Column("simple-json", { default: {}, nullable: false })
text: Record<any, any>;
}

View file

@ -47,7 +47,8 @@ export class PostgresDB implements Storage {
eventId: number,
groupId: number,
channel: string,
tgMessageId: number
tgMessageId: number,
text: Record<any, any>
) => {
const event = this.events.create({
type,
@ -55,6 +56,7 @@ export class PostgresDB implements Storage {
groupId,
channel,
tgMessageId,
text,
});
return await this.events.save(event);

View file

@ -13,7 +13,10 @@ import CallbackQueryUpdate = Update.CallbackQueryUpdate;
type Button = "links" | "likes";
type UrlPrefix = string;
type ExtraGenerator = (text: string) => InlineKeyboardButton[];
type ExtraGenerator = (
text: string,
messageId?: number
) => InlineKeyboardButton[];
interface Fields {
image?: boolean;
@ -52,7 +55,7 @@ export class PostNewHandler extends VkEventHandler<Fields, Values> {
return;
}
const exist = await this.getEventFromDB(id);
const exist = await this.getEvent(id);
if (exist) {
logger.warn(
`received duplicate entry for ${this.group.name}, ${this.type}, ${id}`
@ -85,7 +88,7 @@ export class PostNewHandler extends VkEventHandler<Fields, Values> {
extras
);
await this.storeInDB(id, msg.message_id);
await this.createEvent(id, msg.message_id, context.wall.toJSON());
await next();
};
@ -100,14 +103,18 @@ export class PostNewHandler extends VkEventHandler<Fields, Values> {
/**
* Creates extras
*/
private appendExtras = (extras: ExtraReplyMessage, text: string) => {
private appendExtras = (
extras: ExtraReplyMessage,
text: string,
messageId?: number
) => {
const { buttons } = this.template.fields;
if (!buttons?.length) {
return;
}
const keyboard = buttons
.map((button) => this.extrasGenerators[button](text))
.map((button) => this.extrasGenerators[button](text, messageId))
.filter((el) => el && el.length);
if (!keyboard.length) {
@ -185,11 +192,13 @@ export class PostNewHandler extends VkEventHandler<Fields, Values> {
onLikeAction = async (ctx: LikeCtx, next) => {
const id = ctx.update.callback_query.message.message_id;
const [_, channel, emo] = ctx.match;
const exist = await this.getEvent(id);
if (
!channel ||
!emo ||
!id ||
!exist ||
channel != this.channel ||
!this.likes.includes(emo)
) {
@ -197,6 +206,15 @@ export class PostNewHandler extends VkEventHandler<Fields, Values> {
return;
}
// const extras: ExtraReplyMessage = {};
// this.appendExtras(extras, exist.text);
// await ctx.telegram.editMessageReplyMarkup(
// ctx.chat.id,
// id,
// ctx.inlineMessageId,
// extras.reply_markup.inline_keyboard
// );
logger.warn(
`someone reacted with ${emo} to message ${id} on channel ${channel}`
);

View file

@ -51,7 +51,7 @@ export class VkEventHandler<
/**
* Checks for duplicates
*/
getEventFromDB = async (id?: number): Promise<Event | undefined> => {
getEvent = async (id?: number): Promise<Event | undefined> => {
if (!id) {
return undefined;
}
@ -62,13 +62,18 @@ export class VkEventHandler<
/**
* Creates event record in DB
*/
storeInDB = async (id: number, tgMessageId: number) => {
createEvent = async (
id: number,
tgMessageId: number,
text: Record<any, any>
) => {
return await this.db.createEvent(
this.type,
id,
this.group.id,
this.channel,
tgMessageId
tgMessageId,
text
);
};
}