Spaces:
Running
Running
| from pyrogram import filters | |
| from pyrogram.errors import MessageNotModified, QueryIdInvalid, UserIsBlocked | |
| from pyrogram.types import CallbackQuery, Message | |
| from Powers import HELP_COMMANDS, LOGGER | |
| from Powers.bot_class import Gojo | |
| from Powers.tr_engine import tlang | |
| from Powers.utils.custom_filters import command | |
| from Powers.utils.kbhelpers import ikb | |
| from Powers.utils.start_utils import ( | |
| gen_cmds_kb, | |
| gen_start_kb, | |
| get_help_msg, | |
| get_private_note, | |
| get_private_rules, | |
| ) | |
| from Powers.vars import Config | |
| async def donate(_, m: Message): | |
| LOGGER.info(f"{m.from_user.id} fetched donation text in {m.chat.id}") | |
| await m.reply_text(tlang(m, "general.donate_owner")) | |
| return | |
| async def close_admin_callback(_, q: CallbackQuery): | |
| user_id = q.from_user.id | |
| user_status = (await q.message.chat.get_member(user_id)).status | |
| if user_status not in {"creator", "administrator"}: | |
| await q.answer( | |
| "You're not even an admin, don't try this explosive shit!", | |
| show_alert=True, | |
| ) | |
| return | |
| if user_status != "creator": | |
| await q.answer( | |
| "You're just an admin, not owner\nStay in your limits!", | |
| show_alert=True, | |
| ) | |
| return | |
| await q.message.edit_text("Closed!") | |
| await q.answer("Closed menu!", show_alert=True) | |
| return | |
| async def start(c: Gojo, m: Message): | |
| if m.chat.type == "private": | |
| if len(m.text.split()) > 1: | |
| help_option = (m.text.split(None, 1)[1]).lower() | |
| if help_option.startswith("note") and ( | |
| help_option not in ("note", "notes") | |
| ): | |
| await get_private_note(c, m, help_option) | |
| return | |
| if help_option.startswith("rules"): | |
| LOGGER.info(f"{m.from_user.id} fetched privaterules in {m.chat.id}") | |
| await get_private_rules(c, m, help_option) | |
| return | |
| help_msg, help_kb = await get_help_msg(m, help_option) | |
| if not help_msg: | |
| return | |
| await m.reply_text( | |
| help_msg, | |
| parse_mode="markdown", | |
| reply_markup=ikb(help_kb), | |
| quote=True, | |
| disable_web_page_preview=True, | |
| ) | |
| return | |
| try: | |
| await m.reply_text( | |
| (tlang(m, "start.private")), | |
| reply_markup=(await gen_start_kb(m)), | |
| quote=True, | |
| disable_web_page_preview=True, | |
| ) | |
| except UserIsBlocked: | |
| LOGGER.warning(f"Bot blocked by {m.from_user.id}") | |
| else: | |
| await m.reply_text( | |
| (tlang(m, "start.group")), | |
| quote=True, | |
| ) | |
| return | |
| async def start_back(_, q: CallbackQuery): | |
| try: | |
| await q.message.edit_text( | |
| (tlang(q, "start.private")), | |
| reply_markup=(await gen_start_kb(q.message)), | |
| disable_web_page_preview=True, | |
| ) | |
| except MessageNotModified: | |
| pass | |
| await q.answer() | |
| return | |
| async def commands_menu(_, q: CallbackQuery): | |
| keyboard = ikb( | |
| [ | |
| *(await gen_cmds_kb(q)), | |
| [(f"« {(tlang(q, 'general.back_btn'))}", "start_back")], | |
| ], | |
| ) | |
| try: | |
| await q.message.edit_text( | |
| (tlang(q, "general.commands_available")), | |
| reply_markup=keyboard, | |
| ) | |
| except MessageNotModified: | |
| pass | |
| except QueryIdInvalid: | |
| await q.message.reply_text( | |
| (tlang(q, "general.commands_available")), | |
| reply_markup=keyboard, | |
| ) | |
| await q.answer() | |
| return | |
| async def help_menu(_, m: Message): | |
| if len(m.text.split()) >= 2: | |
| help_option = (m.text.split(None, 1)[1]).lower() | |
| help_msg, help_kb = await get_help_msg(m, help_option) | |
| if not help_msg: | |
| LOGGER.error(f"No help_msg found for help_option - {help_option}!!") | |
| return | |
| LOGGER.info( | |
| f"{m.from_user.id} fetched help for '{help_option}' text in {m.chat.id}", | |
| ) | |
| if m.chat.type == "private": | |
| await m.reply_text( | |
| help_msg, | |
| parse_mode="markdown", | |
| reply_markup=ikb(help_kb), | |
| quote=True, | |
| disable_web_page_preview=True, | |
| ) | |
| else: | |
| await m.reply_text( | |
| (tlang(m, "start.public_help").format(help_option=help_option)), | |
| reply_markup=ikb( | |
| [ | |
| [ | |
| ( | |
| "Help", | |
| f"t.me/{Config.BOT_USERNAME}?start={help_option}", | |
| "url", | |
| ), | |
| ], | |
| ], | |
| ), | |
| ) | |
| else: | |
| if m.chat.type == "private": | |
| keyboard = ikb( | |
| [ | |
| *(await gen_cmds_kb(m)), | |
| [(f"« {(tlang(m, 'general.back_btn'))}", "start_back")], | |
| ], | |
| ) | |
| msg = tlang(m, "general.commands_available") | |
| else: | |
| keyboard = ikb( | |
| [[("Help", f"t.me/{Config.BOT_USERNAME}?start=help", "url")]], | |
| ) | |
| msg = tlang(m, "start.pm_for_help") | |
| await m.reply_text( | |
| msg, | |
| reply_markup=keyboard, | |
| ) | |
| return | |
| async def get_module_info(_, q: CallbackQuery): | |
| module = q.data.split(".", 1)[1] | |
| help_msg = f"**{(tlang(q, str(module)))}:**\n\n" + tlang( | |
| q, | |
| HELP_COMMANDS[module]["help_msg"], | |
| ) | |
| help_kb = HELP_COMMANDS[module]["buttons"] + [ | |
| [("« " + (tlang(q, "general.back_btn")), "commands")], | |
| ] | |
| await q.message.edit_text( | |
| help_msg, | |
| parse_mode="markdown", | |
| reply_markup=ikb(help_kb), | |
| ) | |
| await q.answer() | |
| return | |