修复napcat插件

This commit is contained in:
Windpicker-owo
2025-08-28 22:04:17 +08:00
parent 51075c7dd9
commit 268f65903c
5 changed files with 38 additions and 26 deletions

View File

@@ -0,0 +1 @@
PLUGIN_NAME = "napcat_adapter"

View File

@@ -2,15 +2,16 @@ from enum import Enum
class NapcatEvent(Enum):
# napcat插件事件枚举类
ON_RECEIVED_TEXT = "napcat_on_received_text" # 接收到文本消息
ON_RECEIVED_FACE = "napcat_on_received_face" # 接收到表情消息
ON_RECEIVED_REPLY = "napcat_on_received_reply" # 接收到回复消息
ON_RECEIVED_IMAGE = "napcat_on_received_image" # 接收到图像消息
ON_RECEIVED_RECORD = "napcat_on_received_record" # 接收到语音消息
ON_RECEIVED_VIDEO = "napcat_on_received_video" # 接收到视频消息
ON_RECEIVED_AT = "napcat_on_received_at" # 接收到at消息
ON_RECEIVED_DICE = "napcat_on_received_dice" # 接收到骰子消息
ON_RECEIVED_SHAKE = "napcat_on_received_shake" # 接收到屏幕抖动消息
ON_RECEIVED_JSON = "napcat_on_received_json" # 接收到JSON消息
ON_RECEIVED_RPS = "napcat_on_received_rps" # 接收到魔法猜拳消息
ON_FRIEND_INPUT = "napcat_on_friend_input" # 好友正在输入
class ON_RECEIVED(Enum):
TEXT = "napcat_on_received_text" # 接收到文本消息
FACE = "napcat_on_received_face" # 接收到表情消息
REPLY = "napcat_on_received_reply" # 接收到回复消息
IMAGE = "napcat_on_received_image" # 接收到图像消息
RECORD = "napcat_on_received_record" # 接收到语音消息
VIDEO = "napcat_on_received_video" # 接收到视频消息
AT = "napcat_on_received_at" # 接收到at消息
DICE = "napcat_on_received_dice" # 接收到骰子消息
SHAKE = "napcat_on_received_shake" # 接收到屏幕抖动消息
JSON = "napcat_on_received_json" # 接收到JSON消息
RPS = "napcat_on_received_rps" # 接收到魔法猜拳消息
FRIEND_INPUT = "napcat_on_friend_input" # 好友正在输入

View File

@@ -2,6 +2,8 @@ import sys
import asyncio
import json
import websockets as Server
from . import event_types,CONSTS
from typing import List, Tuple
from src.plugin_system import BasePlugin, BaseEventHandler, register_plugin, EventType, ConfigField, BaseAction, ActionActivationType
@@ -98,7 +100,7 @@ class LauchNapcatAdapterHandler(BaseEventHandler):
@register_plugin
class NapcatAdapterPlugin(BasePlugin):
plugin_name = "napcat_adapter"
plugin_name = CONSTS.PLUGIN_NAME
enable_plugin: bool = True
dependencies: List[str] = [] # 插件依赖列表
python_dependencies: List[str] = [] # Python包依赖列表
@@ -119,7 +121,10 @@ class NapcatAdapterPlugin(BasePlugin):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
for e in event_types.NapcatEvent.ON_RECEIVED:
event_manager.register_event(e ,allowed_triggers=[self.plugin_name])
def get_plugin_components(self):
components = []
if self.get_config("plugin.enabled",""):

View File

