# # @@@@@@ @@@@@@ @@@@@@@ @@@@@@@ @@@@@@ @@@@@@@@@@ @@@@@@ @@@@@@@ @@@ @@@ @@@ @@@@@@@@ @@@@@@ # @@@@@@@@ @@@@@@@ @@@@@@@ @@@@@@@@ @@@@@@@@ @@@@@@@@@@@ @@@@@@@@ @@@@@@@@ @@@ @@@ @@@ @@@@@@@@ @@@@@@@ # @@! @@@ !@@ @@! @@! @@@ @@! @@@ @@! @@! @@! @@! @@@ @@! @@@ @@! @@@ @@! @@! !@@ # !@! @!@ !@! !@! !@! @!@ !@! @!@ !@! !@! !@! !@! @!@ !@! @!@ !@! @!@ !@! !@! !@! # @!@!@!@! !!@@!! @!! @!@!!@! @!@ !@! @!! !!@ @!@ @!@ !@! @!@ !@! @!@ !@! @!! @!!!:! !!@@!! # !!!@!!!! !!@!!! !!! !!@!@! !@! !!! !@! ! !@! !@! !!! !@! !!! !@! !!! !!! !!!!!: !!@!!! # !!: !!! !:! !!: !!: :!! !!: !!! !!: !!: !!: !!! !!: !!! !!: !!! !!: !!: !:! # :!: !:! !:! :!: :!: !:! :!: !:! :!: :!: :!: !:! :!: !:! :!: !:! :!: :!: !:! # :: ::: :::: :: :: :: ::: ::::: :: ::: :: ::::: :: :::: :: ::::: :: :: :::: :: :::: :::: :: # : : : :: : : : : : : : : : : : : : : :: : : : : : : :: : : : :: :: :: : : # # © 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 developer: @AstroModules # meta banner: https://raw.githubusercontent.com/Den4ikSuperOstryyPer4ik/Astro-modules/main/Banners/WordlyHelper.jpg import re import requests from .. import loader, utils @loader.tds class WordlyHelper(loader.Module): '''Помощник для игры "Вордли на Русском"''' strings = { "name": "WordlyHelper", "not_args": "🚫 | Аргументы где?", "search": "🔸 | Поиск слов...", "result": ( '🔹' ' Слова по вашему запросу:\n\n{}\n\n' '🔸' ' Запрос: {}' ), "not_found": " Не найдено", "not_in_db": "🚫 | В базе нету слов из {} букв 😠", } async def client_ready(self): self.slova = {} for i, o in requests.get("https://0x0.st/HNeQ.json").json().items(): self.slova[i] = [ word + " " for word in o ] def letters_in_word(self, word: str, letters: list[str]): for letter in letters: if letter not in word: return False return True def letters_not_in_word(self, word: str, letters: list[str]): for letter in letters: if letter in word: return False return True def get_word(self, marking, _not: list[str] = [], _yes: list[str] = []): return [ i for i in utils.array_sum(list(self.slova.values())) if re.match(marking.replace("*", "(.)").replace("$", "(.*)") + " ", i) and self.letters_in_word(i, _yes) and self.letters_not_in_word(i, _not) ] @loader.command() async def wordly(self, message): """<маркировка слова> [-not <буквы подряд, которых точно нету в слове>] [-yes <буквы подряд, которые точно есть в слове] - Найти слова по маркировке: * - одна любая буква $ - любое кол-во любых букв пример: *т**т -yes оч -not абвгд : отчет """ args = utils.get_args(message) if not args: return await utils.answer(message, self.strings("not_args")) markirovka = args[0] if str(len(markirovka)) not in self.slova: return await utils.answer(message, self.strings("not_in_db").format(len(markirovka))) _not = [] _yes = [] msg = await utils.answer(message, self.strings("search")) for arg in args: if arg == "-not": _not = list(args[args.index(arg)+1]) if arg == "-yes": _yes = list(args[args.index(arg)+1]) return await utils.answer(msg, self.strings("result").format( "\n".join( self.get_word(markirovka, _not, _yes) ) or self.strings("not_found"), " ".join(args) ))