import base64 import datetime import math import os import time from pyrogram.types import Message from Hellbot.core import Limits from Hellbot.functions.images import create_calendar from . import Config, HelpMenu, Symbols, hellbot, on_message math_cmds = ["sin", "cos", "tan", "square", "cube", "sqroot", "factorial", "power"] @on_message("base64enc", allow_stan=True) async def base64enc(_, message: Message): if len(message.command) < 2 and not message.reply_to_message: return await hellbot.delete(message, "Give me something to encode.") if len(message.command) >= 2: text = await hellbot.input(message) else: text = message.reply_to_message.text or message.reply_to_message.caption if not text: return await hellbot.delete(message, "Give me something to encode.") hell = await hellbot.edit(message, "Encoding...") encoded = base64.b64encode(text.encode()).decode() await hell.edit(f"**π–‘π–Ίπ—Œπ–Ύ64 π–€π—‡π–Όπ—ˆπ–½π–Ύπ–½:**\n\n`{encoded}`") @on_message("base64dec", allow_stan=True) async def base64dec(_, message: Message): if len(message.command) < 2 and not message.reply_to_message: return await hellbot.delete(message, "Give me something to decode.") if len(message.command) >= 2: text = await hellbot.input(message) else: text = message.reply_to_message.text or message.reply_to_message.caption if not text: return await hellbot.delete(message, "Give me something to decode.") hell = await hellbot.edit(message, "Decoding...") decoded = base64.b64decode(text.encode()).decode() await hell.edit(f"**π–‘π–Ίπ—Œπ–Ύ64 π–£π–Ύπ–Όπ—ˆπ–½π–Ύπ–½:**\n\n`{decoded}`") @on_message(["calculate", "calc"], allow_stan=True) async def calculator(_, message: Message): if len(message.command) < 2: return await hellbot.delete(message, "Give me something to calculate.") query = await hellbot.input(message) hell = await hellbot.edit(message, "Calculating...") try: result = eval(query) except Exception: result = "Invalid Expression" await hell.edit( f"**{Symbols.bullet} π–€π—‘π—‰π—‹π–Ύπ—Œπ—Œπ—‚π—ˆπ—‡:** `{query}`\n\n**{Symbols.bullet} π–±π–Ύπ—Œπ—Žπ—…π—,,:**\n`{result}`" ) @on_message("math", allow_stan=True) async def maths(_, message: Message): if len(message.command) < 3: return await hellbot.delete(message, "Give me something to calculate.") cmd = message.command[1].lower() query = message.command[2].lower() if cmd not in math_cmds: return await hellbot.delete( message, f"**Unknown command!** \n\nAvailable Commands are: \n`{'`, `'.join(math_cmds)}`", 20, ) hell = await hellbot.edit(message, "Calculating...") if cmd == "sin": result = math.sin(int(query)) elif cmd == "cos": result = math.cos(int(query)) elif cmd == "tan": result = math.tan(int(query)) elif cmd == "square": result = int(query) * int(query) elif cmd == "cube": result = int(query) * int(query) * int(query) elif cmd == "sqroot": result = math.sqrt(int(query)) elif cmd == "factorial": result = math.factorial(int(query)) elif cmd == "power": result = math.pow(int(query), 2) await hell.edit( f"**{Symbols.bullet} π–€π—‘π—‰π—‹π–Ύπ—Œπ—Œπ—‚π—ˆπ—‡:** `{cmd} {query}`\n\n**{Symbols.bullet} π–±π–Ύπ—Œπ—Žπ—…π—,,:**\n`{result}`" ) @on_message("unpack", allow_stan=True) async def unpack(_, message: Message): if not message.reply_to_message or not message.reply_to_message.document: return await hellbot.delete(message, "Reply to a file to unpack.") hell = await hellbot.edit(message, "Unpacking...") filename = await message.reply_to_message.download(Config.TEMP_DIR) with open(filename, "rb") as f: data = f.read().decode() try: await hell.edit( data[: Limits.MessageLength], disable_web_page_preview=True, ) except Exception as e: await hellbot.error(hell, f"`{e}`") os.remove(filename) @on_message("pack", allow_stan=True) async def pack(_, message: Message): if not message.reply_to_message or not message.reply_to_message.text: return await hellbot.delete(message, "Reply to a text to pack.") filename = f"pack_{int(time.time())}.txt" if len(message.command) >= 2: filename = message.command[1] with open(filename, "w") as f: f.write(message.reply_to_message.text) await message.reply_document( filename, caption=f"**πŸ’« Packed into {filename}**", ) os.remove(filename) @on_message("calendar", allow_stan=True) async def getcalendar(_, message: Message): if len(message.command) < 2: year = datetime.datetime.now().year month = datetime.datetime.now().month else: query = await hellbot.input(message) if "/" in query: month, year = query.split("/") month = int(month) year = int(year) else: return await hellbot.delete( message, "Invalid query!\n\nExample: `calendar 1/2021`", ) hell = await hellbot.edit(message, "Generating calendar...") image = await create_calendar(year, month) await hell.reply_photo(image, caption=f"**πŸ“… Calendar for {month}/{year}**") await hell.delete() os.remove(image) HelpMenu("tools").add( "base64enc", " or ", "Encode the text to a base64 string.", "base64enc Hello, World!", ).add( "base64dec", " or ", "Decode the base64 string to text.", "base64dec SGVsbG8sIFdvcmxkIQ==", ).add( "calculate", "", "Calculate the expression.", "calculate 69*100", "You can also use 'calc' as an alias.", ).add( "math", "", "Perform some basic math operations.", "math sin 90", f"Available Commands are: \n`{'`, `'.join(math_cmds)}`", ).add( "unpack", "", "Unpack the file and send the text content.", "unpack", ).add( "pack", " ", "Pack the text into a file.", "pack script.js", ).add( "calendar", "", "Generate a calendar image.", "calendar 1/2024", "If no query is given, current month's calendar will be generated.", ).info( "Basic Tools" ).done()