from telethon.types import Message from telethon.errors.rpcbaseerrors import BadRequestError from .. import loader, utils import aiohttp import logging """ ███ ███ ██ ██ ██████ ██ ██ ██ ██████ ███████ ███████ ████ ████ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ████ ██ ██ ██ ██████ ██ ██ ██ ██ ██ ███████ █████ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██████ ██ ██ ██████ ███████ ██████ ███████ ███████ Module Name """ # scopes: # 🔒 Licensed under the GNU AGPLv3 # meta banner: link # meta desc: Facts about numbers, dates, years, etc # meta developer: @BruhHikkaModules logger = logging.getLogger(__name__) class NumberAPI: async def _request(self, number: str='24', numbertype: str='trivia', random: bool=False): """Request function for NUMBER API Arguments: number {str} -- Number or date for which the fact should be (why date too? because it should be specified in month/day format) Keyword Arguments: numbertype {str} -- Type of fact (math, trivia, or date) (default: {'trivia'}) random {bool} -- Should be fact is random (default: {False}) """ url = 'http://numberapi.com/' if random: url += 'random/' match numbertype: case 'trivia': url += 'trivia' case 'math': url += 'math' case 'date': url += 'date' case 'year': url += 'year' else: url += number match numbertype: case 'trivia': url += 'trivia' case 'math': url += 'math' case 'date': url += 'date' async with aiohttp.ClientSession() as session: async with session.get(url) as response: return await response.text() async def trivia_fact(self, number="0", random: bool=True): if random: return await self._request(random=True) else: return await self._request(number=number) async def date_fact(self, date="31/12", random: bool=True): if random: return await self._request(random=True, numbertype='date') else: return await self._request(numbertype='date', number=date) # 1/12 async def math_fact(self, number="1", random: bool=True): if random: return await self._request(random=True, numbertype='math') else: return await self._request(numbertype='math', number=number) async def year_fact(self): """ONLY RANDOM!!!""" return await self._request(numbertype='year', random=True) @loader.tds class INumber(loader.Module): """Facts about numbers, dates, years, etc""" strings = { "name": "INumber", "type_not_exist": "😞 Fact type does not exist :(", "translation_failed": "Failed to translate" } strings_ru = { "type_not_exist": "😞 Тип факта не существует :(", "translation_failed": "Не удалось перевести." } @loader.command() async def randomfact(self, message: Message): """ - [Type of random facts (year, trivia, math, date)] Random fact about something""" args = utils.get_args_raw(message) api = NumberAPI() fact = "" match args: case 'year': fact = await api.year_fact() case 'trivia': fact = await api.trivia_fact(random=True) case 'math': fact = await api.math_fact(random=True) case 'date': fact = await api.date_fact(random=True) case _: return await utils.answer( message, self.strings("type_not_exist") ) try: await utils.answer( message, await self._client.translate( message.peer_id, message, to_lang=self._db.get("hikka.translations", "lang")[0:2], raw_text=fact, entities=message.entities, ), ) except BadRequestError as e: if 'TRANSLATE_REQ_QUOTA_EXCEEDED' in e: await utils.answer(fact + self.strings('translation_failed'))