File size: 3,704 Bytes
056f521 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 |
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"<b>Admin:</b> {mention_html(user.id, html.escape(user.first_name))}\n"
f"<b>User:</b> {mention_html(user_member.id, html.escape(user_member.first_name))}"
)
if chat.type != "private":
log_message = f"<b>{html.escape(chat.title)}:</b>\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,
]
|