refactor!: rewrite bot core; add AI (Ollama, Gemini), DB, new commands
This commit is contained in:
@@ -0,0 +1,42 @@
|
||||
/* eslint-disable no-unused-vars */
|
||||
import {CallbackQuery, InlineKeyboardButton} from "typescript-telegram-bot-api";
|
||||
import {Requirements} from "./requirements";
|
||||
import {bot} from "../index";
|
||||
|
||||
export abstract class CallbackCommand {
|
||||
|
||||
abstract text: string;
|
||||
abstract data: string;
|
||||
requirements?: Requirements = null;
|
||||
|
||||
abstract execute(query: CallbackQuery): Promise<void>;
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
afterExecute(query: CallbackQuery): Promise<void> {
|
||||
return Promise.resolve();
|
||||
}
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
protected getOptions(query: CallbackQuery): AnswerCallbackQueryOptions {
|
||||
return {callback_query_id: query.id};
|
||||
}
|
||||
|
||||
async answerCallbackQuery(query: CallbackQuery): Promise<void> {
|
||||
bot.answerCallbackQuery(this.getOptions(query)).catch(console.error);
|
||||
}
|
||||
|
||||
asButton(): InlineKeyboardButton {
|
||||
return {
|
||||
text: this.text,
|
||||
callback_data: this.data
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
export interface AnswerCallbackQueryOptions {
|
||||
callback_query_id: string;
|
||||
text?: string;
|
||||
show_alert?: boolean;
|
||||
url?: string;
|
||||
cache_time?: number;
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
import {Message} from "typescript-telegram-bot-api";
|
||||
import {Requirements} from "./requirements";
|
||||
|
||||
export abstract class ChatCommand {
|
||||
|
||||
abstract regexp: RegExp;
|
||||
requirements?: Requirements = null;
|
||||
title?: string;
|
||||
description?: string;
|
||||
|
||||
abstract execute(
|
||||
msg: Message,
|
||||
match?: RegExpExecArray
|
||||
): Promise<void>;
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
export abstract class Dao<I> {
|
||||
abstract getAll(): Promise<I[]>;
|
||||
|
||||
abstract getById(params: never): Promise<I | null>
|
||||
|
||||
abstract getByIds(params: never): Promise<I[]>
|
||||
|
||||
abstract insert(items: never[]): Promise<true>
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
export enum Requirement {
|
||||
BOT_CREATOR,
|
||||
BOT_ADMIN,
|
||||
BOT_CHAT_ADMIN,
|
||||
CHAT,
|
||||
REPLY
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
import {Requirement} from "./requirement";
|
||||
|
||||
export class Requirements {
|
||||
requirements: Requirement[] = [];
|
||||
|
||||
private constructor(requirements?: Requirement[]) {
|
||||
this.requirements = requirements;
|
||||
}
|
||||
|
||||
static Build(...requirements: Requirement[]): Requirements {
|
||||
return new Requirements(requirements);
|
||||
}
|
||||
|
||||
isRequiresBotCreator(): boolean {
|
||||
return this.requirements.includes(Requirement.BOT_CREATOR);
|
||||
}
|
||||
|
||||
isRequiresBotAdmin(): boolean {
|
||||
return this.requirements.includes(Requirement.BOT_ADMIN);
|
||||
}
|
||||
|
||||
isRequiresBotChatAdmin(): boolean {
|
||||
return this.requirements.includes(Requirement.BOT_CHAT_ADMIN);
|
||||
}
|
||||
|
||||
isRequiresChat(): boolean {
|
||||
return this.requirements.includes(Requirement.CHAT);
|
||||
}
|
||||
|
||||
isRequiresReply(): boolean {
|
||||
return this.requirements.includes(Requirement.REPLY);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user