This commit is contained in:
FANJANDA 2025-05-27 00:36:33 +08:00
parent 3d3ff37adf
commit 484980105c
6 changed files with 88 additions and 49 deletions

View file

@ -309,6 +309,23 @@ class Dispatcher:
finally:
for lock in self.locks_list:
lock.release()
if group not in [0, 1, 10]:
await asyncio.sleep(300)
self.remove_all_handler(group)
self.loop.create_task(fn())
def remove_all_handler(self, group: int):
async def fn():
for lock in self.locks_list:
await lock.acquire()
try:
self.groups.pop(group)
except Exception:
pass
finally:
for lock in self.locks_list:
lock.release()
self.loop.create_task(fn())

View file

@ -25,15 +25,15 @@ from pyrogram import types, raw, utils
async def get_chunk(
*,
client: "pyrogram.Client",
chat_id: Union[int, str],
limit: int = 0,
offset: int = 0,
from_message_id: int = 0,
from_date: datetime = utils.zero_datetime(),
min_id: int = 0,
max_id: int = 0
*,
client: "pyrogram.Client",
chat_id: Union[int, str],
limit: int = 0,
offset: int = 0,
from_message_id: int = 0,
from_date: datetime = utils.zero_datetime(),
min_id: int = 0,
max_id: int = 0
):
messages = await client.invoke(
raw.functions.messages.GetHistory(
@ -54,14 +54,14 @@ async def get_chunk(
class GetChatHistory:
async def get_chat_history(
self: "pyrogram.Client",
chat_id: Union[int, str],
limit: int = 0,
offset: int = 0,
offset_id: int = 0,
offset_date: datetime = utils.zero_datetime(),
min_id: int = 0,
max_id: int = 0
self: "pyrogram.Client",
chat_id: Union[int, str],
limit: int = 0,
offset: int = 0,
offset_id: int = 0,
offset_date: datetime = utils.zero_datetime(),
min_id: int = 0,
max_id: int = 0
) -> Optional[AsyncGenerator["types.Message", None]]:
"""Get messages from a chat history.
@ -133,3 +133,16 @@ class GetChatHistory:
if current >= total:
return
async def get_chat_messages(
self: "pyrogram.Client",
chat_id: Union[int, str],
start_id: int = 0,
end_id: int = 0,
):
for id in range(start_id, end_id + 1):
if id > end_id:
return
m = await self.get_messages(chat_id, id)
if not m.empty:
yield m

View file

@ -65,15 +65,17 @@ class InputMediaAudio(InputMedia):
"""
def __init__(
self,
media: Union[str, BinaryIO],
thumb: str = None,
caption: str = "",
parse_mode: Optional["enums.ParseMode"] = None,
caption_entities: List[MessageEntity] = None,
duration: int = 0,
performer: str = "",
title: str = ""
self,
media: Union[str, BinaryIO],
thumb: str = None,
caption: str = "",
parse_mode: Optional["enums.ParseMode"] = None,
caption_entities: List[MessageEntity] = None,
duration: int = 0,
performer: str = "",
title: str = "",
*args,
**kwargs
):
super().__init__(media, caption, parse_mode, caption_entities)

View file

@ -54,12 +54,14 @@ class InputMediaDocument(InputMedia):
"""
def __init__(
self,
media: Union[str, BinaryIO],
thumb: str = None,
caption: str = "",
parse_mode: Optional["enums.ParseMode"] = None,
caption_entities: List[MessageEntity] = None
self,
media: Union[str, BinaryIO],
thumb: str = None,
caption: str = "",
parse_mode: Optional["enums.ParseMode"] = None,
caption_entities: List[MessageEntity] = None,
*args,
**kwargs
):
super().__init__(media, caption, parse_mode, caption_entities)

View file

@ -52,12 +52,15 @@ class InputMediaPhoto(InputMedia):
"""
def __init__(
self,
media: Union[str, BinaryIO],
caption: str = "",
parse_mode: Optional["enums.ParseMode"] = None,
caption_entities: List[MessageEntity] = None,
has_spoiler: bool = None
self,
media: Union[str, BinaryIO],
caption: str = "",
parse_mode: Optional["enums.ParseMode"] = None,
caption_entities: List[MessageEntity] = None,
has_spoiler: bool = None,
*args,
**kwargs
):
super().__init__(media, caption, parse_mode, caption_entities)

View file

@ -70,17 +70,19 @@ class InputMediaVideo(InputMedia):
"""
def __init__(
self,
media: Union[str, BinaryIO],
thumb: str = None,
caption: str = "",
parse_mode: Optional["enums.ParseMode"] = None,
caption_entities: List[MessageEntity] = None,
width: int = 0,
height: int = 0,
duration: int = 0,
supports_streaming: bool = True,
has_spoiler: bool = None,
self,
media: Union[str, BinaryIO],
thumb: str = None,
caption: str = "",
parse_mode: Optional["enums.ParseMode"] = None,
caption_entities: List[MessageEntity] = None,
width: int = 0,
height: int = 0,
duration: int = 0,
supports_streaming: bool = True,
has_spoiler: bool = None,
*args,
**kwargs
):
super().__init__(media, caption, parse_mode, caption_entities)