__version__ = (1, 0, 5) # # @@@@@@ @@@@@@ @@@@@@@ @@@@@@@ @@@@@@ @@@@@@@@@@ @@@@@@ @@@@@@@ @@@ @@@ @@@ @@@@@@@@ @@@@@@ # @@@@@@@@ @@@@@@@ @@@@@@@ @@@@@@@@ @@@@@@@@ @@@@@@@@@@@ @@@@@@@@ @@@@@@@@ @@@ @@@ @@@ @@@@@@@@ @@@@@@@ # @@! @@@ !@@ @@! @@! @@@ @@! @@@ @@! @@! @@! @@! @@@ @@! @@@ @@! @@@ @@! @@! !@@ # !@! @!@ !@! !@! !@! @!@ !@! @!@ !@! !@! !@! !@! @!@ !@! @!@ !@! @!@ !@! !@! !@! # @!@!@!@! !!@@!! @!! @!@!!@! @!@ !@! @!! !!@ @!@ @!@ !@! @!@ !@! @!@ !@! @!! @!!!:! !!@@!! # !!!@!!!! !!@!!! !!! !!@!@! !@! !!! !@! ! !@! !@! !!! !@! !!! !@! !!! !!! !!!!!: !!@!!! # !!: !!! !:! !!: !!: :!! !!: !!! !!: !!: !!: !!! !!: !!! !!: !!! !!: !!: !:! # :!: !:! !:! :!: :!: !:! :!: !:! :!: :!: :!: !:! :!: !:! :!: !:! :!: :!: !:! # :: ::: :::: :: :: :: ::: ::::: :: ::: :: ::::: :: :::: :: ::::: :: :: :::: :: :::: :::: :: # : : : :: : : : : : : : : : : : : : : :: : : : : : : :: : : : :: :: :: : : # # © Copyright 2024 # # https://t.me/Den4ikSuperOstryyPer4ik # and # https://t.me/ToXicUse # # 🔒 Licensed under the GNU AGPLv3 # https://www.gnu.org/licenses/agpl-3.0.html # # meta banner: https://raw.githubusercontent.com/Den4ikSuperOstryyPer4ik/Astro-modules/main/Banners/Akinator.jpg # meta developer: @AstroModules import random import akinator import deep_translator from .. import loader, utils from ..inline.types import InlineCall aki_photo = "https://graph.org/file/3cc8825c029fd0cab9edc.jpg" aki_failed = "https://0x0.st/H1rk.jpg" emojies = ["😏", "🫢", "🤔", "🫣", "🫤", "😉", "😒"] @loader.tds class AkinatorGame(loader.Module): """ Akinator will guess any character you have in mind, You just need to answer a couple of questions) """ strings = { "name": "Akinator", "child_mode": "Child mode. If enabled, it will be easier to guess 18+ heroes", "failed": "❌ Failed", "start": "🔮 Start", "text": "🔮 Guess any character you have in mind, and click on the Start button", "target_lang": "Target language", "yes": "Yes", "no": "No", "idk": "I don't know", "probably": "Probably", "probably_not": "Probably not", "this_is": "This is {name}\n{description}", "not_right": "Not right", } strings_ru = { "_cls_doc": "Акинатор угадает любого вами загаданного персонажа, стоит лишь ответить на пару вопросов)", "child_mode": "Детский режим. Если включен, то будет сложнее отгадать 18+ героев", "failed": "🚫 Не удалось угадать персонажа", "start": "🔮 Начать", "text": "🔮 Задумайте реального или вымышленного персонажа, и нажмите начать", "target_lang": "Язык для перевода", "yes": "Да", "no": "Нет", "idk": "Не знаю", "probably": "Возможно", "probably_not": "Скорее нет", "this_is": "Это {name}\n{description}", "not_right": "Это не он", } def __init__(self): self.config = loader.ModuleConfig( loader.ConfigValue( "child_mode", True, lambda: self.strings("child_mode"), validator=loader.validators.Boolean() ), loader.ConfigValue( "target_lang", "en", lambda: self.strings("target_lang"), validator=loader.validators.String() ) ) async def client_ready(self): self.games = {} @loader.command( ru_doc="- начать игру", ) async def akinator(self, message): """- start the game""" sta = akinator.Akinator() self.games.update({message.chat_id: {message.id: sta}}) await self.inline.form( message=message, photo=aki_photo, text=self.strings("text"), reply_markup={ "text": self.strings("start"), "callback": self.doai, "args": (message,), } ) async def doai(self, call: InlineCall, message): chat_id = int(message.chat_id) mid = int(message.id) qu = self.games[chat_id][mid].start_game(child_mode=self.config["child_mode"]) text = deep_translator.GoogleTranslator( source="auto", target=self.config["target_lang"] ).translate(qu) emo = random.choice(emojies) await call.edit( f"{emo} {text}", reply_markup=[ [ { "text": self.strings("yes"), "callback": self.cont, "args": ("Yes", message,), }, { "text": self.strings("no"), "callback": self.cont, "args": ("No", message,), }, { "text": self.strings("idk"), "callback": self.cont, "args": ("Idk", message,), } ], [ { "text": self.strings("maybe"), "callback": self.cont, "args": ("Probably", message,), }, { "text": self.strings("maybe_not"), "callback": self.cont, "args": ("Probably Not", message,), } ] ] ) async def cont( self, call: InlineCall, args: str, message ): chat_id = message.chat_id mid = message.id gm = self.games[chat_id][mid] text = gm.answer(args) try: if gm.progression >= 85: gm.win() gs = gm.first_guess text = self.strings("this_is").format(name=gs["name"], description=gs["description"]) await call.edit( text, photo=gs["absolute_picture_path"], reply_markup=[ { "text": self.strings("not_right"), "callback": self.cont, "args": ("No", message,), }, ] ) else: text = deep_translator.GoogleTranslator( source="auto", target=self.config["target_lang"] ).translate(text) emo = random.choice(emojies) await call.edit( text=f"{emo} {text}", photo=aki_photo, reply_markup=[ [ { "text": self.strings("yes"), "callback": self.cont, "args": ("Yes", message,), }, { "text": self.strings("no"), "callback": self.cont, "args": ("No", message,), }, { "text": self.strings("idk"), "callback": self.cont, "args": ("Idk", message,), } ], [ { "text": self.strings("maybe"), "callback": self.cont, "args": ("Probably", message,), }, { "text": self.strings("maybe_not"), "callback": self.cont, "args": ("Probably Not", message,), } ] ] ) except akinator.exceptions.AkinatorQuestionOutOfRangeException: await call.edit( text=self.strings("failed"), photo=aki_failed )