import os import random import asyncio from time import time from coffeehouse.api import API from coffeehouse.lydia import LydiaAI, Session from coffeehouse.exception import CoffeeHouseError from pyrogram.errors.exceptions.bad_request_400 import PeerIdInvalid from petercord import petercord, get_collection, Message, filters, pool from petercord.utils import get_file_id_of_media LOGGER = petercord.getCLogger(__name__) LYDIA_CHATS = get_collection("LYDIA_CHATS") CH_LYDIA_API = os.environ.get("CH_LYDIA_API", None) CUSTOM_REPLY_CHANNEL = int(os.environ.get("CUSTOM_REPLY_CHANNEL", 0)) if CH_LYDIA_API is not None: LYDIA = LydiaAI(API(CH_LYDIA_API)) ACTIVE_CHATS = {} CUSTOM_REPLIES_IDS = [] QUEUE = asyncio.Queue() LYDIA_API_INFO = """This module uses Lydia AI Powered by CoffeeHouse API created by @Intellivoid. Lydia is a Active Machine Learning Chat Bot. Which can adapt to current user and chat with user on any given topic."""
from urllib.parse import unquote from pyrogram.errors import ChatWriteForbidden, ChannelPrivate, ChatIdInvalid from petercord import petercord, Message, Config, pool, get_collection from petercord.utils import time_formatter API_KEY = os.environ.get("FM_API") API_SECRET = os.environ.get("FM_SECRET") USERNAME = os.environ.get("FM_USERNAME") PASSWORD = pylast.md5(os.environ.get("FM_PASSWORD")) CHAT_IDS = [ int(x) for x in os.environ.get("LASTFM_CHAT_ID", str( Config.LOG_CHANNEL_ID)).split() ] LASTFM_DB = get_collection("LASTFM") NOW_PLAYING = [False, None] async def _init(): global NOW_PLAYING # pylint: disable=global-statement k = await LASTFM_DB.find_one({'_id': "LASTFM"}) if k: NOW_PLAYING[0] = bool(k['data']) def check_creds(func): """ decorator for checking creds """ async def checker(msg: Message): if _check_creds(): await func(msg)
""" To check User's Info, Is Banned or Not """ import json from datetime import datetime import aiohttp import spamwatch from petercord import petercord, Config, Message, get_collection GBAN_USER_BASE = get_collection("GBAN_USER") GMUTE_USER_BASE = get_collection("GMUTE_USER") @petercord.on_cmd("info", about={ 'header': "To check User's info", 'petercord': "{tr}info [for own info]\n" "{tr}info [Username | User Id]\n" "{tr}info [reply to User]" }, allow_via_bot=False) async def info(msg: Message): """ To check User's info """ await msg.edit("`Checking...`") user_id = msg.input_str replied = msg.reply_to_message if not user_id: if replied:
from youtubesearchpython import VideosSearch from pyrogram.raw import functions from pyrogram.types import ( InlineKeyboardMarkup, InlineKeyboardButton, CallbackQuery, Message as RawMessage ) from pyrogram.types.messages_and_media.message import Str from pyrogram.errors import MessageDeleteForbidden from petercord import petercord, Message, pool, filters, get_collection from petercord.utils import time_formatter from petercord.utils.exceptions import StopConversation CHANNEL = petercord.getCLogger(__name__) VC_DB = get_collection("VC_CMDS_TOGGLE") CMDS_FOR_ALL = False MAX_DURATION = int(os.environ.get("MAX_DURATION", 900)) ADMINS = {} PLAYING = False CHAT_NAME = "" CHAT_ID = 0 QUEUE: List[Message] = [] BACK_BUTTON_TEXT = "" CQ_MSG: List[RawMessage] = [] call = GroupCall(petercord, play_on_repeat=False)
ANIME_TEMPLATE = """[{c_flag}]**{romaji}** **ID | MAL ID:** `{idm}` | `{idmal}` ➤ **SOURCE:** `{source}` ➤ **TYPE:** `{formats}` ➤ **GENRES:** `{genre}` ➤ **SEASON:** `{season}` ➤ **EPISODES:** `{episodes}` ➤ **STATUS:** `{status}` ➤ **NEXT AIRING:** `{air_on}` ➤ **SCORE:** `{score}%` 🌟 ➤ **ADULT RATED:** `{adult}` 🎬 {trailer_link} 📖 [Synopsis & More]({synopsis_link})""" SAVED = get_collection("TEMPLATES") # GraphQL Queries. ANIME_QUERY = """ query ($id: Int, $idMal:Int, $search: String, $type: MediaType, $asHtml: Boolean) { Media (id: $id, idMal: $idMal, search: $search, type: $type) { id idMal title { romaji english native } format status description (asHtml: $asHtml)
""" Auto Update Bio """ import time import asyncio from pyrogram.errors import FloodWait from resources.quotes import ENGLISH_QUOTES, HINDI_QUOTES from petercord import petercord, Message, get_collection BIO_UPDATION = False AUTOBIO_TIMEOUT = 300 BIO_QUOTES = ENGLISH_QUOTES USER_DATA = get_collection("CONFIGS") CHANNEL = petercord.getCLogger(__name__) LOG = petercord.getLogger(__name__) async def _init() -> None: global BIO_UPDATION, AUTOBIO_TIMEOUT # pylint: disable=global-statement data = await USER_DATA.find_one({'_id': 'BIO_UPDATION'}) if data: BIO_UPDATION = data['on'] b_t = await USER_DATA.find_one({'_id': 'AUTOBIO_TIMEOUT'}) if b_t: AUTOBIO_TIMEOUT = b_t['data'] @petercord.on_cmd("autobio",
""" auto welcome and left messages """ from petercord import Config, Message, filters, get_collection, petercord WELCOME_COLLECTION = get_collection("welcome") LEFT_COLLECTION = get_collection("left") WELCOME_CHATS = filters.chat([]) LEFT_CHATS = filters.chat([]) CHANNEL = petercord.getCLogger(__name__) async def _init() -> None: async for i in WELCOME_COLLECTION.find({"on": True}): if "mid" not in i: continue WELCOME_CHATS.add(i.get("_id")) async for i in LEFT_COLLECTION.find({"on": True}): if "mid" not in i: continue LEFT_CHATS.add(i.get("_id")) @petercord.on_cmd( "setwelcome", about={ "header": "Creates a welcome message in current chat", "options": { "{fname}": "add first name", "{lname}": "add last name", "{flname}": "add full name", "{uname}": "username",
""" setup AFK mode """ import asyncio import time from random import choice, randint from petercord import Config, Message, filters, get_collection, petercord from petercord.utils import time_formatter CHANNEL = petercord.getCLogger(__name__) SAVED_SETTINGS = get_collection("CONFIGS") AFK_COLLECTION = get_collection("AFK") IS_AFK = False IS_AFK_FILTER = filters.create(lambda _, __, ___: bool(IS_AFK)) REASON = "" TIME = 0.0 USERS = {} async def _init() -> None: global IS_AFK, REASON, TIME # pylint: disable=global-statement data = await SAVED_SETTINGS.find_one({"_id": "AFK"}) if data: IS_AFK = data["on"] REASON = data["data"] TIME = data["time"] if "time" in data else 0 async for _user in AFK_COLLECTION.find(): USERS.update( {_user["_id"]: [_user["pcount"], _user["gcount"], _user["men"]]})
""" setup filters """ import asyncio from typing import Dict from petercord import Message, filters, get_collection, petercord FILTERS_COLLECTION = get_collection("filters") CHANNEL = petercord.getCLogger(__name__) FILTERS_DATA: Dict[int, Dict[str, int]] = {} FILTERS_CHATS = filters.create( lambda _, __, query: query.chat and query.chat.id in FILTERS_DATA ) _SUPPORTED_TYPES = ( ":audio:", ":video:", ":photo:", ":document:", ":sticker:", ":animation:", ":voice:", ":video_note:", ":media:", ":game:", ":contact:", ":location:", ":venue:", ":web_page:", ":poll:", ":via_bot:",
import asyncio from typing import Dict, Tuple from petercord import Config, Message, get_collection, petercord NOTES_COLLECTION = get_collection("notes") CHANNEL = petercord.getCLogger(__name__) NOTES_DATA: Dict[int, Dict[str, Tuple[int, bool]]] = {} def _note_updater(chat_id: int, name: str, message_id: int, is_global: bool) -> None: if chat_id in NOTES_DATA: NOTES_DATA[chat_id].update({name: (message_id, is_global)}) else: NOTES_DATA[chat_id] = {name: (message_id, is_global)} def _note_deleter(chat_id: int, name: str) -> None: if chat_id in NOTES_DATA and name in NOTES_DATA[chat_id]: NOTES_DATA[chat_id].pop(name) if not NOTES_DATA[chat_id]: NOTES_DATA.pop(chat_id) def _get_notes_for_chat(chat_id: int) -> str: out = "" if chat_id in NOTES_DATA: for name, pack in NOTES_DATA[chat_id].items(): mid, is_global = pack
) from petercord import Config, Message, get_collection, petercord _CATEGORY = { "admin": "👨✈️", "fun": "🎨", "misc": "⚙️", "tools": "🧰", "utils": "🗂", "unofficial": "🃏", "temp": "♻️", "custom": "👨", "plugins": "💎", } SAVED_SETTINGS = get_collection("CONFIGS") PRVT_MSGS = {} async def _init() -> None: data = await SAVED_SETTINGS.find_one({"_id": "CURRENT_CLIENT"}) if data: Config.USE_USER_FOR_CLIENT_CHECKS = bool(data["is_user"]) @petercord.on_cmd("help", about={"header": "Guide to use PETERCORD commands"}, allow_channels=False) async def helpme(message: Message, ) -> None: # pylint: disable=missing-function-docstring plugins = petercord.manager.enabled_plugins if not message.input_str: