rename mute/unmute to ignore/unignore and add CHAT_ADMIN requirement for them and ban/unban commands

This commit is contained in:
2026-01-22 14:36:14 +03:00
parent e475de59b2
commit 1493ffbe01
8 changed files with 55 additions and 25 deletions
+2 -1
View File
@@ -1,7 +1,8 @@
export enum Requirement { export enum Requirement {
BOT_CREATOR, BOT_CREATOR,
BOT_ADMIN, BOT_ADMIN,
BOT_CHAT_ADMIN,
CHAT, CHAT,
CHAT_ADMIN,
BOT_CHAT_ADMIN,
REPLY REPLY
} }
+8 -4
View File
@@ -19,14 +19,18 @@ export class Requirements {
return this.requirements.includes(Requirement.BOT_ADMIN); return this.requirements.includes(Requirement.BOT_ADMIN);
} }
isRequiresBotChatAdmin(): boolean {
return this.requirements.includes(Requirement.BOT_CHAT_ADMIN);
}
isRequiresChat(): boolean { isRequiresChat(): boolean {
return this.requirements.includes(Requirement.CHAT); 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 { isRequiresReply(): boolean {
return this.requirements.includes(Requirement.REPLY); return this.requirements.includes(Requirement.REPLY);
} }
+2 -1
View File
@@ -11,10 +11,11 @@ export class Ban extends ChatCommand {
description = "ban user from chat"; description = "ban user from chat";
requirements = Requirements.Build( requirements = Requirements.Build(
Requirement.BOT_ADMIN,
Requirement.CHAT, Requirement.CHAT,
Requirement.CHAT_ADMIN,
Requirement.BOT_CHAT_ADMIN, Requirement.BOT_CHAT_ADMIN,
Requirement.REPLY, Requirement.REPLY,
Requirement.BOT_ADMIN
); );
async execute(msg: Message) { async execute(msg: Message) {
@@ -7,11 +7,17 @@ import {fullName, logError, oldSendMessage} from "../util/utils";
import {botUser} from "../index"; import {botUser} from "../index";
import {Environment} from "../common/environment"; import {Environment} from "../common/environment";
export class Mute extends ChatCommand { export class Ignore extends ChatCommand {
title = "/mute"; title = "/ignore";
description = "Bot will ignore user"; 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) { async execute(msg: Message) {
if (!msg.reply_to_message) return; if (!msg.reply_to_message) return;
+3 -2
View File
@@ -3,7 +3,7 @@ import {Requirements} from "../base/requirements";
import {Requirement} from "../base/requirement"; import {Requirement} from "../base/requirement";
import {Message} from "typescript-telegram-bot-api"; import {Message} from "typescript-telegram-bot-api";
import {bot, botUser} from "../index"; 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"; import {Environment} from "../common/environment";
export class Unban extends ChatCommand { export class Unban extends ChatCommand {
@@ -11,10 +11,11 @@ export class Unban extends ChatCommand {
description = "unban user from chat"; description = "unban user from chat";
requirements = Requirements.Build( requirements = Requirements.Build(
Requirement.BOT_ADMIN,
Requirement.CHAT, Requirement.CHAT,
Requirement.CHAT_ADMIN,
Requirement.BOT_CHAT_ADMIN, Requirement.BOT_CHAT_ADMIN,
Requirement.REPLY, Requirement.REPLY,
Requirement.BOT_ADMIN
); );
async execute(msg: Message) { async execute(msg: Message) {
@@ -7,10 +7,16 @@ import {Message} from "typescript-telegram-bot-api";
import {botUser} from "../index"; import {botUser} from "../index";
import {Environment} from "../common/environment"; import {Environment} from "../common/environment";
export class Unmute extends ChatCommand { export class Unignore extends ChatCommand {
title = "/unmute"; title = "/unignore";
description = "Bot will start responding to the user"; 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) { async execute(msg: Message) {
if (!msg.reply_to_message) return; if (!msg.reply_to_message) return;
+4 -4
View File
@@ -15,8 +15,8 @@ import {
} from "./util/utils"; } from "./util/utils";
import {Ae} from "./commands/ae"; import {Ae} from "./commands/ae";
import {Help} from "./commands/help"; import {Help} from "./commands/help";
import {Mute} from "./commands/mute"; import {Ignore} from "./commands/ignore";
import {Unmute} from "./commands/unmute"; import {Unignore} from "./commands/unignore";
import {Ping} from "./commands/ping"; import {Ping} from "./commands/ping";
import {RandomString} from "./commands/random-string"; import {RandomString} from "./commands/random-string";
import {SystemSpecs} from "./commands/system-specs"; import {SystemSpecs} from "./commands/system-specs";
@@ -127,8 +127,8 @@ export const chatCommands: ChatCommand[] = [
new Help(), new Help(),
new Test(), new Test(),
new Ae(), new Ae(),
new Mute(), new Ignore(),
new Unmute(), new Unignore(),
new Ping(), new Ping(),
new RandomInt(), new RandomInt(),
new RandomString(), new RandomString(),
+18 -7
View File
@@ -101,23 +101,34 @@ export async function checkRequirements(cmd: ChatCommand | null, msg: Message):
return false; 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") { if (reqs.isRequiresBotChatAdmin() && msg.chat.type !== "private") {
const member = await bot.getChatMember({chat_id: msg.chat.id, user_id: botUser.id}); const member = await bot.getChatMember({chat_id: msg.chat.id, user_id: botUser.id});
const isAdmin = member.status === "administrator" || member.status === "creator"; const isAdmin = member.status === "administrator" || member.status === "creator";
if (!isAdmin) { if (!isAdmin) {
console.log(`${cmd.title}: chatAdminId is bad`); console.log(`${cmd.title}: botChatAdminId is bad`);
await oldReplyToMessage(msg, "Бот не является администратором чата."); await oldReplyToMessage(msg, "Бот не является администратором чата.");
return false; 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) { if (reqs.isRequiresReply() && !msg.reply_to_message) {
console.log(`${cmd.title}: replyMessage is bad`); console.log(`${cmd.title}: replyMessage is bad`);
await oldReplyToMessage(msg, "Отсутствует ответ на сообщение."); await oldReplyToMessage(msg, "Отсутствует ответ на сообщение.");