| |
|
|
| import math |
| from pyrogram import filters, Client |
| from pyrogram.types import InlineKeyboardMarkup, InlineKeyboardButton, Message |
| from pyrogram.enums.parse_mode import ParseMode |
| from WebStreamer import __version__ |
| from WebStreamer.bot import StreamBot |
| from WebStreamer.server.exceptions import FIleNotFound |
| from WebStreamer.utils.bot_utils import is_user_accepted_tos, validate_user |
| from WebStreamer.vars import Var |
| from WebStreamer.utils.database import Database |
| from WebStreamer.utils.Translation import Language, BUTTON |
|
|
| db = Database(Var.DATABASE_URL, Var.SESSION_NAME) |
|
|
| @StreamBot.on_message(filters.command('start') & filters.private) |
| async def start(_: Client, message: Message): |
| lang = Language(message) |
| if not await validate_user(message, lang): |
| return |
| |
| |
| await message.reply_text( |
| text=lang.START_TEXT.format(message.from_user.mention), |
| parse_mode=ParseMode.HTML, |
| disable_web_page_preview=True, |
| reply_markup=BUTTON.START_BUTTONS |
| ) |
|
|
| @StreamBot.on_message(filters.command("about") & filters.private) |
| async def about(_: Client, message: Message): |
| lang = Language(message) |
| if not await validate_user(message, lang): |
| return |
| await message.reply_text( |
| text=lang.ABOUT_TEXT.format(__version__), |
| disable_web_page_preview=True, |
| reply_markup=BUTTON.ABOUT_BUTTONS |
| ) |
|
|
|
|
| @StreamBot.on_message((filters.command('help')) & filters.private) |
| async def help_handler(_: Client, message: Message): |
| lang = Language(message) |
| if not await validate_user(message, lang): |
| return |
| await message.reply_text( |
| text=lang.HELP_TEXT.format(Var.UPDATES_CHANNEL), |
| parse_mode=ParseMode.HTML, |
| disable_web_page_preview=True, |
| reply_markup=BUTTON.HELP_BUTTONS |
| ) |
|
|
| |
|
|
| @StreamBot.on_message(filters.command('myfiles') & filters.private) |
| async def my_files(_: Client, message: Message): |
| if not await validate_user(message): |
| return |
| user_files, total_files=await db.find_files(message.from_user.id, [1,10]) |
|
|
| file_list=[] |
| async for x in user_files: |
| file_list.append([InlineKeyboardButton(x["file_name"], callback_data=f"myfile_{x['_id']}_{1}")]) |
| if total_files > 10: |
| file_list.append( |
| [ |
| InlineKeyboardButton("<<", callback_data="N/A"), |
| InlineKeyboardButton(f"1/{math.ceil(total_files/10)}", callback_data="N/A"), |
| InlineKeyboardButton(">>", callback_data="userfiles_2") |
| ] |
| ) |
| if not file_list: |
| file_list.append([InlineKeyboardButton("Empty", callback_data="N/A")]) |
| await message.reply_photo(photo=Var.IMAGE_FILEID, |
| caption="Total files: {total_files}", |
| reply_markup=InlineKeyboardMarkup(file_list)) |
|
|
| @StreamBot.on_message(filters.command('tos') & filters.private) |
| async def tos_handler(_: Client, message: Message): |
| if not Var.TOS: |
| await message.reply_text("This bot does not have any terms of service.") |
| return |
| if await is_user_accepted_tos(message): |
| await message.reply_text( |
| Var.TOS, |
| reply_markup=InlineKeyboardMarkup([[InlineKeyboardButton("✅ I accepted the TOS", callback_data="N/A")]]) |
| ) |
|
|
| @StreamBot.on_message(filters.command('info') & filters.private) |
| async def info_handler(_: Client, message: Message): |
| lang = Language(message) |
| if not await validate_user(message, lang): |
| return |
| i_cmd=message.text.split() |
| if (message.from_user.id == Var.OWNER_ID) and (len(i_cmd) > 1): |
| message.from_user.id=int(i_cmd[1]) |
| user = await db.get_user(message.from_user.id) |
| files=await db.total_files(message.from_user.id) |
| links="N/A" |
| if (user.get("Plan") == "Free") and (Var.LINK_LIMIT): |
| links=Var.LINK_LIMIT-files |
| await message.reply_text(lang.INFO_TEXT.format(message.from_user.id, user.get("Plan"), files, links)) |
|
|
| @StreamBot.on_message(filters.command('getfile') & filters.private & filters.user(Var.OWNER_ID)) |
| async def getfile(_: Client, message: Message): |
| if not await validate_user(message): |
| return |
| usr_cmd=message.text.split()[1:] |
| if len(usr_cmd) < 1: |
| return await message.reply_text("Invalid Format\nUsage: `/getfile _id`") |
| for x in usr_cmd: |
| try: |
| myfile = await db.get_file(x) |
| await message.reply_cached_media(myfile['file_id']) |
| except FIleNotFound: |
| await message.reply_text(f"{x} :File Not Found") |
|
|