Исходник FuntimeEvent Bot(minecraft)

kqkq1953

Новичок
Автор темы
3
1
Бот который покажет текущие ивенты на майнкрафт проекте funtime
этому коду 2 месяца
Python:
import asyncio
from aiogram import Bot, Dispatcher, types
from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton, ReplyKeyboardMarkup, KeyboardButton
from aiogram.filters.command import Command
import requests
import json
import logging

bot = Bot(token='botfather')
dp = Dispatcher()
CHANNEL_ID = "id and @"

def create_subscription_keyboard():
    keyboard = InlineKeyboardMarkup(inline_keyboard=[
        [InlineKeyboardButton(text="Подписаться на канал", url=f"https://t.me/{CHANNEL_ID[1:]}")],
        [InlineKeyboardButton(text="Проверить подписку", callback_data="check_subscription")]
    ])
    return keyboard

def create_check_events_keyboard():
    keyboard = InlineKeyboardMarkup(inline_keyboard=[
        [InlineKeyboardButton(text="Проверить события", callback_data="check_events")]
    ])
    return keyboard

def create_main_keyboard():
    keyboard = ReplyKeyboardMarkup(
        keyboard=[
            [KeyboardButton(text="Телеграм Канал"), KeyboardButton(text="Текущие Ивенты")]
        ],
        resize_keyboard=True
    )
    return keyboard

async def check_subscription(user_id: int) -> bool:
    try:
        member = await bot.get_chat_member(CHANNEL_ID, user_id)
        return member.status in ['member', 'administrator', 'creator']
    except:
        return False

async def fetch_events():
    try:
        url = "https://cheathub.tech/api/telegram-data"
        headers = {
            'Cookie': 'cookie'
        }
        
        response = requests.get(url, headers=headers)
        response.encoding = 'utf-8'
        data = response.text.encode('utf-8').decode('utf-8')
        
        json_data = json.loads(data)
        events = json_data.get('events', [])
        
        current_events = []
        upcoming_events = []
        
        for event in events:
            event_type = event.get('type', '').replace('❄️ Снежная бойня', '🚀 Адская резня')
            status = event.get('status', '')
            server = event.get('server', '')
            location = event.get('location', '')
            loot_level = event.get('lootLevel', '')
            
            location_text = location
            if not location or location.strip() == '':
                location_text = "Координаты пока не доступны"
            elif len(location) == 4:
                location_text = location[1:-1]
            
            loot_level_text = loot_level
            if not loot_level or loot_level.strip() == '':
                loot_level_text = "Информация о луте пока не доступна"
                
            formatted_event = f"*Тип:* {event_type}\n*Статус:* {status}\n*Сервер:* {server}\n*Локация:* {location_text}\n*Лут:* {loot_level_text}\n{'—'*20}"
            
            if 'начнется через' in status.lower():
                upcoming_events.append(formatted_event)
            elif not any(x in status for x in ['Сундуки открыты!', 'звергается', 'Сундуки открыты', 'Сундук открыт']):
                current_events.append(formatted_event)
        
        return current_events, upcoming_events
    except Exception as e:
        logging.error(f"Error fetching events: {e}")
        return [], []

@dp.message(Command("start"))
async def cmd_start(message: types.Message):
    if await check_subscription(message.from_user.id):
        welcome_text = "Привет! Я бот для отслеживания Funtime событий.\n"
        await message.reply(welcome_text, reply_markup=create_main_keyboard())
    else:
        text = "Привет! Для использования бота необходимо подписаться на наш канал."
        await message.reply(text, reply_markup=create_subscription_keyboard())

@dp.message(lambda message: message.text in ["Телеграм Канал", "Текущие Ивенты"])
async def handle_events_buttons(message: types.Message):
    if not await check_subscription(message.from_user.id):
        text = "Для использования бота необходимо подписаться на наш канал."
        await message.reply(text, reply_markup=create_subscription_keyboard())
        return

    current_events, upcoming_events = await fetch_events()
    
    if message.text == "Телеграм Канал":
        if upcoming_events:
            combined_message = "\n\n".join(upcoming_events)
            await message.answer(combined_message, parse_mode="Markdown")
        else:
            await message.answer("Телеграм Канал: @ftevent_bot_kanal")
    
    elif message.text == "Текущие Ивенты":
        if current_events:
            combined_message = "\n\n".join(current_events)
            await message.answer(combined_message, parse_mode="Markdown")
        else:
            await message.answer("На данный момент нет текущих событий.")

@dp.message(Command("events"))
async def cmd_events(message: types.Message):
    if not await check_subscription(message.from_user.id):
        text = "Для использования бота необходимо подписаться на наш канал."
        await message.reply(text, reply_markup=create_subscription_keyboard())
        return

    current_events, upcoming_events = await fetch_events()
    all_events = current_events + upcoming_events
    
    if all_events:
        combined_message = "\n\n".join(all_events)
        await message.answer(combined_message, parse_mode="Markdown")
    else:
        await message.answer("На данный момент нет активных событий.")

@dp.callback_query(lambda c: c.data == "check_subscription")
async def callback_check_subscription(callback_query: types.CallbackQuery):
    if await check_subscription(callback_query.from_user.id):
        await callback_query.message.delete()
        welcome_text = "Спасибо за подписку! Теперь вы можете использовать бота.\n\nВыберите тип событий:"
        await callback_query.message.answer(welcome_text, reply_markup=create_main_keyboard())
    else:
        await callback_query.answer("Вы не подписались на канал!", show_alert=True)

@dp.callback_query(lambda c: c.data == "check_events")
async def callback_check_events(callback_query: types.CallbackQuery):
    if not await check_subscription(callback_query.from_user.id):
        text = "Для использования бота необходимо подписаться на наш канал."
        await callback_query.message.answer(text, reply_markup=create_subscription_keyboard())
        return

    current_events, upcoming_events = await fetch_events()
    all_events = current_events + upcoming_events
    
    if all_events:
        combined_message = "\n\n".join(all_events)
        await callback_query.message.answer(combined_message, parse_mode="Markdown")
    else:
        await callback_query.message.answer("На данный момент нет активных событий.")
    
    await callback_query.answer()

async def main():
    logging.basicConfig(level=logging.INFO)
    await dp.start_polling(bot)

if __name__ == "__main__":
    asyncio.run(main())
чтобы получить cookie нужно зайти на сайт cheathub.tech(noad) зарегать аккаунт и сделать все как на видео
после нужно вставить свои куки на 46 строчке и еще поменять токен бота и айди канала и бота нужно будет добавить в канал
обязательную подписку можно вырезать