mirror of
https://github.com/MuRuLOSE/limoka.git
synced 2026-06-18 07:04:19 +02:00
Commited backup
This commit is contained in:
287
AmoreForever/amoremods/aeconv.py
Normal file
287
AmoreForever/amoremods/aeconv.py
Normal file
@@ -0,0 +1,287 @@
|
||||
# █ █ █ █▄▀ ▄▀█ █▀▄▀█ █▀█ █▀█ █ █
|
||||
# █▀█ █ █ █ █▀█ █ ▀ █ █▄█ █▀▄ █▄█
|
||||
|
||||
# 🔒 Licensed under the GNU GPLv3
|
||||
# 🌐 https://www.gnu.org/licenses/agpl-3.0.html
|
||||
# 👤 https://t.me/hikamoru
|
||||
|
||||
# meta developer: @hikamorumods
|
||||
# meta banner: https://github.com/AmoreForever/assets/blob/master/Aeconv.jpg?raw=true
|
||||
# meta pic: https://cdn-icons-png.flaticon.com/512/5670/5670084.png
|
||||
|
||||
import re
|
||||
import logging
|
||||
|
||||
from bs4 import BeautifulSoup as bs
|
||||
from requests import get
|
||||
from asyncio import sleep
|
||||
from asyncio.exceptions import TimeoutError
|
||||
from hikkatl.tl.types import Message
|
||||
from hikkatl.errors.common import AlreadyInConversationError
|
||||
|
||||
from .. import utils, loader
|
||||
from ..inline.types import InlineCall
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@loader.tds
|
||||
class Aeconv(loader.Module):
|
||||
"""Easy and fast valute converter"""
|
||||
|
||||
bot = "@exchange_rates_vsk_bot"
|
||||
strings = {
|
||||
"name": "Aeconv",
|
||||
"wait": "<emoji document_id=5346192260029489215>💵</emoji> <b>Converting...</b>",
|
||||
"no_args": "<emoji document_id=5343820329980535275>🖕</emoji> <b>Where are the arguments?</b>",
|
||||
"unsupported": "<emoji document_id=5307761055873638139>🚫</emoji> <b>Unsupported currency!</b>",
|
||||
"converted": "<emoji document_id=6037400506823871682>💸</emoji> <b>Converted <code>{}</code></b>\n\n",
|
||||
"already": "<emoji document_id=5348177037431414677>⚠️</emoji> <b>Wait until the bot responds!</b>",
|
||||
"wrong_currency": "<emoji document_id=5345937796102104039>🤷♀️</emoji><b> Wrong currency</b>",
|
||||
"choose_currency": "📉 <b> Choose currency</b>",
|
||||
"processing": "🕔 <b>Processing...</b>",
|
||||
"done": "✅ <b>Done!</b>",
|
||||
"already_in_conv": "⚠️ <b>Already in conversation!</b>",
|
||||
}
|
||||
|
||||
strings_ru = {
|
||||
"wait": "<emoji document_id=5346192260029489215>💵</emoji> <b>Конвертирую...</b>",
|
||||
"no_args": "<emoji document_id=5343820329980535275>🖕</emoji> <b>Где аргументы?</b>",
|
||||
"unsupported": "<emoji document_id=5307761055873638139>🚫</emoji> <b>Валюта не поддерживается!</b>",
|
||||
"converted": "<emoji document_id=6037400506823871682>💸</emoji> <b>Сконвертирован <code>{}</code></b>\n\n",
|
||||
"already": "<emoji document_id=5348177037431414677>⚠️</emoji> <b>Подожди пока бот ответит!</b>",
|
||||
"wrong_currency": "<emoji document_id=5345937796102104039>🤷♀️</emoji><b> Неправильная валюта</b>",
|
||||
"choose_currency": "📉 <b> Выберите валюту</b>",
|
||||
"processing": "🕔 Обрабатываю...",
|
||||
"done": "<code>[Aeconv]</code> ✅ <b> Готово!</b>",
|
||||
"already_in_conv": "⚠️ <b>Жди пока закончится процесс!</b>",
|
||||
}
|
||||
|
||||
strings_uz = {
|
||||
"wait": "<emoji document_id=5346192260029489215>💵</emoji> <b>Valyuta konvertatsiyasi...</b>",
|
||||
"no_args": "<emoji document_id=5343820329980535275>🖕</emoji> <b>Argumetlar qayerda?</b>",
|
||||
"unsupported": "<emoji document_id=5307761055873638139>🚫</emoji> <b>Valyuta qo'llab-quvvatlanmaydi!</b>",
|
||||
"converted": "<emoji document_id=6037400506823871682>💸</emoji> <b>Konvertatsiya qilindi <code>{}</code></b>\n\n",
|
||||
"already": "<emoji document_id=5348177037431414677>⚠️</emoji> <b>Bot javob berishini kuting!</b>",
|
||||
"wrong_currency": "<emoji document_id=5345937796102104039>🤷♀️</emoji><b> Noto'g'ri valyuta</b>",
|
||||
"choose_currency": "📉 <b> Valyutani tanlang</b>",
|
||||
"processing": "🕔 Qayta ishlayapman...",
|
||||
"done": "<code>[Aeconv]</code> ✅ <b>Tayyor!</b>",
|
||||
"already_in_conv": "⚠️ <b>Protsess tugaguncha kuting!</b>",
|
||||
}
|
||||
|
||||
strings_de = { # i'm really sorry for translations, i'm not good at it
|
||||
"wait": "<emoji document_id=5346192260029489215>💵</emoji> <b>Konvertiere...</b>",
|
||||
"no_args": "<emoji document_id=5343820329980535275>🖕</emoji> <b>Wo sind die Argumente?</b>",
|
||||
"unsupported": "<emoji document_id=5307761055873638139>🚫</emoji> <b>Nicht unterstützte Währung!</b>",
|
||||
"converted": "<emoji document_id=6037400506823871682>💸</emoji> <b>Konvertiert <code>{}</code></b>\n\n",
|
||||
"already": "<emoji document_id=5348177037431414677>⚠️</emoji> <b>Warten Sie, bis der Bot antwortet!</b>",
|
||||
"wrong_currency": "<emoji document_id=5345937796102104039>🤷♀️</emoji><b> Falsche Währung</b>",
|
||||
"choose_currency": "📉 <b> Währung auswählen</b>",
|
||||
"processing": "🕔 Verarbeitung...",
|
||||
"done": "<code>[Aeconv]</code> ✅ <b>Fertig!</b>",
|
||||
"already_in_conv": "⚠️ <b>Warten Sie, bis der Prozess beendet ist!</b>",
|
||||
|
||||
}
|
||||
|
||||
strings_tr = { # i'm really sorry for translations, i'm not good at it
|
||||
"wait": "<emoji document_id=5346192260029489215>💵</emoji> <b>Dönüştürülüyor...</b>",
|
||||
"no_args": "<emoji document_id=5343820329980535275>🖕</emoji> <b>Argümanlar nerede?</b>",
|
||||
"unsupported": "<emoji document_id=5307761055873638139>🚫</emoji> <b>Desteklenmeyen para birimi!</b>",
|
||||
"converted": "<emoji document_id=6037400506823871682>💸</emoji> <b>Dönüştürüldü <code>{}</code></b>\n\n",
|
||||
"already": "<emoji document_id=5348177037431414677>⚠️</emoji> <b>Bot cevap verene kadar bekleyin!</b>",
|
||||
"wrong_currency": "<emoji document_id=5345937796102104039>🤷♀️</emoji><b> Yanlış para birimi</b>",
|
||||
"choose_currency": "📉 <b> Para birimini seçin</b>",
|
||||
"processing": "🕔 İşleniyor...",
|
||||
"done": "<code>[Aeconv]</code> ✅ <b>Tamam!</b>",
|
||||
"already_in_conv": "⚠️ <b>İşlem bitene kadar bekleyin!</b>",
|
||||
}
|
||||
|
||||
strings_kk = { # i'm really sorry for translations, i'm not good at it
|
||||
"wait": "<emoji document_id=5346192260029489215>💵</emoji> <b>Валюта айырбасталуда...</b>",
|
||||
"no_args": "<emoji document_id=5343820329980535275>🖕</emoji> <b>Аргументтер қайда?</b>",
|
||||
"unsupported": "<emoji document_id=5307761055873638139>🚫</emoji> <b>Валюта қолдау көрсетілмейді!</b>",
|
||||
"converted": "<emoji document_id=6037400506823871682>💸</emoji> <b>Айырбасталды <code>{}</code></b>\n\n",
|
||||
"already": "<emoji document_id=5348177037431414677>⚠️</emoji> <b>Бот жауап бергенге дейін күтіңіз!</b>",
|
||||
"wrong_currency": "<emoji document_id=5345937796102104039>🤷♀️</emoji><b> Дұрыс валюта емес</b>",
|
||||
"choose_currency": "📉 <b> Валютаны таңдаңыз</b>",
|
||||
"processing": "🕔 Қайта өңдеу...",
|
||||
"done": "<code>[Aeconv]</code> ✅ <b>Тайық!</b>",
|
||||
"already_in_conv": "⚠️ <b>Процесс аяқталғанда дейін күтіңіз!</b>",
|
||||
}
|
||||
|
||||
custom_emojis = {
|
||||
"🇬🇧": "<emoji document_id=6323589145717376403>🇬🇧</emoji>",
|
||||
"🇺🇿": "<emoji document_id=6323430017179059570>🇺🇿</emoji>",
|
||||
"🇺🇸": "<emoji document_id=6323374027985389586>🇺🇸</emoji>",
|
||||
"🇷🇺": "<emoji document_id=6323139226418284334>🇷🇺</emoji>",
|
||||
"🇰🇿": "<emoji document_id=6323135275048371614>🇰🇿</emoji>",
|
||||
"🇪🇺": "<emoji document_id=6323217102765295143>🇪🇺</emoji>",
|
||||
"🇺🇦": "<emoji document_id=6323289850921354919>🇺🇦</emoji>",
|
||||
"🇹🇷": "<emoji document_id=6321003171678259486>🇹🇷</emoji>",
|
||||
"🇵🇱": "<emoji document_id=6323602387101550101>🇵🇱</emoji>",
|
||||
"🇰🇬": "<emoji document_id=6323615997852910673>🇰🇬</emoji>",
|
||||
"bit": "<emoji document_id=6034931909945985955>💰</emoji>",
|
||||
"eth": "<emoji document_id=5280647120607521572>🔹</emoji>",
|
||||
"ton": "<emoji document_id=5863980370340351884>💰</emoji>"
|
||||
}
|
||||
|
||||
currency_mapping = {
|
||||
"EU": ("🇪🇺", "EUR"),
|
||||
"GB": ("🇬🇧", "GBP"),
|
||||
"UZ": ("🇺🇿", "UZS"),
|
||||
"US": ("🇺🇸", "USD"),
|
||||
"RU": ("🇷🇺", "RUB"),
|
||||
"KZ": ("🇰🇿", "KZT"),
|
||||
"UA": ("🇺🇦", "UAH"),
|
||||
"PL": ("🇵🇱", "PLN"),
|
||||
"TR": ("🇹🇷", "TRY"),
|
||||
"KG": ("🇰🇬", "KGS")
|
||||
}
|
||||
|
||||
currencies = [
|
||||
"EUR", "GBP", "UZS", "USD", "RUB", "KZT", "UAH", "PLN", "TRY", "KGS", "TON", "ETH", "BTC"
|
||||
]
|
||||
|
||||
currency_flags = {
|
||||
"EUR": "🇪🇺",
|
||||
"GBP": "🇬🇧",
|
||||
"UZS": "🇺🇿",
|
||||
"USD": "🇺🇸",
|
||||
"RUB": "🇷🇺",
|
||||
"KZT": "🇰🇿",
|
||||
"UAH": "🇺🇦",
|
||||
"PLN": "🇵🇱",
|
||||
"TRY": "🇹🇷",
|
||||
"KGS": "🇰🇬"
|
||||
}
|
||||
|
||||
letters_stashing = {
|
||||
"E": "cur_df",
|
||||
"G": "cur_gh",
|
||||
"P": "cur_nq",
|
||||
"R": "cur_rs",
|
||||
"S": "cur_rs",
|
||||
"T": "cur_tu",
|
||||
"U": "cur_tu",
|
||||
}
|
||||
|
||||
def currencies_markup(self, argument: str = "") -> list:
|
||||
return utils.chunks(
|
||||
[
|
||||
{
|
||||
"text": f"{self.currency_flags[cur]} {cur}",
|
||||
"callback": self.callback_4_currency,
|
||||
"args": (cur,),
|
||||
}
|
||||
for cur in [
|
||||
i
|
||||
for i in self.currency_flags.keys()
|
||||
if i.startswith(argument.upper())
|
||||
]
|
||||
if cur.startswith(argument.upper())
|
||||
],
|
||||
5,
|
||||
)
|
||||
|
||||
async def client_ready(self, client, db):
|
||||
await utils.dnd(client, self.bot, archive=True)
|
||||
|
||||
async def get_ton_in_rub(self, am, what: str = "uzs", cup: bool = False) -> str:
|
||||
r = (
|
||||
get(f"https://coinchefs.com/{what}/ton/{am}/")
|
||||
if cup
|
||||
else get(f"https://coinchefs.com/ton/{what}/{am}/")
|
||||
)
|
||||
soup = bs(r.text, "html.parser")
|
||||
if result_div := soup.find('div', class_='convert-result'):
|
||||
if result_text_div := result_div.find(
|
||||
'div', class_='col-xs-10 col-sm-10 text-center result-text'
|
||||
):
|
||||
if value_element := result_text_div.b:
|
||||
return value_element.get_text(strip=True)
|
||||
else:
|
||||
logger.debug("Value element not found")
|
||||
else:
|
||||
logger.debug("Result text div not found")
|
||||
else:
|
||||
logger.debug("Result div not found")
|
||||
return None
|
||||
|
||||
async def callback_4_currency(self, call: InlineCall, currency: str):
|
||||
try:
|
||||
first_letter = currency[0]
|
||||
await call.answer(self.strings["processing"], show_alert=True)
|
||||
await call.delete()
|
||||
async with self.client.conversation(self.bot) as conv:
|
||||
m = await conv.send_message("/settings")
|
||||
r = await conv.get_response()
|
||||
await r.click(data=b'cur_menu')
|
||||
await r.click(data=b'cur_curmenu')
|
||||
await r.click(data=self.letters_stashing[first_letter])
|
||||
await r.click(data=f"cur_{currency.upper()}")
|
||||
await r.delete()
|
||||
await m.delete()
|
||||
await self.inline.bot.send_message(self.tg_id, self.strings["done"])
|
||||
except AlreadyInConversationError:
|
||||
await call.answer(self.strings["already_in_conv"], show_alert=True)
|
||||
|
||||
@loader.command(ru_doc="<количество> [валюта] должны быть разделены пробелом")
|
||||
async def conv(self, message: Message):
|
||||
"""<amount> [currency] should be separated by space"""
|
||||
args = utils.get_args_raw(message)
|
||||
if not args:
|
||||
await utils.answer(message, self.strings["no_args"])
|
||||
return
|
||||
# if args.split(" ")[1].upper() not in self.currencies:
|
||||
# await utils.answer(message, self.strings["wrong_currency"])
|
||||
# return
|
||||
await utils.answer(message, self.strings["wait"])
|
||||
if "ton".lower() in args.lower():
|
||||
li_args = args.split(" ")
|
||||
ex_ = await self.get_ton_in_rub(li_args[0])
|
||||
try:
|
||||
async with message.client.conversation(self.bot) as conv:
|
||||
msg = await conv.send_message(args) if "ton".lower() not in args.lower() else await conv.send_message(ex_)
|
||||
r = await conv.get_response()
|
||||
res = r.text
|
||||
text_ = ""
|
||||
text_ += (
|
||||
self.strings["converted"].format(args)
|
||||
if "ton".lower() not in args.lower()
|
||||
else self.strings["converted"].format(f"{li_args[0]} TON")
|
||||
)
|
||||
for emoji, currency, *_ in self.currency_mapping.values():
|
||||
if match := re.findall(f"{emoji} ?(.*) {currency}", res):
|
||||
text_ += (
|
||||
f"<b>{self.custom_emojis.get(emoji)} {currency}:</b> "
|
||||
f"<code>{match[0]}</code>\n"
|
||||
)
|
||||
|
||||
if match := re.findall(r"(.*) BTC", res):
|
||||
text_ += f"\n<b>{self.custom_emojis['bit']} BTC:</b> <code>{match[0]}</code>\n"
|
||||
if match := re.findall(r"(.*) ETH", res):
|
||||
text_ += f"<b>{self.custom_emojis['eth']} ETH:</b> <code>{match[0]}</code>\n"
|
||||
|
||||
if ex_ := await self.get_ton_in_rub(args.split(" ")[0], args.split(" ")[1].lower(), True):
|
||||
text_ += f"<b>{self.custom_emojis['ton']} TON:</b> <code>{ex_.split(' = ')[1]}</code>\n"
|
||||
await utils.answer(message, text_)
|
||||
await msg.delete()
|
||||
await r.delete()
|
||||
except AlreadyInConversationError:
|
||||
await utils.answer(message, self.strings["already"])
|
||||
except TimeoutError:
|
||||
await utils.answer(message, self.strings["unsupported"])
|
||||
except IndexError:
|
||||
await utils.answer(message, self.strings["no_args"])
|
||||
|
||||
|
||||
@loader.command(ru_doc="[валюта] | без аргументов покажет список валют для включения/выключения")
|
||||
async def controlvalute(self, message: Message):
|
||||
"""[currency] | without arguments will show list of currencies for enable/disable"""
|
||||
if args := utils.get_args_raw(message):
|
||||
await utils.answer(message, self.strings["choose_currency"], reply_markup=self.currencies_markup(args))
|
||||
else:
|
||||
return await utils.answer(message, self.strings["choose_currency"], reply_markup=self.currencies_markup())
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user