# █ █ ▀ █▄▀ ▄▀█ █▀█ ▀ # █▀█ █ █ █ █▀█ █▀▄ █ # © Copyright 2022 # https://t.me/hikariatama # # 🔒 Licensed under the GNU AGPLv3 # 🌐 https://www.gnu.org/licenses/agpl-3.0.html import logging import os try: import redis except ImportError as e: if "DYNO" in os.environ: raise e from telethon.tl.types import Message from .. import loader, main, utils, heroku from telethon.errors.rpcerrorlist import YouBlockedUserError from telethon.tl.functions.contacts import UnblockRequest logger = logging.getLogger(__name__) @loader.tds class HerokuMod(loader.Module): """Stuff related to Hikka Heroku installation""" strings = { "name": "Heroku", "redisdocs": ( "🥡 Redis Database\n\n" "🇷🇺 If you are from Russia, or just want to use external service:\n" "1. Go to https://redis.com\n" "2. Register account\n" "3. Create database instance\n" "4. Enter your Redis Database URL via .setredis <redis_url>\n" "💡 Hint: URL structure is redis://:PASSWORD@ENDPOINT\n\n" "♓️ If you are not from Russia, just enable heroku-redis plugin for your app. For this action Heroku account verification is required!" ), "url_invalid": "🚫 Invalid URL specified", "url_saved": "✅ URL saved", } strings_ru = { "redisdocs": ( "🥡 База данных Redis\n\n" "🇷🇺 Если ты из России, или просто хочешь использовать внешний сервис:\n" "1. Перейди на https://redis.com\n" "2. Зарегистрируйся\n" "3. Создай базу данных\n" "4. Введи Database URL в .setredis <redis_url>\n" "💡 Подсказка: URL выглядит так: redis://:PASSWORD@ENDPOINT\n\n" "♓️ Если ты не из России, можешь просто активировать плагин heroku-redis в Hikka app Heroku. Для этого тебе нужно будет верифицировать аккаунт" ), "url_invalid": "🚫 Указан неверный URL", "url_saved": "✅ URL сохранен", } async def client_ready(self, client, db): self._db = db self._client = client self._bot = "@WebpageBot" if "DYNO" not in os.environ: raise loader.SelfUnload await utils.dnd(client, self._bot, True) self._heroku_url = heroku.get_app(api_token=main.hikka.api_token)[0].web_url self._heroku_pinger.start() async def setrediscmd(self, message: Message): """ - Set Redis Database URL""" args = utils.get_args_raw(message) if not args: await utils.answer(message, self.strings("redisdocs")) return try: redis.from_url(args) except Exception: await utils.answer(message, self.strings("url_invalid")) return main.save_config_key("redis_uri", args) await self._db.redis_init() await self._db.remote_force_save() await utils.answer(message, self.strings("url_saved")) @loader.loop(interval=20 * 60, wait_before=True) async def _heroku_pinger(self): """Sends request to Heroku webapp through WebpageBot""" async with self._client.conversation(self._bot) as conv: try: m = await conv.send_message(self._heroku_url) except YouBlockedUserError: await self._client(UnblockRequest(self._bot)) m = await conv.send_message(self._heroku_url) r = await conv.get_response() await m.delete() await r.delete()