import html import json import os from typing import Optional from telegram import Update from telegram.ext import CommandHandler from Mikobot import dispatcher from Mikobot.plugins.helper_funcs.chat_status import dev_plus, sudo_plus from Mikobot.plugins.helper_funcs.extraction import extract_user from Mikobot.plugins.log_channel import gloggable ELEVATED_USERS_FILE = os.path.join(os.getcwd(), "Mikobot/elevated_users.json") DISASTER_LEVELS = { "Dragon": "DRAGONS", "Demon": "DEMONS", "Wolf": "WOLVES", "Tiger": "TIGERS", } async def check_user_id(user_id: int) -> Optional[str]: if not user_id: return "That...is a chat! baka ka omae?" return None async def update_elevated_users(data): with open(ELEVATED_USERS_FILE, "w") as outfile: json.dump(data, outfile, indent=4) async def add_disaster_level(update: Update, level: str, context) -> str: message = update.effective_message user = update.effective_user chat = update.effective_chat bot, args = context.bot, context.args user_id = await extract_user(message, context, args) user_member = await bot.get_chat(user_id) rt = "" reply = await check_user_id(user_id) if reply: await message.reply_text(reply) return "" with open(ELEVATED_USERS_FILE, "r") as infile: data = json.load(infile) disaster_list = getattr(DISASTER_LEVELS, level) if user_id in disaster_list: await message.reply_text(f"This user is already a {level} Disaster.") return "" for disaster_level, disaster_users in DISASTER_LEVELS.items(): if user_id in disaster_users: rt += f"Requested HA to promote this {disaster_level} to {level}." data[disaster_users].remove(user_id) setattr(DISASTER_LEVELS, disaster_level, disaster_users) data[DISASTER_LEVELS[level]].append(user_id) setattr(DISASTER_LEVELS, level, user_id) await update_effective_message.reply_text( rt + f"\nSuccessfully set Disaster level of {user_member.first_name} to {level}!" ) log_message = ( f"#{level.upper()}\n" f"Admin: {mention_html(user.id, html.escape(user.first_name))}\n" f"User: {mention_html(user_member.id, html.escape(user_member.first_name))}" ) if chat.type != "private": log_message = f"{html.escape(chat.title)}:\n" + log_message await update.effective_message.reply_text(log_message) await update_elevated_users(data) @dev_plus @gloggable async def addsudo(update: Update, context) -> str: await add_disaster_level(update, "Dragon", context) @sudo_plus @gloggable async def addsupport(update: Update, context) -> str: await add_disaster_level(update, "Demon", context) @sudo_plus @gloggable async def addwhitelist(update: Update, context) -> str: await add_disaster_level(update, "Wolf", context) @sudo_plus @gloggable async def addtiger(update: Update, context) -> str: await add_disaster_level(update, "Tiger", context) # Other functions can be refactored similarly... SUDO_HANDLER = CommandHandler("addsudo", addsudo, block=False) SUPPORT_HANDLER = CommandHandler(("addsupport", "adddemon"), addsupport, block=False) TIGER_HANDLER = CommandHandler("addtiger", addtiger, block=False) WHITELIST_HANDLER = CommandHandler( ("addwhitelist", "addwolf"), addwhitelist, block=False ) dispatcher.add_handler(SUDO_HANDLER) dispatcher.add_handler(SUPPORT_HANDLER) dispatcher.add_handler(TIGER_HANDLER) dispatcher.add_handler(WHITELIST_HANDLER) __mod_name__ = "Devs" __handlers__ = [ SUDO_HANDLER, SUPPORT_HANDLER, TIGER_HANDLER, WHITELIST_HANDLER, ]