# █▀▀ ▄▀█   █▀▄▀█ █▀█ █▀▄ █▀ # █▀░ █▀█   █░▀░█ █▄█ █▄▀ ▄█ # https://t.me/famods # 🔒 Licensed under the GNU AGPLv3 # 🌐 https://www.gnu.org/licenses/agpl-3.0.html # --------------------------------------------------------------------------------- # Name: Proxy # Description: Работа с прокси # meta developer: @FAmods # meta banner: https://github.com/FajoX1/FAmods/blob/main/assets/banners/proxy.png?raw=true # requires: aiohttp # --------------------------------------------------------------------------------- import random import aiohttp import asyncio import logging from .. import loader, utils logger = logging.getLogger(__name__) @loader.tds class Proxy(loader.Module): """Работа с прокси""" strings = { "name": "Proxy", "not_work_proxy": " Прокси не работает", "no_args": " Нужно быть {}{} {}", "no_link": " Нету ссылки на прокси! Вставь её в {}cfg proxy", "incorrect_protocol": "😕 Неверный протокол или его нету в нашей базе!", "update_link": "😕 Истек срок работы ссылки! Обнови её в {}cfg proxy", "searching_proxy": "🔄 Ищю прокси...", "checking_proxy": "🔄 Проверяю прокси...", } def __init__(self): self.config = loader.ModuleConfig( loader.ConfigValue( "link", None, lambda: "Ссылка для получение прокси. Взять можно в https://advanced.name/ru/freeproxy", ), loader.ConfigValue( "check_work", True, lambda: "Проверять работу прокси?", validator=loader.validators.Boolean(), ), ) async def client_ready(self, client, db): self.db = db self._client = client @loader.command() async def gproxy(self, message): """Получить рандомное прокси""" protocol = utils.get_args_raw(message) if not protocol: return await utils.answer(message, self.strings["no_args"].format(self.get_prefix(), "gproxy", "[протокол]")) if not self.config["link"]: return await utils.answer(message, self.strings["no_link"].format(self.get_prefix())) await utils.answer(message, self.strings['searching_proxy']) proxys_link = self.config["link"] params = {"type": protocol} async with aiohttp.ClientSession() as session: async with session.get(proxys_link) as res: proxys_default = await res.text() if not proxys_default: return await utils.answer(message, self.strings['update_link'].format(self.get_prefix())) async with aiohttp.ClientSession() as session: async with session.get(proxys_link, params=params) as res: proxys = await res.text() if proxys_default == proxys: return await utils.answer(message, self.strings['incorrect_protocol']) proxys = proxys.split("\n") while True: proxy = random.choice(proxys) proxy_ip = proxy.split(":")[0] proxy_port = proxy.split(":")[1] if not self.config['check_work']: break try: async with aiohttp.ClientSession() as session: async with session.get('http://example.com', proxy=f"{protocol}://{proxy_ip}:{proxy_port}", timeout=5) as res: if res.status == 200: break except: continue return await utils.answer(message, f"""🌐 Рандомное прокси 💾 Протокол: {protocol} 🖥 IP: {proxy_ip} 📟 Порт: {proxy_port} {'💎 Модуль проверяет работоспособность прокси!' if self.config['check_work'] else ''}""") @loader.command() async def wproxy(self, message): """Проверить работу прокси""" try: protocol, ip_port = utils.get_args_raw(message).split(" ") ip_port = ip_port.split(":") ip = ip_port[0] port = ip_port[1] except: return await utils.answer(message, self.strings["no_args"].format(self.get_prefix(), "wproxy", "[протокол] [айпи:порт]")) await utils.answer(message, self.strings['checking_proxy']) try: async with aiohttp.ClientSession() as session: async with session.get('http://example.com', proxy=f"{protocol}://{ip}:{port}", timeout=5) as res: if res.status == 200: return await utils.answer(message, f""" Прокси работает!""") else: return await utils.answer(message, self.strings['not_work_proxy']) except: return await utils.answer(message, self.strings['not_work_proxy'])