Бот который покажет текущие ивенты на майнкрафт проекте funtime
этому коду 2 месяца
чтобы получить cookie нужно зайти на сайт cheathub.tech(noad) зарегать аккаунт и сделать все как на видео
после нужно вставить свои куки на 46 строчке и еще поменять токен бота и айди канала и бота нужно будет добавить в канал
обязательную подписку можно вырезать
этому коду 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())
обязательную подписку можно вырезать