Commited backup

This commit is contained in:
2025-07-10 21:02:34 +03:00
parent 952c1001e3
commit da0b80823e
1310 changed files with 254133 additions and 41 deletions

View File

@@ -0,0 +1,343 @@
__version__ = (1, 1, 0)
"""
█▀▄▀█ █▀█ █▀█ █ █▀ █ █ █▀▄▀█ █▀▄▀█ █▀▀ █▀█
█ ▀ █ █▄█ █▀▄ █ ▄█ █▄█ █ ▀ █ █ ▀ █ ██▄ █▀▄
Copyright 2022 t.me/morisummermods
Licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International
"""
# scope: inline_content
# meta developer: @morisummermods
# meta banner: https://i.imgur.com/V0Qhyi0.jpg
# meta pic: https://i.imgur.com/AwKGCQe.png
import logging
from asyncio import sleep
from aiogram.types import InlineQueryResultArticle, InputTextMessageContent
from telethon.tl.functions.channels import JoinChannelRequest
from telethon.tl.types import Message
from telethon.utils import get_display_name
from .. import loader, utils
from ..inline import GeekInlineQuery, rand
logger = logging.getLogger(__name__)
ua = [
"all",
"Кіровоградська_область",
"Попаснянськаериторіальна_громада",
"Бердянський_район",
"Полтавська_область",
"м_Краматорськ_та_Краматорськаериторіальна_громада",
"м_Старокостянтинів_та_Старокостянтинівськаериторіальна_громада",
"Ізюмський_район",
"Покровськаериторіальна_громада",
"Волноваський_район",
"Краматорський_район",
"Київська_область",
"м_Київ",
"Херсонська_область",
"Ніжинський_район",
"Бахмутськаериторіальна_громада",
"м_Креміннаа_Кремінськаериторіальна_громада",
"Рівненська_область",
"Запорізька_область",
"м_Маріуполь_та_Маріупольськаериторіальна_громада",
"м_Рівнеа_Рівненськаериторіальна_громада",
"м_Черкаси_таеркаськаериторіальна_громада",
"Марїнськаериторіальна_громада",
"Сквирськаериторіальна_громада",
"Охтирський_район",
"м_Конотоп_та_Конотопськаериторіальна_громада",
"Вознесенський_район",
"Сарненський_район",
"Миколаївський_район",
"Смілянськаериторіальна_громада",
"Сєвєродонецький_район",
"Гірськаериторіальна_громада",
"Костянтинівськаериторіальна_громада",
"Прилуцький_район",
"м_Пирятин_та_Пирятинськаериторіальна_громада",
"Вишгородськаериторіальна_громада",
"Воскресенськаериторіальна_громада",
"м_Переяслав_таереяславськаериторіальна_громада",
"м_Полтавааолтавськаериторіальна_громада",
"м_Вознесенськ_та_Вознесенськаериторіальна_громада",
"Дружківськаериторіальна_громада",
"Золотоніський_район",
"Макарівськаериторіальна_громада",
"Дубровицькаериторіальна_громада",
"Хмельницька_область",
"Великоновосілківськаериторіальна_громада",
"м_Шосткааосткинськаериторіальна_громада",
"Львівська_область",
"Волинська_область",
"Первомайський_район",
"м_Запоріжжя_та_Запорізькаериторіальна_громада",
"м_Бровари_тароварськаериторіальна_громада",
"Лиманськаериторіальна_громада",
"м_Лисичанськ_та_Лисичанськаериторіальна_громада",
"м_Бориспіль_таориспільськаериторіальна_громада",
"м_Обухів_та_Обухівськаериторіальна_громада",
"Звенигородський_район",
"Роздільнянський_район",
"м_Нікополь_та_Нікопольськаериторіальна_громада",
"м_Першотравенськ_таершотравенськаериторіальна_громада",
"м_Васильків_та_Васильківськаериторіальна_громада",
"Кропивницький_район",
"Шепетівський_район",
"Житомирська_область",
"Вараський_район",
"Болградський_район",
"Закарпатська_область",
"Шосткинський_район",
"Гребінківськаериторіальна_громада",
"Чернівецька_область",
"Синельниківський_район",
"Уманськаериторіальна_громада",
"Олешківськаериторіальна_громада",
"м_Кременчук_та_Кременчуцькаериторіальна_громада",
"Коростенський_район",
"Купянський_район",
"Подільський_район",
"м_Мелітополь_та_Мелітопольськаериторіальна_громада",
"Ізмаїльський_район",
"Вінницька_область",
"м_Славутич_та_Славутицькаериторіальна_громада",
"Бородянськаериторіальна_громада",
"Святогірськаериторіальна_громада",
"Добропільськаериторіальна_громада",
"Черкаський_район",
"Пологівський_район",
"м_Сарни_та_Сарненськаериторіальна_громада",
"Маріупольський_район",
"Лозівський_район",
"Березівський_район",
"Українськаериторіальна_громада",
"м_Охтиркаа_Охтирськаериторіальна_громада",
"Жашківськаериторіальна_громада",
"Житомирський_район",
"Донецький_район",
"м_Кривий_Ріга_Криворізькаериторіальна_громада",
"Радомишльськаериторіальна_громада",
"м_Дніпроа_Дніпровськаериторіальна_громада",
"м_Миколаїв_та_Миколаївськаериторіальна_громада",
"Гостомелськаериторіальна_громада",
"м_Миргород_та_Миргородськаериторіальна_громада",
"Сумська_область",
"Торецькаериторіальна_громада",
"м_Ватутінеа_Ватутінськаериторіальна_громада",
"м_Коростень_та_Коростенськаериторіальна_громада",
"Харківський_район",
"Уманський_район",
"Сумський_район",
"Одеський_район",
"БілгородДністровський_район",
"Тернопільська_область",
"Первомайськаериторіальна_громада",
"м_Первомайськ_таервомайськаериторіальна_громада",
"Чугуївський_район",
"м_Фастів_таастівськаериторіальна_громада",
"Миронівськаериторіальна_громада",
"м_Лубни_таубенськаериторіальна_громада",
"Черкаська_область",
"Луганська_область",
"м_Житомира_Житомирськаериторіальна_громада",
"Новоукраїнський_район",
"м_Словянськ_та_Словянськаериторіальна_громада",
"Чернігівський_район",
"м_Очаків_та_Очаківськаериторіальна_громада",
"Вугледарськаериторіальна_громада",
"м_Сєвєродонецьк_та_Сєвєродонецькаериторіальна_громада",
"Дніпропетровська_область",
"Запорізький_район",
"Широківськаериторіальна_громада",
"Узинськаериторіальна_громада",
"Миколаївська_область",
"Харківська_область",
"НовоградВолинський_район",
"Курахівськаериторіальна_громада",
"м_Рубіжнеа_Рубіжанськаериторіальна_громада",
"Донецька_область",
"м_Суми_та_Сумськаериторіальна_громада",
"м_Білаерквааілоцерківськаериторіальна_громада",
"Голованівський_район",
"Одеська_область",
"Павлоградський_район",
"Чернігівська_область",
"Сватівський_район",
"ІваноФранківська_область",
"Покровський_район",
"Бахмутський_район",
]
class AirAlertMod(loader.Module):
"""🇺🇦 Предупреждение о воздушной тревоге.
Нужно быть подписаным на @air_alert_ua и включены уведомления в вашем боте"""
strings = {"name": "AirAlert"}
async def client_ready(self, client, db) -> None:
self.regions = db.get(self.strings["name"], "regions", [])
self.nametag = db.get(self.strings["name"], "nametag", "")
self.forwards = db.get(self.strings["name"], "forwards", [])
if hasattr(self, "hikka"):
self.me = self._client.tg_id
self.bot_id = self.inline.bot_id
await self.request_join(
"@air_alert_ua", "Required by AirAlert", assure_joined=True
)
return
self.db = db
self.client = client
self.bot_id = (await self.inline.bot.get_me()).id
self.me = (await client.get_me()).id
try:
await client(
JoinChannelRequest(await self.client.get_entity("t.me/air_alert_ua"))
)
except Exception:
logger.error("Can't join t.me/air_alert_ua")
try:
channel = await self.client.get_entity("t.me/morisummermods")
await client(JoinChannelRequest(channel))
except Exception:
logger.error("Can't join morisummermods")
try:
post = (await client.get_messages("@morisummermods", ids=[15]))[0]
await post.react("❤️")
except Exception:
logger.error("Can't react to t.me/morisummermods")
async def alertforwardcmd(self, message: Message) -> None:
"""Перенаправление предупреждений в другие чаты.
Для добавления/удаления введите команду с ссылкой на чат.
Для просмотра чатов введите команду без аргументов
Для установки кастомной таблички введите .alertforward set <text>"""
text = utils.get_args_raw(message)
if text[:3] == "set":
self.nametag = text[4:]
self.db.set(self.strings["name"], "nametag", self.nametag)
return await utils.answer(
message,
f"🏷 <b>Табличка успешно установлена: <code>{self.nametag}</code></b>",
)
if not text:
chats = "<b>Текущие чаты для перенаправления: </b>\n"
for chat in self.forwards:
chats += f"{get_display_name(await self.client.get_entity(chat))}\n"
await utils.answer(message, chats)
return
try:
chat = (await self.client.get_entity(text.replace("https://", ""))).id
except Exception:
await utils.answer(message, "<b>Чат не найден</b>")
return
if chat in self.forwards:
self.forwards.remove(chat)
self.db.set(self.strings["name"], "forwards", self.forwards)
await utils.answer(message, "<b>Чат успешно удален для перенаправления</b>")
else:
self.forwards.append(chat)
self.db.set(self.strings["name"], "forwards", self.forwards)
await utils.answer(
message, "<b>Чат успешно установлен для перенаправления</b>"
)
async def alert_inline_handler(self, query: GeekInlineQuery) -> None:
"""Выбор регионов.
Чтобы получать все предупреждения введите alert all.
Чтобы посмотреть ваши регионы alert my"""
text = query.args
if not text:
result = ua
elif text == "my":
result = self.regions
else:
result = [region for region in ua if text.lower() in region.lower()]
if not result:
await query.e404()
return
res = [
InlineQueryResultArticle(
id=rand(20),
title=(
f"{'' if reg in self.regions else ''}{reg if reg != 'all' else 'Все уведомления'}"
),
description=(
f"Нажмите чтобы {'удалить' if reg in self.regions else 'добавить'}"
if reg != "all"
else (
"🇺🇦 Нажмите чтобы"
f" {'выключить' if 'all' in self.regions else 'включить'} все"
" уведомления"
)
),
input_message_content=InputTextMessageContent(
f"⌛ Редактирование региона <code>{reg}</code>",
parse_mode="HTML",
),
)
for reg in result[:50]
]
await query.answer(res, cache_time=0)
async def watcher(self, message: Message) -> None:
if (
getattr(message, "out", False)
and getattr(message, "via_bot_id", False)
and message.via_bot_id == self.bot_id
and "⌛ Редактирование региона" in getattr(message, "raw_text", "")
):
self.regions = self.db.get(self.strings["name"], "regions", [])
region = message.raw_text[25:]
state = "добавлен"
if region not in self.regions:
self.regions.append(region)
else:
self.regions.remove(region)
state = "удален"
self.db.set(self.strings["name"], "regions", self.regions)
try:
e = await self.client.get_entity("t.me/air_alert_ua")
sub = not e.left
except Exception:
sub = False
n = "\n"
res = f"<b>Регион <code>{region}</code> успешно {state}</b>{n}"
if not sub:
res += (
"<b>НЕ ВЫХОДИ С @air_alert_ua (иначе ничего работать не будет)</b>"
)
if not hasattr(self, "hikka"):
await self.client(
JoinChannelRequest(
await self.client.get_entity("t.me/air_alert_ua")
)
)
await self.inline.form(res, message=message)
if (
getattr(message, "peer_id", False)
and getattr(message.peer_id, "channel_id", 0) == 1766138888
and (
"all" in self.regions
or any(reg in message.raw_text for reg in self.regions)
)
):
for _ in range(3):
await self.inline.bot.send_message(
self.me,
message.text,
parse_mode="HTML",
)
await sleep(1)
for chat in self.forwards:
await self.client.send_message(
chat,
message.text + "\n\n" + self.nametag,
)