# `7MMM. ,MMF'`7MMM. ,MMF' `7MMM. ,MMF' `7MM # MMMb dPMM MMMb dPMM MMMb dPMM MM # M YM ,M MM M YM ,M MM M YM ,M MM ,pW"Wq. ,M""bMM ,pP"Ybd # M Mb M' MM M Mb M' MM M Mb M' MM 6W' `Wb ,AP MM 8I `" # M YM.P' MM M YM.P' MM mmmmm M YM.P' MM 8M M8 8MI MM `YMMMa. # M `YM' MM M `YM' MM M `YM' MM YA. ,A9 `Mb MM L. I8 # .JML. `' .JMML..JML. `' .JMML. .JML. `' .JMML.`Ybmd9' `Wbmd"MML.M9mmmP' # # (c) 2023 — licensed under Apache 2.0 — https://www.apache.org/licenses/LICENSE-2.0 # meta developer: @minimaxno # meta pic: https://img.icons8.com/emoji/344/scroll-emoji.png # requires: deep-translator from .. import loader, utils from telethon import types from telethon.tl.types import Message import re import os import requests as rq from deep_translator import GoogleTranslator as GT import logging logger = logging.getLogger(__name__) @loader.tds class MHelpMod(loader.Module): """Helps to download mods to file and automaticaly make simple descriptions for your modules.""" strings = {'name': 'MHelp', 'noname': "🙅🏼‍♂️ You've not setted your GitHub username!", 'norepo': "🗒️ You've not setted your Hikka modules repo!", 'format?': '🚫 Incorrect format!', 'inname': '🤖 Name is incorrect!', '404': '🔦 Requested file not found!', 'lang?': '㊙️ I dunno such language!', 'suc': '👌🏻 Succesful!'} strings_ru = {'name': 'MHelp', 'noname': "🙅🏼‍♂️ Ты ещё не установил свой юзернейм на GitHub!", 'norepo': "🗒️ Ты ещё не установил имя репозитария с модулями!", 'format?': '🚫 Неверный формат!', 'inname': '🤖 Некорректное имя', '404': '🔦 Не нашёл такого файла!', 'lang?': '㊙️ Один из введёных языков мне неизвестен!', 'suc': '👌🏻 Успешно!'} strings_de = {'name': 'MHelp', 'noname': "🙅🏼‍♂️ Geben Sie Ihren auf GitHub verwendeten Benutzernamen!", 'norepo': "🗒️ Geben Sie den Namen des Repositorys ein, das zum Speichern der Module verwendet wird!", 'format?': '🚫 Ungültiges Format!', 'inname': '🤖 Ungültiger Name!', '404': '🔦 Es gibt keine solche Datei!', 'lang?': '㊙️ Eine der eingegebenen Sprachen ist mir unbekannt!', 'suc': '👌🏻 Erfolgreich!'} async def client_ready(self, client, db): self.client = client self.db = db async def setuncmd(self, m: Message): """Configurates GH username.""" name = utils.get_args_raw(m) if (len(name) > 39) or (name[len(name)-1] == '-') or (name[0] == '-') or (name == '') or ('--' in name) or (re.search(name, '[^ a-zA-Z0-9-]')): await utils.answer(m, self.strings('inname')) return else: self.set('ghun', name) await utils.answer(m, self.strings('suc')) async def setrepocmd(self, m: Message): """Configurates GH repo name.""" name = utils.get_args_raw(m) if (len(name) > 100) or (name[len(name)-1] == '-') or (name[0] == '-') or (name == '') or ('--' in name) or (re.search(name, '[^ a-zA-Z0-9-_.]')): await utils.answer(m, self.strings('inname')) return else: self.set('repon', name) await utils.answer(m, self.strings('suc')) async def descrcmd(self, m: Message): """Makes decription. Required format: emoji > name > description > base language code, language codes to translate automatocally, … """ if not (self.get("ghun", False)): await utils.answer(m, self.strings('noname')) return if not (self.get("repon", False)): await utils.answer(m, self.strings('norepo')) return prompt = utils.get_args_raw(m) try: emoji, name, descr, langs = prompt.split(' > ') except: await utils.answer(m, self.strings('format?')) ans = f'{emoji} {name}'+'\n\n'+descr if ', ' in langs: langs = langs.split(', ') else: langs = [langs] avla = GT().get_supported_languages(as_dict = True) for i in langs: if i not in avla.values(): await utils.answer(m, self.strings('lang?')) return if len(langs) > 1: for lang in range(1, len(langs)): tren = GT(langs[0], langs[lang]) tr_descr = "".join( [ await utils.run_sync(lambda: tren.translate(chunk)) for chunk in utils.chunks(descr, 512) ] ) ans += '\n\n—\n\n' + tr_descr if langs[0] != 'ru': download = GT('auto', langs[0]).translate('Скачать') else: download = 'Скачать' for lang in range(1, len(langs)): if langs[lang] != 'ru': download += ' | ' + GT('ru', langs[lang]).translate('Скачать') else: download += ' | Скачать' link = 'https://raw.githubusercontent.com/'+self.get('ghun')+'/'+self.get('repon')+'/main/'+name+'.py' ans += '\n\n—\n\n' + download + '\n.dlmod '+link+'' if rq.get(link).status_code != 200: await utils.answer(m, self.strings('404')) return else: open(f'{name}.py', 'w').write(rq.get(link).text) if len(ans) > 1024: ans = [ans[i:i+1024] for i in range(0, len(ans), 1024)] else: ans = [ans] await m.client.send_file(m.to_id, f'{name}.py', caption=ans[0], parse_mode='HTML') for i in range(1, len(ans)): await m.respond(ans[i]) os.remove(f'{name}.py') await m.delete() async def topycmd(self, m: Message): """Gets module from link.""" link = utils.get_args_raw(m) if ('github' and 'hikariatama') not in link: await utils.answer(m, self.strings('format?')) return else: if rq.get(link).status_code != 200: await utils.answer(m, self.strings('404')) return else: open(f'Mod.py', 'w').write(rq.get(link).text) await m.client.send_file(m.to_id, f'Mod.py') os.remove(f'Mod.py') await m.delete()