示例#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."""
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",
""" 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"]]})
""" 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: