import contextlib from os import sep, remove, mkdir from os.path import exists from typing import List, Optional, Union from apscheduler.schedulers.asyncio import AsyncIOScheduler from httpx import AsyncClient from pyrogram import Client as OldClient from pyrogram.types import Chat as OldChat, Message as OldMessage from pyromod.utils.conversation import Conversation from pyromod.utils.errors import AlreadyInConversationError, TimeoutConversationError, ListenerCanceled from sqlitedict import SqliteDict # init folders if not exists("data"): mkdir("data") sqlite = SqliteDict(f"data{sep}data.sqlite", autocommit=True) def get_sudo_list(): return sqlite.get("sudo_list", []) def _status_sudo(): return sqlite.get("sudo_enable", False) def safe_remove(name: str) -> None: with contextlib.suppress(FileNotFoundError): remove(name) class Message(OldMessage): arguments: str parameter: List forum_topic: Optional[bool] = None chat: "Chat" def obtain_message(self) -> Optional[str]: """ Obtains a message from either the reply message or command arguments. """ def obtain_user(self) -> Optional[int]: """ Obtains a user from either the reply message or command arguments. """ async def delay_delete(self, delete_seconds: int = 60) -> Optional[bool]: """ Deletes the message after a specified amount of seconds. """ async def safe_delete(self, revoke: bool = True) -> None: """ Safely deletes the message. """ class Client(OldClient): job: Optional[AsyncIOScheduler] = None async def listen(self, chat_id, filters=None, timeout=None) -> Optional[Message]: """ Listen for a message in a conversation. """ async def ask(self, chat_id, text, filters=None, timeout=None, *args, **kwargs) -> Optional[Message]: """ Ask a message in a conversation. """ def cancel_listener(self, chat_id): """ Cancel the conversation with the given chat_id. """ def cancel_all_listeners(self): """ Cancel all conversations. """ def conversation(self, chat_id: Union[int, str], once_timeout: int = 60, filters=None) -> Optional[Conversation]: """ Initialize a conversation with the given chat_id. """ class Chat(OldChat): is_forum: Optional[bool] = None async def listen(self, chat_id, filters=None, timeout=None) -> Optional[Message]: """ Listen for a message in a conversation. """ async def ask(self, chat_id, text, filters=None, timeout=None, *args, **kwargs) -> Optional[Message]: """ Ask a message in a conversation. """ def cancel_listener(self, chat_id): """ Cancel the conversation with the given chat_id. """