mirror of
https://github.com/muerwre/vk-tg-bot.git
synced 2025-04-25 06:56:40 +07:00
#5 added read more button
This commit is contained in:
parent
dc42892444
commit
65d37795af
5 changed files with 41 additions and 11 deletions
|
@ -37,6 +37,10 @@ export interface Storage {
|
|||
messageId: number,
|
||||
author: number
|
||||
): 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>;
|
||||
}
|
||||
|
|
|
@ -14,6 +14,8 @@ export class Post {
|
|||
eventId!: number;
|
||||
@Column({ type: "text" })
|
||||
text!: string;
|
||||
@Column()
|
||||
vkPostId!: number;
|
||||
@CreateDateColumn()
|
||||
createdAt!: Date;
|
||||
@UpdateDateColumn()
|
||||
|
|
|
@ -124,7 +124,7 @@ export class PostgresDB implements Storage {
|
|||
return this.posts.findOne({ eventId });
|
||||
};
|
||||
|
||||
createPost = async (eventId: number, text: string) => {
|
||||
return this.posts.save({ eventId, text });
|
||||
createPost = async (eventId: number, text: string, vkPostId: number) => {
|
||||
return this.posts.save({ eventId, text, vkPostId });
|
||||
};
|
||||
}
|
||||
|
|
|
@ -16,11 +16,12 @@ import logger from "../../logger";
|
|||
import Composer from "telegraf";
|
||||
import CallbackQueryUpdate = Update.CallbackQueryUpdate;
|
||||
|
||||
type Button = "links" | "likes";
|
||||
type Button = "links" | "likes" | "more";
|
||||
type UrlPrefix = string;
|
||||
type ExtraGenerator = (
|
||||
text: string,
|
||||
eventId?: number
|
||||
eventId?: number,
|
||||
postId?: number
|
||||
) => Promise<InlineKeyboardButton[] | undefined>;
|
||||
|
||||
interface Fields {
|
||||
|
@ -79,7 +80,7 @@ export class PostNewHandler extends VkEventHandler<Fields, Values> {
|
|||
|
||||
const extras: ExtraReplyMessage = {
|
||||
disable_web_page_preview: true,
|
||||
reply_markup: await this.createKeyboard(text),
|
||||
reply_markup: await this.createKeyboard(text, undefined, context.wall.id),
|
||||
};
|
||||
|
||||
let msg: Message;
|
||||
|
@ -112,7 +113,11 @@ export class PostNewHandler extends VkEventHandler<Fields, Values> {
|
|||
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();
|
||||
};
|
||||
|
@ -137,7 +142,8 @@ export class PostNewHandler extends VkEventHandler<Fields, Values> {
|
|||
*/
|
||||
private createKeyboard = async (
|
||||
text: string,
|
||||
eventId?: number
|
||||
eventId?: number,
|
||||
postId?: number
|
||||
): Promise<InlineKeyboardMarkup | undefined> => {
|
||||
const { buttons } = this.template.fields;
|
||||
|
||||
|
@ -146,7 +152,9 @@ export class PostNewHandler extends VkEventHandler<Fields, Values> {
|
|||
}
|
||||
|
||||
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(
|
||||
|
@ -187,6 +195,17 @@ export class PostNewHandler extends VkEventHandler<Fields, Values> {
|
|||
.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
|
||||
*/
|
||||
|
@ -228,6 +247,7 @@ export class PostNewHandler extends VkEventHandler<Fields, Values> {
|
|||
private extrasGenerators: Record<Button, ExtraGenerator> = {
|
||||
links: this.generateLinks,
|
||||
likes: this.generateLikes,
|
||||
more: this.generateReadMore,
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -285,7 +305,11 @@ export class PostNewHandler extends VkEventHandler<Fields, Values> {
|
|||
|
||||
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(
|
||||
ctx.chat?.id,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue