-
Notifications
You must be signed in to change notification settings - Fork 607
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
13 changed files
with
115 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
from typing import Any | ||
|
||
from nonebot.adapters import Bot | ||
|
||
from zhenxun.services.log import logger | ||
from zhenxun.utils.manager.message_manager import MessageManager | ||
|
||
|
||
@Bot.on_called_api | ||
async def handle_api_result( | ||
bot: Bot, exception: Exception | None, api: str, data: dict[str, Any], result: Any | ||
): | ||
if not exception and api == "send_msg": | ||
try: | ||
if (uid := data.get("user_id")) and (msg_id := result.get("message_id")): | ||
MessageManager.add(str(uid), str(msg_id)) | ||
logger.debug( | ||
f"收集消息id,user_id: {uid}, msg_id: {msg_id}", "msg_hook" | ||
) | ||
except Exception as e: | ||
logger.warning( | ||
f"收集消息id发生错误...data: {data}, result: {result}", "msg_hook", e=e | ||
) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,61 @@ | ||
from nonebot.rule import Rule | ||
from nonebot.adapters import Bot, Event | ||
from nonebot_plugin_uninfo import Uninfo | ||
from nonebot.plugin import PluginMetadata | ||
from nonebot_plugin_alconna.uniseg.tools import reply_fetch | ||
from nonebot_plugin_alconna import Alconna, Arparma, on_alconna | ||
|
||
from zhenxun.services.log import logger | ||
from zhenxun.utils.message import MessageUtils | ||
from zhenxun.utils.platform import PlatformUtils | ||
from zhenxun.configs.utils import PluginExtraData | ||
from zhenxun.utils.manager.message_manager import MessageManager | ||
|
||
__plugin_meta__ = PluginMetadata( | ||
name="消息撤回", | ||
description="撤回自己触发的消息撤回,不允许撤回其他人触发消息的撤回哦", | ||
usage=""" | ||
引用消息 撤回 | ||
""".strip(), | ||
extra=PluginExtraData(author="HibiKier", version="0.1", menu_type="其他").dict(), | ||
) | ||
|
||
|
||
def reply_check() -> Rule: | ||
""" | ||
检查是否存在回复消息 | ||
返回: | ||
Rule: Rule | ||
""" | ||
|
||
async def _rule(bot: Bot, event: Event, session: Uninfo): | ||
if event.get_type() == "message": | ||
return ( | ||
bool(await reply_fetch(event, bot)) | ||
and PlatformUtils.get_platform(session) == "qq" | ||
) | ||
return False | ||
|
||
return Rule(_rule) | ||
|
||
|
||
_matcher = on_alconna(Alconna("撤回"), priority=5, block=True, rule=reply_check()) | ||
|
||
|
||
@_matcher.handle() | ||
async def _(bot: Bot, event: Event, session: Uninfo, arparma: Arparma): | ||
if reply := await reply_fetch(event, bot): | ||
if ( | ||
MessageManager.check(session.user.id, reply.id) | ||
or session.user.id in bot.config.superusers | ||
): | ||
try: | ||
await bot.delete_msg(message_id=reply.id) | ||
logger.info("撤回消息", arparma.header_result, session=session) | ||
except Exception: | ||
await MessageUtils.build_message("撤回失败,可能消息已过期...").send() | ||
else: | ||
await MessageUtils.build_message( | ||
"权限不足,不是你触发的消息不要胡乱撤回哦..." | ||
).send() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
from typing import ClassVar | ||
|
||
|
||
class MessageManager: | ||
data: ClassVar[dict[str, list[str]]] = {} | ||
|
||
@classmethod | ||
def add(cls, uid: str, msg_id: str): | ||
if uid not in cls.data: | ||
cls.data[uid] = [] | ||
cls.data[uid].append(msg_id) | ||
cls.remove_check(uid) | ||
|
||
@classmethod | ||
def check(cls, uid: str, msg_id: str) -> bool: | ||
return msg_id in cls.data.get(uid, []) | ||
|
||
@classmethod | ||
def remove_check(cls, uid: str): | ||
if len(cls.data[uid]) > 200: | ||
cls.data[uid] = cls.data[uid][100:] | ||
|
||
@classmethod | ||
def get(cls, uid: str) -> list[str]: | ||
if uid in cls.data: | ||
return cls.data[uid] | ||
return [] |