# █▀▀ ▄▀█   █▀▄▀█ █▀█ █▀▄ █▀ # █▀░ █▀█   █░▀░█ █▄█ █▄▀ ▄█ # https://t.me/famods # 🔒 Licensed under the GNU AGPLv3 # 🌐 https://www.gnu.org/licenses/agpl-3.0.html # --------------------------------------------------------------------------------- # Name: Epsilion # Description: Авто-фарм в @EpsilionWarBot # meta developer: @FAmods # meta banner: https://github.com/FajoX1/FAmods/blob/main/assets/banners/epsilion.png?raw=true # --------------------------------------------------------------------------------- import hikkatl import re import random import asyncio import logging from .. import loader, utils logger = logging.getLogger(__name__) @loader.tds class Epsilion(loader.Module): """Авто-фарм в @EpsilionWarBot""" strings = { "name": "Epsilion", "checking_profile": "👀 Смотрю профиль...", "b_on": "⚡️ Авто-фарм включен!", "b_off": "🚫 Авто-фарм выключен!", "bonus_on": "⚡️ Авто ежедневный бонус включен!", "bonus_off": "🚫 Авто ежедневный бонус выключен!", } def __init__(self): self.config = loader.ModuleConfig( loader.ConfigValue( "location", "☘️ Фермерские угодья", lambda: "Локация в которую ты по стандарту будешь отправляться. Пример: ☘️ Фермерские угодья", ), loader.ConfigValue( "start_message", "💖 Ваше здоровье полностью восстановлено", lambda: "Сообщение от бота после которого начинается бой", ), ) async def client_ready(self, client, db): self.db = db self._client = client if self.db.get(self.name, "battle", False): asyncio.create_task(self._battle()) async def _check_hp(self): while True: try: async with self._client.conversation("@EpsilionWarBot") as conv: msg = await conv.send_message("/equip") r = await conv.get_response() await msg.delete() await r.delete() matches = re.search(r'\((\d+)/(\d+)\)', r.text) if matches and self.db.get(self.name, "battle", False): current_hp = int(matches.group(1)) max_hp = int(matches.group(2)) above_50_percent = (current_hp / max_hp) > 0.5 full_health = current_hp == max_hp await asyncio.sleep(3.66767665323) if above_50_percent: if "💖 Ваше здоровье восстановлено на 50%" in self.config['start_message']: return asyncio.create_task(self._battle()) if full_health: if "💖 Ваше здоровье полностью восстановлено" in self.config['start_message']: return asyncio.create_task(self._battle()) return except hikkatl.errors.common.AlreadyInConversationError: await asyncio.sleep(5.67) async def _change_location(self, conv, location): if location == "default": location = self.config['location'] while True: try: msg = await self._client.send_message(776510403, "🗺 Карта") r = await conv.get_response() await msg.delete() await r.delete() await asyncio.sleep(4.4324232432) msg = await self._client.send_message(776510403, location) r = await conv.get_response() r = await conv.get_response() await msg.delete() await r.delete() break except hikkatl.errors.common.AlreadyInConversationError: await asyncio.sleep(5.67) async def _battle(self): self.cont = True while self.cont: try: async with self._client.conversation("@EpsilionWarBot") as conv: msg = await conv.send_message("⚔️ Найти врагов") r = await conv.get_response() await msg.delete() cavella = False cavella = True if not r.text == "🔭 Начался поиск противника" else False if "Недостаточно здоровья для сражений" in r.text: return if cavella: await self._change_location(conv, "default") msg = await conv.send_message("⚔️ Найти врагов") r = await conv.get_response() await msg.delete() while self.cont: r = await conv.get_response() if "сбежать" in r.text: await conv.send_message("В зону охоты") self.cont = False await asyncio.sleep(2.82323318089) asyncio.create_task(self._check_hp()) return if "Хотел встретить врага, но" in r.text: r = await conv.get_response() pr = [] for b in r.reply_markup.rows: for bu in b.buttons: if all(x not in bu.text for x in ["Сбежать", "Пропустить", "(", ")", "[", "]"]): pr.append(bu.text) msg = await conv.send_message(random.choice(pr)) r = await conv.get_response() if not "блокировать?" in r.text: if "Тебе не повезло" in r.text: await conv.send_message("💀 Принять участь") if "Ты победил" in r.text: await conv.send_message("✅ Забрать нaграду") if "сбежать" in r.text: await conv.send_message("В зону охоты") else: await conv.send_message("В город") self.cont = False await asyncio.sleep(3.3222444435) asyncio.create_task(self._check_hp()) return await asyncio.sleep(3.54354353) pr = [] for b in r.reply_markup.rows: for bu in b.buttons: if all(x not in bu.text for x in ["Сбежать", "Пропустить", "(", ")", "[", "]"]): pr.append(bu.text) msg = await conv.send_message(random.choice(pr)) r = await conv.get_response() if "сбежать" in r.text: await conv.send_message("В зону охоты") self.cont = False await asyncio.sleep(2.82323318089) asyncio.create_task(self._check_hp()) return except hikkatl.errors.common.AlreadyInConversationError: await asyncio.sleep(5.67) async def _bonus(self): self.cont = True while self.cont: try: async with self._client.conversation("@EpsilionWarBot") as conv: msg = await conv.send_message("📟 Меню") r = await conv.get_response() await msg.delete() await r.delete() msg = await self._client.send_message(776510403, "🎁 Награды") r = await conv.get_response() await msg.delete() await r.delete() msg = await self._client.send_message(776510403, "🧁 Ежедневная награда") r = await conv.get_response() await msg.delete() await r.delete() break except hikkatl.errors.common.AlreadyInConversationError: await asyncio.sleep(5.67) async def _getprofme(self): while True: try: async with self._client.conversation("@EpsilionWarBot") as conv: msg = await conv.send_message("/equip") r = await conv.get_response() await msg.delete() await r.delete() return f"📁 Профиль\n\n{r.text}" except hikkatl.errors.common.AlreadyInConversationError: await asyncio.sleep(5.67) @loader.command() async def eps(self, message): """Включить/выключить авто-фарм""" if self.db.get(self.name, "battle", False): self.cont = False self.db.set(self.name, "battle", False) return await utils.answer(message, self.strings["b_off"]) self.db.set(self.name, "battle", True) await utils.answer(message, self.strings["b_on"]) await self._battle() @loader.command() async def epb(self, message): """Включить/выключить авто ежедневный бонус""" if self.db.get(self.name, "everyday_bonus", False): self.db.set(self.name, "everyday_bonus", False) return await utils.answer(message, self.strings["bonus_off"]) self.db.set(self.name, "everyday_bonus", True) await utils.answer(message, self.strings["bonus_on"]) await self._bonus() @loader.command() async def epp(self, message): """Посмотреть свой профиль""" await utils.answer(message, self.strings["checking_profile"]) await utils.answer(message, await self._getprofme()) @loader.loop(interval=60*60*24, autostart=True) async def loop(self): if self.db.get(self.name, "everyday_bonus", False): await self._bonus() await asyncio.sleep(random.randint(65, 90)) async def watcher(self, event): chat = utils.get_chat_id(event) if chat != 776510403: return if event.raw_text == self.config['start_message']: if self.db.get(self.name, "battle", False): await asyncio.sleep(random.randint(3, 5)) asyncio.create_task(await self._battle())