# █▀▀ ▄▀█ █▀▄▀█ █▀█ █▀▄ █▀
# █▀░ █▀█ █░▀░█ █▄█ █▄▀ ▄█
# 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'])