diff --git a/src/base/requirement.ts b/src/base/requirement.ts index 19d4f04..5499bf1 100644 --- a/src/base/requirement.ts +++ b/src/base/requirement.ts @@ -1,7 +1,8 @@ export enum Requirement { BOT_CREATOR, BOT_ADMIN, - BOT_CHAT_ADMIN, CHAT, + CHAT_ADMIN, + BOT_CHAT_ADMIN, REPLY } \ No newline at end of file diff --git a/src/base/requirements.ts b/src/base/requirements.ts index 8fdcfae..26342d8 100644 --- a/src/base/requirements.ts +++ b/src/base/requirements.ts @@ -19,14 +19,18 @@ export class Requirements { 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); } + isRequiresChatAdmin(): boolean { + return this.requirements.includes(Requirement.CHAT_ADMIN); + } + + isRequiresBotChatAdmin(): boolean { + return this.requirements.includes(Requirement.BOT_CHAT_ADMIN); + } + isRequiresReply(): boolean { return this.requirements.includes(Requirement.REPLY); } diff --git a/src/commands/ban.ts b/src/commands/ban.ts index db4989e..88b6ba1 100644 --- a/src/commands/ban.ts +++ b/src/commands/ban.ts @@ -11,10 +11,11 @@ export class Ban extends ChatCommand { description = "ban user from chat"; requirements = Requirements.Build( + Requirement.BOT_ADMIN, Requirement.CHAT, + Requirement.CHAT_ADMIN, Requirement.BOT_CHAT_ADMIN, Requirement.REPLY, - Requirement.BOT_ADMIN ); async execute(msg: Message) { diff --git a/src/commands/mute.ts b/src/commands/ignore.ts similarity index 82% rename from src/commands/mute.ts rename to src/commands/ignore.ts index f42d0a9..7eee354 100644 --- a/src/commands/mute.ts +++ b/src/commands/ignore.ts @@ -7,11 +7,17 @@ import {fullName, logError, oldSendMessage} from "../util/utils"; import {botUser} from "../index"; import {Environment} from "../common/environment"; -export class Mute extends ChatCommand { - title = "/mute"; +export class Ignore extends ChatCommand { + title = "/ignore"; description = "Bot will ignore user"; - requirements = Requirements.Build(Requirement.BOT_ADMIN, Requirement.REPLY); + requirements = Requirements.Build( + Requirement.BOT_ADMIN, + Requirement.CHAT, + Requirement.CHAT_ADMIN, + Requirement.BOT_CHAT_ADMIN, + Requirement.REPLY, + ); async execute(msg: Message) { if (!msg.reply_to_message) return; diff --git a/src/commands/unban.ts b/src/commands/unban.ts index 570c0a0..4a258a3 100644 --- a/src/commands/unban.ts +++ b/src/commands/unban.ts @@ -3,7 +3,7 @@ import {Requirements} from "../base/requirements"; import {Requirement} from "../base/requirement"; import {Message} from "typescript-telegram-bot-api"; import {bot, botUser} from "../index"; -import {fullName, logError, oldSendMessage, oldReplyToMessage} from "../util/utils"; +import {fullName, logError, oldReplyToMessage, oldSendMessage} from "../util/utils"; import {Environment} from "../common/environment"; export class Unban extends ChatCommand { @@ -11,10 +11,11 @@ export class Unban extends ChatCommand { description = "unban user from chat"; requirements = Requirements.Build( + Requirement.BOT_ADMIN, Requirement.CHAT, + Requirement.CHAT_ADMIN, Requirement.BOT_CHAT_ADMIN, Requirement.REPLY, - Requirement.BOT_ADMIN ); async execute(msg: Message) { diff --git a/src/commands/unmute.ts b/src/commands/unignore.ts similarity index 83% rename from src/commands/unmute.ts rename to src/commands/unignore.ts index 6b20f2e..caeb7e6 100644 --- a/src/commands/unmute.ts +++ b/src/commands/unignore.ts @@ -7,10 +7,16 @@ import {Message} from "typescript-telegram-bot-api"; import {botUser} from "../index"; import {Environment} from "../common/environment"; -export class Unmute extends ChatCommand { - title = "/unmute"; +export class Unignore extends ChatCommand { + title = "/unignore"; description = "Bot will start responding to the user"; - requirements = Requirements.Build(Requirement.BOT_ADMIN, Requirement.CHAT, Requirement.REPLY); + requirements = Requirements.Build( + Requirement.BOT_ADMIN, + Requirement.CHAT, + Requirement.CHAT_ADMIN, + Requirement.BOT_CHAT_ADMIN, + Requirement.REPLY, + ); async execute(msg: Message) { if (!msg.reply_to_message) return; diff --git a/src/index.ts b/src/index.ts index c0f61ab..bda5f21 100644 --- a/src/index.ts +++ b/src/index.ts @@ -15,8 +15,8 @@ import { } from "./util/utils"; import {Ae} from "./commands/ae"; import {Help} from "./commands/help"; -import {Mute} from "./commands/mute"; -import {Unmute} from "./commands/unmute"; +import {Ignore} from "./commands/ignore"; +import {Unignore} from "./commands/unignore"; import {Ping} from "./commands/ping"; import {RandomString} from "./commands/random-string"; import {SystemSpecs} from "./commands/system-specs"; @@ -127,8 +127,8 @@ export const chatCommands: ChatCommand[] = [ new Help(), new Test(), new Ae(), - new Mute(), - new Unmute(), + new Ignore(), + new Unignore(), new Ping(), new RandomInt(), new RandomString(), diff --git a/src/util/utils.ts b/src/util/utils.ts index 98b09cb..444e766 100644 --- a/src/util/utils.ts +++ b/src/util/utils.ts @@ -101,23 +101,34 @@ export async function checkRequirements(cmd: ChatCommand | null, msg: Message): return false; } + if (reqs.isRequiresChat() && msg.chat.type === "private") { + console.log(`${cmd.title}: chatId is bad`); + await oldReplyToMessage(msg, "Тут Вам не чат."); + return false; + } + + if (reqs.isRequiresChatAdmin()) { + const member = await bot.getChatMember({chat_id: msg.chat.id, user_id: msg.from.id}); + const isAdmin = member.status === "administrator" || member.status === "creator"; + + if (!isAdmin) { + console.log(`${cmd.title}: chatAdminId is bad`); + await oldReplyToMessage(msg, "Вы не являетесь администратором чата."); + return false; + } + } + if (reqs.isRequiresBotChatAdmin() && msg.chat.type !== "private") { const member = await bot.getChatMember({chat_id: msg.chat.id, user_id: botUser.id}); const isAdmin = member.status === "administrator" || member.status === "creator"; if (!isAdmin) { - console.log(`${cmd.title}: chatAdminId is bad`); + console.log(`${cmd.title}: botChatAdminId is bad`); await oldReplyToMessage(msg, "Бот не является администратором чата."); return false; } } - if (reqs.isRequiresChat() && msg.chat.type === "private") { - console.log(`${cmd.title}: chatId is bad`); - await oldReplyToMessage(msg, "Тут Вам не чат."); - return false; - } - if (reqs.isRequiresReply() && !msg.reply_to_message) { console.log(`${cmd.title}: replyMessage is bad`); await oldReplyToMessage(msg, "Отсутствует ответ на сообщение.");