@@ -1,6 +1,8 @@
from ...event_types import NapcatEvent
from src.plugin_system.core.event_manager import event_manager
from src.common.logger import get_logger
from ...CONSTS import PLUGIN_NAME
logger = get_logger("napcat_adapter")
from ..config import global_config
@@ -329,14 +331,14 @@ class MessageHandler:
case RealMessageType.text:
ret_seg = await self.handle_text_message(sub_message)
if ret_seg:
await event_manager.trigger_event(NapcatEvent.ON_RECEIVED_TEXT,message_seg=ret_seg)
await event_manager.trigger_event(NapcatEvent.ON_RECEIVED.TEXT,plugin_name=PLUGIN_NAME,message_seg=ret_seg)
seg_message.append(ret_seg)
else:
logger.warning("text处理失败")
case RealMessageType.face:
ret_seg = await self.handle_face_message(sub_message)
if ret_seg:
await event_manager.trigger_event(NapcatEvent.ON_RECEIVED_FACE,message_seg=ret_seg)
await event_manager.trigger_event(NapcatEvent.ON_RECEIVED.FACE,plugin_name=PLUGIN_NAME,message_seg=ret_seg)
seg_message.append(ret_seg)
else:
logger.warning("face处理失败或不支持")
@@ -344,7 +346,7 @@ class MessageHandler:
if not in_reply:
ret_seg = await self.handle_reply_message(sub_message)
if ret_seg:
await event_manager.trigger_event(NapcatEvent.ON_RECEIVED_REPLY,message_seg=ret_seg)
await event_manager.trigger_event(NapcatEvent.ON_RECEIVED.REPLY,plugin_name=PLUGIN_NAME,message_seg=ret_seg)
seg_message += ret_seg
else:
logger.warning("reply处理失败")
@@ -352,7 +354,7 @@ class MessageHandler:
logger.debug(f"开始处理图片消息段")
ret_seg = await self.handle_image_message(sub_message)
if ret_seg:
await event_manager.trigger_event(NapcatEvent.ON_RECEIVED_IMAGE,message_seg=ret_seg)
await event_manager.trigger_event(NapcatEvent.ON_RECEIVED.IMAGE,plugin_name=PLUGIN_NAME,message_seg=ret_seg)
seg_message.append(ret_seg)
logger.debug(f"图片处理成功,添加到消息段")
else:
@@ -361,7 +363,7 @@ class MessageHandler:
case RealMessageType.record:
ret_seg = await self.handle_record_message(sub_message)
if ret_seg:
await event_manager.trigger_event(NapcatEvent.ON_RECEIVED_RECORD,message_seg=ret_seg)
await event_manager.trigger_event(NapcatEvent.ON_RECEIVED.RECORD,plugin_name=PLUGIN_NAME,message_seg=ret_seg)
seg_message.clear()
seg_message.append(ret_seg)
break # 使得消息只有record消息
@@ -370,7 +372,7 @@ class MessageHandler:
case RealMessageType.video:
ret_seg = await self.handle_video_message(sub_message)
if ret_seg:
await event_manager.trigger_event(NapcatEvent.ON_RECEIVED_VIDEO,message_seg=ret_seg)
await event_manager.trigger_event(NapcatEvent.ON_RECEIVED.VIDEO,plugin_name=PLUGIN_NAME,message_seg=ret_seg)
seg_message.append(ret_seg)
else:
logger.warning("video处理失败")
@@ -381,28 +383,28 @@ class MessageHandler:
raw_message.get("group_id"),
)
if ret_seg:
await event_manager.trigger_event(NapcatEvent.ON_RECEIVED_AT,message_seg=ret_seg)
await event_manager.trigger_event(NapcatEvent.ON_RECEIVED.AT,plugin_name=PLUGIN_NAME,message_seg=ret_seg)
seg_message.append(ret_seg)
else:
logger.warning("at处理失败")
case RealMessageType.rps:
ret_seg = await self.handle_rps_message(sub_message)
if ret_seg:
await event_manager.trigger_event(NapcatEvent.ON_RECEIVED_RPS,message_seg=ret_seg)
await event_manager.trigger_event(NapcatEvent.ON_RECEIVED.RPS,plugin_name=PLUGIN_NAME,message_seg=ret_seg)
seg_message.append(ret_seg)
else:
logger.warning("rps处理失败")
case RealMessageType.dice:
ret_seg = await self.handle_dice_message(sub_message)
if ret_seg:
await event_manager.trigger_event(NapcatEvent.ON_RECEIVED_DICE,message_seg=ret_seg)
await event_manager.trigger_event(NapcatEvent.ON_RECEIVED.DICE,plugin_name=PLUGIN_NAME,message_seg=ret_seg)
seg_message.append(ret_seg)
else:
logger.warning("dice处理失败")
case RealMessageType.shake:
ret_seg = await self.handle_shake_message(sub_message)
if ret_seg:
await event_manager.trigger_event(NapcatEvent.ON_RECEIVED_SHAKE,message_seg=ret_seg)
await event_manager.trigger_event(NapcatEvent.ON_RECEIVED.SHAKE,plugin_name=PLUGIN_NAME,message_seg=ret_seg)
seg_message.append(ret_seg)
else:
logger.warning("shake处理失败")
@@ -425,7 +427,7 @@ class MessageHandler:
case RealMessageType.json:
ret_seg = await self.handle_json_message(sub_message)
if ret_seg:
await event_manager.trigger_event(NapcatEvent.ON_RECEIVED_JSON,message_seg=ret_seg)
await event_manager.trigger_event(NapcatEvent.ON_RECEIVED.JSON,plugin_name=PLUGIN_NAME,message_seg=ret_seg)
seg_message.append(ret_seg)
else:
logger.warning("json处理失败")

View File

@@ -6,6 +6,7 @@ from typing import Tuple, Optional
from src.common.logger import get_logger
logger = get_logger("napcat_adapter")
from ..config import global_config
from ..config.features_config import features_manager
from ..database import BanUser, db_manager, is_identical
@@ -23,6 +24,8 @@ from ..utils import (
read_ban_list,
)
from ...CONSTS import PLUGIN_NAME
notice_queue: asyncio.Queue[MessageBase] = asyncio.Queue(maxsize=100)
unsuccessful_notice_queue: asyncio.Queue[MessageBase] = asyncio.Queue(maxsize=3)
@@ -118,7 +121,7 @@ class NoticeHandler:
case NoticeType.Notify.input_status:
from src.plugin_system.core.event_manager import event_manager
from ...event_types import NapcatEvent
await event_manager.trigger_event(NapcatEvent.ON_FRIEND_INPUT)
await event_manager.trigger_event(NapcatEvent.ON_RECEIVED.FRIEND_INPUT,plugin_name=PLUGIN_NAME)
case _:
logger.warning(f"不支持的notify类型: {notice_type}.{sub_type}")
case NoticeType.group_ban: