fix: delete service message

This commit is contained in:
xtaodada 2024-11-17 21:14:22 +08:00
parent 18b57480a4
commit 18a12f3242
Signed by: xtaodada
GPG Key ID: 4CBB3F4FA8C85659
6 changed files with 22 additions and 21 deletions

View File

@ -1,6 +1,5 @@
import asyncio
import contextlib
from asyncio import sleep
from time import time
from typing import Dict
@ -62,7 +61,7 @@ async def start_verify(client: "Client", chat, user):
)
msg = await cache.get(key2)
if msg:
add_delete_message_id_job(chat.id, msg)
add_delete_message_id_job(chat.id, msg, 1)
await msg_.delay_delete(1)
if not msg_.sticker:
add_ban_chat_member_job(chat.id, user.id)
@ -74,7 +73,7 @@ async def start_verify(client: "Client", chat, user):
except TimeoutConversationError:
msg = await cache.get(key2)
if msg:
add_delete_message_id_job(chat.id, msg)
add_delete_message_id_job(chat.id, msg, 1)
add_ban_chat_member_job(chat.id, user.id)
await log(chat, user, LogAction.FAIL_TIMEOUT)
await ServiceMessage.try_delete(user.id, chat.id)

View File

@ -1,15 +1,12 @@
from pyrogram import filters
from pyrogram.enums import MessageServiceType
from sticker import bot
from sticker.functions.service_message import ServiceMessage
from sticker.single_utils import Client, Message
@bot.on_message(filters.service)
@bot.on_message(filters.new_chat_members, group=2)
async def service_message_handle(_: Client, message: Message):
if message.service != MessageServiceType.NEW_CHAT_MEMBERS:
return
cid = message.chat.id
if message.new_chat_members:
for i in message.new_chat_members:

View File

@ -31,6 +31,7 @@ from ..utils.errors import ListenerCanceled, TimeoutConversationError
pyrogram.errors.ListenerCanceled = ListenerCanceled
LOCK = asyncio.Lock()
DONE = []
DONE_MAP = {}
@patch(pyrogram.client.Client)
@ -96,13 +97,14 @@ class MessageHandler:
global LOCK, DONE
async with LOCK:
listener = client.listening.get(message.chat.id)
if listener:
if listener and DONE_MAP.get(id(self)) == id(listener):
with contextlib.suppress(ValueError):
DONE.remove(listener)
if listener and not listener["future"].done():
del DONE_MAP[id(self)]
if not listener["future"].done():
listener["future"].set_result(message)
return
if listener and listener["future"].done():
if listener["future"].done():
client.clear_listener(message.chat.id, listener["future"])
await self.user_callback(client, message, *args)
@ -116,9 +118,11 @@ class MessageHandler:
result = await listener["filters"](client, update)
if result:
DONE.append(listener)
return result
DONE_MAP[id(self)] = id(listener)
return True
else:
DONE.append(listener)
DONE_MAP[id(self)] = id(listener)
return True
return await self.filters(client, update) if callable(self.filters) else True

View File

@ -21,7 +21,7 @@ root_logger = getLogger()
root_logger.setLevel(DEBUG if Config.DEBUG else CRITICAL)
root_logger.addHandler(logging_handler)
pyro_logger = getLogger("pyrogram")
pyro_logger.setLevel(CRITICAL)
pyro_logger.setLevel(INFO if Config.DEBUG else CRITICAL)
pyro_logger.addHandler(logging_handler)
basicConfig(level=DEBUG if Config.DEBUG else INFO)
logs.setLevel(DEBUG if Config.DEBUG else INFO)

View File

@ -1,9 +1,8 @@
import contextlib
from typing import List
from cashews import cache
from sticker import bot
from sticker.scheduler import add_delete_message_id_job
class ServiceMessage:
@ -22,5 +21,4 @@ class ServiceMessage:
async def try_delete(uid: int, cid: int):
mid = await ServiceMessage.get_cache(uid, cid)
if mid:
with contextlib.suppress(Exception):
await bot.delete_messages(cid, list(mid))
add_delete_message_id_job(cid, list(mid), 1)

View File

@ -1,5 +1,6 @@
import contextlib
import datetime
from typing import Union, List
import pytz
from apscheduler.schedulers.asyncio import AsyncIOScheduler
@ -18,7 +19,7 @@ async def delete_message(message: Message) -> bool:
return False
async def delete_message_id(chat_id: int, message_id: int) -> bool:
async def delete_message_id(chat_id: int, message_id: Union[int, List[int]]) -> bool:
with contextlib.suppress(Exception):
from sticker.bot import bot
@ -45,7 +46,9 @@ async def ban_chat_member(chat_id: int, user_id: int):
return False
def add_delete_message_id_job(chat_id: int, message_id: int, delete_seconds: int = 60):
def add_delete_message_id_job(
chat_id: int, message_id: Union[int, List[int]], delete_seconds: int = 60
):
scheduler.add_job(
delete_message_id,
"date",