video-stream/program/start.py

141 lines
4.9 KiB
Python
Raw Normal View History

2021-10-11 03:16:54 +00:00
from datetime import datetime
2021-10-25 21:15:41 +00:00
from sys import version_info
2021-10-11 03:16:54 +00:00
from time import time
2021-10-25 21:15:41 +00:00
from config import (
ALIVE_IMG,
ALIVE_NAME,
BOT_NAME,
BOT_USERNAME,
GROUP_SUPPORT,
OWNER_NAME,
UPDATES_CHANNEL,
)
from program import __version__
from driver.decorators import sudo_users_only
from driver.filters import command
2021-10-11 03:16:54 +00:00
from pyrogram import Client, filters
2021-10-25 21:15:41 +00:00
from pyrogram import __version__ as pyrover
2021-10-25 21:20:03 +00:00
from pytgcalls import (__version__ as pytover)
2021-10-25 21:15:41 +00:00
from pyrogram.types import InlineKeyboardButton, InlineKeyboardMarkup, Message
__major__ = 0
__minor__ = 2
__micro__ = 1
__python_version__ = f"{version_info[0]}.{version_info[1]}.{version_info[2]}"
2021-10-11 03:16:54 +00:00
START_TIME = datetime.utcnow()
START_TIME_ISO = START_TIME.replace(microsecond=0).isoformat()
TIME_DURATION_UNITS = (
2021-10-25 21:15:41 +00:00
("week", 60 * 60 * 24 * 7),
("day", 60 * 60 * 24),
("hour", 60 * 60),
("min", 60),
("sec", 1),
2021-10-11 03:16:54 +00:00
)
async def _human_time_duration(seconds):
if seconds == 0:
2021-10-25 21:15:41 +00:00
return "inf"
2021-10-11 03:16:54 +00:00
parts = []
for unit, div in TIME_DURATION_UNITS:
amount, seconds = divmod(int(seconds), div)
if amount > 0:
2021-10-25 21:15:41 +00:00
parts.append("{} {}{}".format(amount, unit, "" if amount == 1 else "s"))
return ", ".join(parts)
@Client.on_message(
command(["start", f"start@{BOT_USERNAME}"]) & filters.private & ~filters.edited
)
async def start_(client: Client, message: Message):
await message.reply_text(
f"""✨ **Welcome {message.from_user.mention()} !**\n
💭 **[{BOT_NAME}](https://t.me/{BOT_USERNAME}) allows you to play music and video on groups through the new Telegram's video chats!**
💡 **Find out all the Bot's commands and how they work by clicking on the » 📚 Commands button!**
**To know how to use this bot, please click on the » Basic Guide button!**""",
reply_markup=InlineKeyboardMarkup(
[
[
2021-10-11 03:16:54 +00:00
InlineKeyboardButton(
2021-10-25 21:15:41 +00:00
" Add me to your Group ",
url=f"https://t.me/{BOT_USERNAME}?startgroup=true",
)
],
[InlineKeyboardButton("❓ Basic Guide", callback_data="cbhowtouse")],
[
InlineKeyboardButton("📚 Commands", callback_data="cbcmds"),
InlineKeyboardButton("💝 Donate", url=f"https://t.me/{OWNER_NAME}"),
],
[
2021-10-11 03:16:54 +00:00
InlineKeyboardButton(
2021-10-25 21:15:41 +00:00
"👥 Official Group", url=f"https://t.me/{GROUP_SUPPORT}"
),
2021-10-11 03:16:54 +00:00
InlineKeyboardButton(
2021-10-25 21:15:41 +00:00
"📣 Official Channel", url=f"https://t.me/{UPDATES_CHANNEL}"
),
],
[
2021-10-11 03:16:54 +00:00
InlineKeyboardButton(
2021-10-25 21:15:41 +00:00
"🌐 Source Code", url="https://github.com/levina-lab/video-stream"
)
],
]
),
disable_web_page_preview=True,
)
@Client.on_message(
command(["alive", f"alive@{BOT_USERNAME}"]) & filters.group & ~filters.edited
)
async def alive(client: Client, message: Message):
2021-10-11 03:16:54 +00:00
current_time = datetime.utcnow()
uptime_sec = (current_time - START_TIME).total_seconds()
uptime = await _human_time_duration(int(uptime_sec))
2021-10-25 21:15:41 +00:00
keyboard = InlineKeyboardMarkup(
[
2021-10-11 03:16:54 +00:00
[
2021-10-25 21:15:41 +00:00
InlineKeyboardButton("✨ Group", url=f"https://t.me/{GROUP_SUPPORT}"),
InlineKeyboardButton(
"📣 Channel", url=f"https://t.me/{UPDATES_CHANNEL}"
),
2021-10-11 03:16:54 +00:00
]
2021-10-25 21:15:41 +00:00
]
2021-10-11 03:16:54 +00:00
)
2021-10-25 21:20:03 +00:00
alive = f"**Hello {message.from_user.mention()}, i'm {BOT_NAME}**\n\n✨ Bot is working normally\n🍀 My Master: [{ALIVE_NAME}](https://t.me/{OWNER_NAME})\n✨ Bot Version: `v{__version__}`\n🍀 Pyrogram Version: `{pyrover}`\n✨ Python Version: `{__python_version__}`\n🍀 PyTgCalls version: `{pytover}`\n🍀 Uptime Status: `{uptime}`\n\n**Thanks for Adding me here, for playing video & music on your Group video chat** ❤"
2021-10-11 03:16:54 +00:00
2021-10-25 21:15:41 +00:00
await message.reply_photo(
photo=f"{ALIVE_IMG}",
caption=alive,
reply_markup=keyboard,
2021-10-11 03:16:54 +00:00
)
2021-10-25 21:15:41 +00:00
@Client.on_message(command(["ping", f"ping@{BOT_USERNAME}"]) & ~filters.edited)
async def ping_pong(client: Client, message: Message):
start = time()
m_reply = await message.reply_text("pinging...")
delta_ping = time() - start
await m_reply.edit_text("🏓 `PONG!!`\n" f"⚡️ `{delta_ping * 1000:.3f} ms`")
@Client.on_message(command(["uptime", f"uptime@{BOT_USERNAME}"]) & ~filters.edited)
2021-10-11 03:16:54 +00:00
@sudo_users_only
2021-10-25 21:15:41 +00:00
async def get_uptime(client: Client, message: Message):
2021-10-11 03:16:54 +00:00
current_time = datetime.utcnow()
uptime_sec = (current_time - START_TIME).total_seconds()
uptime = await _human_time_duration(int(uptime_sec))
2021-10-25 21:15:41 +00:00
await message.reply_text(
"🤖 bot status:\n"
2021-10-11 03:16:54 +00:00
f"• **uptime:** `{uptime}`\n"
f"• **start time:** `{START_TIME_ISO}`"
)