Пример #1
0
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."""
Пример #2
0
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)
Пример #3
0
""" 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:
Пример #4
0
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)
Пример #5
0
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)
Пример #6
0
""" 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",
Пример #7
0
""" 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",
Пример #8
0
""" 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"]]})
Пример #9
0
""" 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:",
Пример #10
0
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
Пример #11
0
)

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: