"""
_
__ _____ ___ ___ ___ __| | ___ _ __
\ \ / / __|/ _ \/ __/ _ \ / _` |/ _ \ '__|
\ V /\__ \ __/ (_| (_) | (_| | __/ |
\_/ |___/\___|\___\___/ \__,_|\___|_|
Copyleft 2022 t.me/vsecoder
This program is free software; you can redistribute it and/or modify
"""
# meta developer: @vsecoder_m
# meta pic: https://img.icons8.com/color/344/calculate.png
# meta banner: https://chojuu.vercel.app/api/banner?img=https://img.icons8.com/color/344/calculate.png&title=Calc&description=Module%20for%20inline%20calc
__version__ = (2, 0, 0)
import logging
from telethon import TelegramClient
from .. import loader # type: ignore
from ..inline.types import InlineCall # type: ignore
logger = logging.getLogger(__name__)
@loader.tds
class CalcMod(loader.Module):
"""Module for inline calc"""
strings = {
"name": "📟 Calc",
"answer": "🧮 Start calculating(press inline buttons):",
"calc": "🧮 {0}={1}",
"error": "❗️ Error!",
}
strings_ru = {
"answer": "🧮 Начните подсчитывать(нажимайте на инлайн кнопки):",
"error": "❗️ Ошибка!",
}
async def client_ready(self, client: TelegramClient, db):
self._db = db
self._client = client
async def return_keyboard(self, expression):
return [
# 1️⃣2️⃣3️⃣4️⃣5️⃣6️⃣7️⃣8️⃣9️⃣0️⃣➗✖️➕➖🧮
[
{"text": "1️⃣", "callback": self.calc, "args": ["1", expression]},
{"text": "2️⃣", "callback": self.calc, "args": ["2", expression]},
{"text": "3️⃣", "callback": self.calc, "args": ["3", expression]},
],
[
{"text": "4️⃣", "callback": self.calc, "args": ["4", expression]},
{"text": "5️⃣", "callback": self.calc, "args": ["5", expression]},
{"text": "6️⃣", "callback": self.calc, "args": ["6", expression]},
],
[
{"text": "7️⃣", "callback": self.calc, "args": ["7", expression]},
{"text": "8️⃣", "callback": self.calc, "args": ["8", expression]},
{"text": "9️⃣", "callback": self.calc, "args": ["9", expression]},
],
[
{"text": "➕", "callback": self.calc, "args": ["+", expression]},
{"text": "0️⃣", "callback": self.calc, "args": ["0", expression]},
{"text": "➖", "callback": self.calc, "args": ["-", expression]},
],
[
{"text": "➗", "callback": self.calc, "args": ["/", expression]},
{"text": "🔙", "callback": self.calc, "args": ["C", expression]},
{"text": "✖️", "callback": self.calc, "args": ["*", expression]},
],
]
async def calc(self, message: InlineCall, press, expression):
if expression == "0":
expression = ""
if press == "C":
expression = expression[:-1]
else:
expression = expression + press
a = ["+", "-", "*", "/", "=", "C"]
b = False
for i in a:
if press == i:
b = True
if b is False and expression != "" and expression != "0":
result = eval(expression)
else:
result = ""
text = self.strings["calc"].format(expression, result)
keyboard = await self.return_keyboard(expression)
await message.edit(text=text, reply_markup=keyboard)
@loader.unrestricted
@loader.ratelimit
async def calccmd(self, message):
"""
- init calc
Based on... my code)
"""
text = self.strings["answer"]
expression = "0"
keyboard = await self.return_keyboard(expression)
await message.delete()
await self.inline.form(
text=text,
message=message,
always_allow=[message.from_id],
reply_markup=keyboard,
)