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

#5 added read more button

This commit is contained in:
Fedor Katurov 2021-05-12 11:23:39 +07:00
parent dc42892444
commit 65d37795af
5 changed files with 41 additions and 11 deletions

View file

@ -37,6 +37,10 @@ export interface Storage {
messageId: number, messageId: number,
author: number author: number
): Promise<Like | undefined>; ): Promise<Like | undefined>;
createPost(eventId: number, text: string): Promise<Post | undefined>; createPost(
eventId: number,
text: string,
vkPostId: number
): Promise<Post | undefined>;
findPostByEvent(eventId: number): Promise<Post | undefined>; findPostByEvent(eventId: number): Promise<Post | undefined>;
} }

View file

@ -14,6 +14,8 @@ export class Post {
eventId!: number; eventId!: number;
@Column({ type: "text" }) @Column({ type: "text" })
text!: string; text!: string;
@Column()
vkPostId!: number;
@CreateDateColumn() @CreateDateColumn()
createdAt!: Date; createdAt!: Date;
@UpdateDateColumn() @UpdateDateColumn()

View file

@ -124,7 +124,7 @@ export class PostgresDB implements Storage {
return this.posts.findOne({ eventId }); return this.posts.findOne({ eventId });
}; };
createPost = async (eventId: number, text: string) => { createPost = async (eventId: number, text: string, vkPostId: number) => {
return this.posts.save({ eventId, text }); return this.posts.save({ eventId, text, vkPostId });
}; };
} }

View file

@ -16,11 +16,12 @@ import logger from "../../logger";
import Composer from "telegraf"; import Composer from "telegraf";
import CallbackQueryUpdate = Update.CallbackQueryUpdate; import CallbackQueryUpdate = Update.CallbackQueryUpdate;
type Button = "links" | "likes"; type Button = "links" | "likes" | "more";
type UrlPrefix = string; type UrlPrefix = string;
type ExtraGenerator = ( type ExtraGenerator = (
text: string, text: string,
eventId?: number eventId?: number,
postId?: number
) => Promise<InlineKeyboardButton[] | undefined>; ) => Promise<InlineKeyboardButton[] | undefined>;
interface Fields { interface Fields {
@ -79,7 +80,7 @@ export class PostNewHandler extends VkEventHandler<Fields, Values> {
const extras: ExtraReplyMessage = { const extras: ExtraReplyMessage = {
disable_web_page_preview: true, disable_web_page_preview: true,
reply_markup: await this.createKeyboard(text), reply_markup: await this.createKeyboard(text, undefined, context.wall.id),
}; };
let msg: Message; let msg: Message;
@ -112,7 +113,11 @@ export class PostNewHandler extends VkEventHandler<Fields, Values> {
context.wall.toJSON() context.wall.toJSON()
); );
await this.db.createPost(event!.id, context?.wall?.text || ""); await this.db.createPost(
event!.id,
context?.wall?.text || "",
context.wall.id
);
await next(); await next();
}; };
@ -137,7 +142,8 @@ export class PostNewHandler extends VkEventHandler<Fields, Values> {
*/ */
private createKeyboard = async ( private createKeyboard = async (
text: string, text: string,
eventId?: number eventId?: number,
postId?: number
): Promise<InlineKeyboardMarkup | undefined> => { ): Promise<InlineKeyboardMarkup | undefined> => {
const { buttons } = this.template.fields; const { buttons } = this.template.fields;
@ -146,7 +152,9 @@ export class PostNewHandler extends VkEventHandler<Fields, Values> {
} }
const rows = await Promise.all( const rows = await Promise.all(
buttons.map((button) => this.extrasGenerators[button](text, eventId)) buttons.map((button) =>
this.extrasGenerators[button](text, eventId, postId)
)
); );
const inline_keyboard = rows.filter( const inline_keyboard = rows.filter(
@ -187,6 +195,17 @@ export class PostNewHandler extends VkEventHandler<Fields, Values> {
.filter((el) => el) as InlineKeyboardButton[]; .filter((el) => el) as InlineKeyboardButton[];
}; };
/**
* Generates read more button
*/
private generateReadMore: ExtraGenerator = async (text, eventId, postId) => {
const label = this.template.fields.link_text;
if (!postId || !label) return [];
return [{ text: label, url: `${postId}` }];
};
/** /**
* Generates like button * Generates like button
*/ */
@ -228,6 +247,7 @@ export class PostNewHandler extends VkEventHandler<Fields, Values> {
private extrasGenerators: Record<Button, ExtraGenerator> = { private extrasGenerators: Record<Button, ExtraGenerator> = {
links: this.generateLinks, links: this.generateLinks,
likes: this.generateLikes, likes: this.generateLikes,
more: this.generateReadMore,
}; };
/** /**
@ -285,7 +305,11 @@ export class PostNewHandler extends VkEventHandler<Fields, Values> {
await this.createOrUpdateLike(author, event.tgMessageId, emo); await this.createOrUpdateLike(author, event.tgMessageId, emo);
const markup = await this.createKeyboard(post.text, event.id); const markup = await this.createKeyboard(
post.text,
event.id,
post.vkPostId
);
await ctx.telegram.editMessageReplyMarkup( await ctx.telegram.editMessageReplyMarkup(
ctx.chat?.id, ctx.chat?.id,

View file

@ -1,6 +1,6 @@
--- ---
image: true image: true
buttons: [likes,links] buttons: [likes,links,more]
link_text: Пост полностью link_text: Пост полностью
links: links:
https://map.vault48.org/: Посмотреть карту https://map.vault48.org/: Посмотреть карту