zhenxun_bot/zhenxun/utils/withdraw_manage.py
BalconyJH bc5a9c4fcc
Develop: 完全使用 ruff 替代 isort 与 black (#1757)
* 🚨 完全使用 ruff 替代 isort 与 black

* 🚨 ruff lint&format
2024-12-10 19:49:11 +08:00

112 lines
3.2 KiB
Python

import asyncio
from nonebot.adapters import Bot
# from nonebot.adapters.discord import Bot as DiscordBot
# from nonebot.adapters.dodo import Bot as DodoBot
# from nonebot.adapters.kaiheila import Bot as KaiheilaBot
from nonebot.adapters.onebot.v11 import Bot as v11Bot
from nonebot.adapters.onebot.v12 import Bot as v12Bot
from nonebot_plugin_session import EventSession
from ruamel.yaml.comments import CommentedSeq
from zhenxun.services.log import logger
class WithdrawManager:
_data = {} # noqa: RUF012
_index = 0
@classmethod
def check(cls, session: EventSession, withdraw_time: tuple[int, int]) -> bool:
"""配置项检查
参数:
session: Session
withdraw_time: 配置项数据, (0, 1)
返回:
bool: 是否允许撤回
"""
if withdraw_time[0] and withdraw_time[0] > 0:
if withdraw_time[1] == 2:
return True
if withdraw_time[1] == 1 and (session.id2 or session.id3):
return True
if withdraw_time[1] == 0 and not session.id2 and not session.id3:
return True
return False
@classmethod
def append(cls, bot: Bot, message_id: str | int, time: int):
"""添加消息撤回
参数:
bot: Bot
message_id: 消息Id
time: 延迟时间
"""
cls._data[cls._index] = (
bot,
message_id,
time,
)
cls._index += 1
@classmethod
def remove(cls, index: int):
"""移除
参数:
index: index
"""
if index in cls._data:
del cls._data[index]
@classmethod
async def withdraw_message(
cls,
bot: Bot,
message_id: str | int,
time: int | tuple[int, int] | None = None,
session: EventSession | None = None,
):
"""消息撤回
参数:
bot: Bot
message_id: 消息Id
time: 延迟时间
"""
if time:
gid = None
_time = 1
if isinstance(time, tuple | CommentedSeq):
if time[0] == 0:
return
if session:
gid = session.id3 or session.id2
if not gid and int(time[1]) not in [0, 2]:
return
if gid and int(time[1]) not in [1, 2]:
return
_time = time[0]
else:
_time = time
logger.debug(
f"将在 {_time}秒 内撤回消息ID: {message_id}", "WithdrawManager"
)
await asyncio.sleep(_time)
if isinstance(bot, v11Bot):
logger.debug(f"v11Bot 撤回消息ID: {message_id}", "WithdrawManager")
await bot.delete_msg(message_id=int(message_id))
elif isinstance(bot, v12Bot):
logger.debug(f"v12Bot 撤回消息ID: {message_id}", "WithdrawManager")
await bot.delete_message(message_id=str(message_id))
# elif isinstance(bot, KaiheilaBot):
# pass
# elif isinstance(bot, DodoBot):
# pass
# elif isinstance(bot, DiscordBot):
# pass