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:
parent
dc42892444
commit
65d37795af
5 changed files with 41 additions and 11 deletions
|
@ -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>;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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()
|
||||||
|
|
|
@ -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 });
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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/: Посмотреть карту
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue