CoolFace
Apppublic

DavidShel/MonarchFiles

sourceHugging Faceapache-2.0updated 5mo agoView on Hugging Face
0likes
main.py184 linesDownload Raw Back to root
1import asyncio2import logging3from aiogram import Bot, Dispatcher, types, F4from aiogram.filters import Command5from aiogram.utils.keyboard import InlineKeyboardBuilder6from aiogram.client.session.aiohttp import AiohttpSession7 8BOT_TOKEN = "8708277591:AAG_o5yrRnvzGM6OllsPobgpXnPeMLXOBhU"9CHANNEL_ID = -100240042746610PRIVATE_STORAGE_ID = -100372058240111CHANNEL_URL = "https://t.me/+Nw7GlD5f_y85ZTJi"12 13session = AiohttpSession()14bot = Bot(token=BOT_TOKEN, session=session)15dp = Dispatcher()16logging.basicConfig(level=logging.INFO)17 18VIDEO_DB = {19    "s5_0": {"🇷🇺 Русский дубляж": 3},20    "s5_1": {"🇷🇺 Русский дубляж": 5},21    "s5_2": {"🇷🇺 Русский дубляж": 6},22    "s5_3": {"🇷🇺 Русский дубляж": 7},23    "s5_4": {"🇷🇺 Русский дубляж": 8},24    "s5_5": {"🇷🇺 Русский дубляж": 9},25    "s5_6": {"🇷🇺 Русский дубляж": 10},26    "s5_7": {"🇷🇺 Русский дубляж": 11},27    "s5_8": {"🇷🇺 Русский дубляж": 12},28    "s5_9": {"🇷🇺 Русский дубляж": 13},29    "s5_10": {"🇷🇺 Русский дубляж": 14},30    "s5_11": {"🇷🇺 Русский дубляж": 15},31    "s5_12": {"🇷🇺 Русский дубляж": 18},32    "s5_13": {"🇷🇺 Русский дубляж": 17},33    "s5_14": {"🇷🇺 Русский дубляж": 16},34    "s5_15": {"🇷🇺 Русский дубляж": 19},35    "s5_16": {"🇷🇺 Русский дубляж": 20},36    "s5_17": {"🇷🇺 Русский дубляж": 21},37    "s5_18": {"🇷🇺 Русский дубляж": 22},38    "s5_19": {"🇷🇺 Русский дубляж": 23},39    "s5_20": {"🇷🇺 Русский дубляж": 24},40    "s5_21": {"🇷🇺 Русский дубляж": 25},41    "s5_22": {"🇷🇺 Русский дубляж": 26},42    "s5_23": {"🇷🇺 Русский дубляж": 27},43    "s5_24": {"🇷🇺 Русский дубляж": 28},44    "s5_25": {"🇷🇺 Русский дубляж": 29},45    "s5_26": {"🇷🇺 Русский дубляж": 30},46    "spec_0": {"🇷🇺 Русский дубляж": 32},47    "spec_1": {"🇷🇺 Русский дубляж": 31},48    "spec_2": {"🇷🇺 Русский дубляж": 33},49 50    "s6_0": {"🇷🇺 Русский дубляж": 34},51    "s6_1": {"🇷🇺 Русский дубляж": 35},52    "s6_2": {"🇷🇺 Русский дубляж": 36},53    "s6_3": {"🇷🇺 Русский дубляж": 37},54    "s6_4": {"🇷🇺 Русский дубляж": 38},55    "s6_5": {"🇷🇺 Русский дубляж": 44},56    "s6_6": {"🇷🇺 Русский дубляж": 45},   57    "s6_7": {"🇷🇺 Озвучка Юпикс": 39},58    "s6_8": {"🇷🇺 Русский дубляж": 46},59    "s6_9": {"🇷🇺 Русский дубляж": 47},60    "s6_10": {"🇷🇺 Русский дубляж": 40},61    "s6_11": {"🇷🇺 Русский дубляж": 48},62    "s6_12": {"🇷🇺 Русский дубляж": 49},63    "s6_13": {"🇷🇺 Озвучка Юпикс": 41},64    "s6_14": {"🇷🇺 Русский дубляж": 50},65    "s6_15": {"🇷🇺 Русский дубляж": 51},66    "s6_16": {"🇷🇺 Озвучка Юпикс": 52},67    "s6_18": {"🇷🇺 Озвучка Юпикс": 53},68    "s6_19": {"🇷🇺 Озвучка Юпикс": 42},69    "s6_20": {"🇫🇷 Французский дубляж": 55},70    "s6_21": {"🇷🇺 Озвучка Юпикс": 43},71    "s6_22": {"🇷🇺 Озвучка Юпикс": 54},72}73 74S5_EPS = [75    "Эволюция", "Умножение", "Разрушение", "Ликование", "Иллюзия", "Решительность",76    "Страсть", "Воссоединение", "Восторг", "Передача (Выбор Квами - Часть 1)", "Сгорание (Выбор Квами - Часть 2)",77    "Совершенство", "Перемещение", "Насмешка", "Интуиция", "Защита", "Обожание",78    "Эмоция", "Притворство", "Откровение", "Противостояние", "Сговор", "Революция",79    "Воплощение", "Устройство (Последний День - Часть 1)", "Воссоздание (Последний День - Часть 2)", "Действие"80]81 82S6_EPS = [83    "Королева Климата", "Художник-Злюка", "Сублимация", "Папа-Коп", "Деды-Оборотни",84    "Спящая Сирена", "Каменный Бык", "Вампигами", "Месье Агрест", "Тёмный Замок",85    "Разоблачитель", "Исцелитель", "Якши Годзен", "Памперсайзер", "Выпрямительница",86    "Ноэ", "Фея сладких снов", "Пачкуны", "РеДжинерация", "Сердце-Целительница",87    "Скованные титаны", "Леди Хаос", "Грустнанси", "Королева Страхвиля",88    "Секретный протокол", "Немезида"89]90 91SPECIALS = ["Леди Баг и Супер Кот: Париж, истории о Токси Баг и Когте Нуаре", "Леди Баг и Супер Кот: Лондон, на краю времени", "Леди Баг и Супер Кот: Токио, Звёздный Отряд"]92 93async def check_sub(user_id: int):94    try:95        member = await bot.get_chat_member(chat_id=CHANNEL_ID, user_id=user_id)96        return member.status in ["member", "administrator", "creator"]97    except:98        return False99 100def main_menu_kb():101    builder = InlineKeyboardBuilder()102    builder.row(types.InlineKeyboardButton(text="🎬 5 сезон:", callback_data="list_s5"))103    builder.row(types.InlineKeyboardButton(text="🎬 6 сезон:", callback_data="list_s6"))104    builder.row(types.InlineKeyboardButton(text="✨ Спешелы:", callback_data="list_spec"))105    return builder.as_markup()106 107@dp.message(Command("start"))108async def start_cmd(message: types.Message):109    if await check_sub(message.from_user.id):110        await message.answer("🍿 Архив Монарха приветствует тебя!\nВыбери раздел:", reply_markup=main_menu_kb(), parse_mode="Markdown")111    else:112        builder = InlineKeyboardBuilder()113        builder.row(types.InlineKeyboardButton(text="📢 Подписаться", url=CHANNEL_URL))114        builder.row(types.InlineKeyboardButton(text="🔄 Проверить подписку", callback_data="recheck"))115        await message.answer("❌ Доступ закрыт!\nПодпишись на канал.", reply_markup=builder.as_markup())116@dp.callback_query(F.data.startswith("list_"))117async def show_list(callback: types.CallbackQuery):118    if not await check_sub(callback.from_user.id):119        await callback.answer("⚠️ Сначала подпишись!", show_alert=True)120        return121 122    mode = callback.data.split("_")[1]123    builder = InlineKeyboardBuilder()124    125    if mode == "s5": items, prefix, title = S5_EPS, "s5", "5 Сезон"126    elif mode == "s6": items, prefix, title = S6_EPS, "s6", "6 Сезон"127    else: items, prefix, title = SPECIALS, "spec", "Спешелы"128 129    for i, name in enumerate(items):130        builder.add(types.InlineKeyboardButton(text=f"{i+1}. {name}", callback_data=f"opt_{prefix}_{i}"))131    132    builder.adjust(1)133    builder.row(types.InlineKeyboardButton(text="⬅️ Назад", callback_data="to_main"))134    await callback.message.edit_text(f"📂 {title}:", reply_markup=builder.as_markup(), parse_mode="Markdown")135 136@dp.callback_query(F.data.startswith("opt_"))137async def select_option(callback: types.CallbackQuery):138    episode_key = callback.data.replace("opt_", "")139    options = VIDEO_DB.get(episode_key, {})140 141    if not options:142        await callback.answer("⏳ Этот эпизод ещё не вышел, подпишитесь на новостной канал «Monarch Files 🍿», чтобы не пропустить!", show_alert=True)143        return144 145    builder = InlineKeyboardBuilder()146    for label, msg_id in options.items():147        builder.add(types.InlineKeyboardButton(text=label, callback_data=f"get_{msg_id}"))148    149    season_prefix = episode_key.split("_")[0]150    builder.adjust(1)151    builder.row(types.InlineKeyboardButton(text="⬅️ Назад к списку", callback_data=f"list_{season_prefix}"))152    await callback.message.edit_text("🌍 Выбери вариант озвучки:", reply_markup=builder.as_markup(), parse_mode="Markdown")153 154@dp.callback_query(F.data.startswith("get_"))155async def send_custom_video(callback: types.CallbackQuery):156    msg_id = int(callback.data.replace("get_", ""))157    try:158        await bot.copy_message(159            chat_id=callback.message.chat.id,160            from_chat_id=PRIVATE_STORAGE_ID,161            message_id=msg_id162        )163        await callback.answer()164    except Exception as e:165        logging.error(f"Ошибка копирования: {e}")166        await callback.answer("❌ Ошибка: серия не найдена в хранилище.", show_alert=True)167 168@dp.callback_query(F.data == "to_main")169async def to_main(callback: types.CallbackQuery):170    await callback.message.edit_text("🍿 Файлы Монарха:", reply_markup=main_menu_kb(), parse_mode="Markdown")171 172@dp.callback_query(F.data == "recheck")173async def recheck(callback: types.CallbackQuery):174    if await check_sub(callback.from_user.id):175        await callback.message.delete()176        await start_cmd(callback.message)177    else:178        await callback.answer("❌ Подписка не найдена!", show_alert=True)179 180async def run():181    await dp.start_polling(bot)182 183if __name__ == "__main__":184    asyncio.run(run())