Skip to content

Commit

Permalink
Upgrade: go-cqhttp patch
Browse files Browse the repository at this point in the history
- Upgrade go-cqhttp patch
  • Loading branch information
Ailitonia committed Jun 27, 2023
1 parent e840813 commit 5bd2a84
Show file tree
Hide file tree
Showing 7 changed files with 216 additions and 76 deletions.
19 changes: 19 additions & 0 deletions omega_miya/service/gocqhttp_addition_event_patch/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
"""
@Author : Ailitonia
@Date : 2023/3/18 3:15
@FileName : gocqhttp_addition_event_patch
@Project : nonebot2_miya
@Description : Go-cqhttp 事件补丁
@GitHub : https://github.com/Ailitonia
@Software : PyCharm
"""

from .model import GroupCardNoticeEvent, OfflineFileNoticeEvent, ClientStatusNoticeEvent, EssenceNoticeEvent


__all__ = [
'GroupCardNoticeEvent',
'OfflineFileNoticeEvent',
'ClientStatusNoticeEvent',
'EssenceNoticeEvent'
]
150 changes: 150 additions & 0 deletions omega_miya/service/gocqhttp_addition_event_patch/model.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,150 @@
"""
@Author : Ailitonia
@Date : 2023/3/18 3:16
@FileName : model
@Project : nonebot2_miya
@Description : Go-cqhttp addition event model
@GitHub : https://github.com/Ailitonia
@Software : PyCharm
"""

from typing import Type, TypeVar, Literal

from nonebot.adapters.onebot.v11.adapter import Adapter
from nonebot.adapters.onebot.v11.event import Event, NoticeEvent
from nonebot.log import logger
from nonebot.typing import overrides
from pydantic import BaseModel


Event_T = TypeVar("Event_T", bound=Type[Event])


def register_event(event: Event_T) -> Event_T:
Adapter.add_custom_model(event)
logger.opt(colors=True).trace(
f"Custom event <e>{event.__qualname__!r}</e> registered to adapter <e>{Adapter.get_name()!r}</e> "
f"from module <g>{event.__module__!r}</g>"
)
return event


@register_event
class GroupCardNoticeEvent(NoticeEvent):
"""群成员名片更新提醒事件(此事件不保证时效性, 仅在收到消息时校验卡片)"""

notice_type: Literal["group_card"]
group_id: int
user_id: int
card_new: str
card_old: str

@overrides(Event)
def is_tome(self) -> bool:
return self.user_id == self.self_id

@overrides(NoticeEvent)
def get_user_id(self) -> str:
return str(self.user_id)

@overrides(NoticeEvent)
def get_session_id(self) -> str:
return f"group_{self.group_id}_{self.user_id}"


class OfflineFile(BaseModel):
name: str
size: int
url: str

class Config:
extra = "allow"


@register_event
class OfflineFileNoticeEvent(NoticeEvent):
"""接收到离线文件提醒事件"""

notice_type: Literal["offline_file"]
user_id: int
file: OfflineFile

@overrides(Event)
def is_tome(self) -> bool:
return True

@overrides(NoticeEvent)
def get_user_id(self) -> str:
return str(self.user_id)

@overrides(NoticeEvent)
def get_session_id(self) -> str:
return f"{self.user_id}_{self.file.name}"


class Device(BaseModel):
"""在线客户端
- app_id: 客户端ID
- device_name: 设备名称
- device_kind: 设备类型
"""
app_id: int
device_name: str
device_kind: str

class Config:
extra = "allow"


@register_event
class ClientStatusNoticeEvent(NoticeEvent):
"""其他客户端在线状态变更"""

notice_type: Literal["client_status"]
client: Device
online: bool

@overrides(Event)
def is_tome(self) -> bool:
return True

@overrides(NoticeEvent)
def get_user_id(self) -> str:
return str(self.self_id)

@overrides(NoticeEvent)
def get_session_id(self) -> str:
return f"{self.self_id}_{self.client.app_id}"


@register_event
class EssenceNoticeEvent(NoticeEvent):
"""精华消息变更"""

notice_type: Literal["essence"]
sub_type: Literal["add", "delete"]
group_id: int
sender_id: int
operator_id: int
message_id: int

@overrides(Event)
def is_tome(self) -> bool:
return self.self_id == self.sender_id or self.self_id == self.operator_id

@overrides(NoticeEvent)
def get_user_id(self) -> str:
return str(self.sender_id)

@overrides(NoticeEvent)
def get_session_id(self) -> str:
return f"group_{self.group_id}_{self.sender_id}"


__all__ = [
'GroupCardNoticeEvent',
'OfflineFileNoticeEvent',
'ClientStatusNoticeEvent',
'EssenceNoticeEvent'
]
12 changes: 6 additions & 6 deletions omega_miya/service/gocqhttp_guild_patch/README.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
# nonebot-plugin-guild-patch

*Patch plugin for NoneBot2 QQ guild (go-cqhttp) support.*
_Patch plugin for NoneBot2 QQ guild (go-cqhttp) support._

*NoneBot2 QQ 频道 (go-cqhttp) 支持适配补丁插件.*
_NoneBot2 QQ 频道 (go-cqhttp) 支持适配补丁插件._

![PyPI](https://img.shields.io/pypi/v/nonebot-plugin-guild-patch?style=for-the-badge)

Expand All @@ -11,7 +11,7 @@
[![GitHub stars](https://img.shields.io/github/stars/mnixry/nonebot-plugin-guild-patch)](https://github.com/mnixry/nonebot-plugin-guild-patch/stargazers)
[![GitHub license](https://img.shields.io/github/license/mnixry/nonebot-plugin-guild-patch)](https://github.com/mnixry/nonebot-plugin-guild-patch/blob/main/LICENSE)

> **注: 本补丁没有经过充分测试, 不建议在生产环境使用, 如果发现任何问题请[Issue反馈](https://github.com/mnixry/nonebot-plugin-guild-patch/issues/new/choose)**
> **注: 本补丁没有经过充分测试, 不建议在生产环境使用, 如果发现任何问题请[Issue 反馈](https://github.com/mnixry/nonebot-plugin-guild-patch/issues/new/choose)**
## 适用版本

Expand All @@ -24,7 +24,7 @@
- [x] 支持字符串形式消息上报
- [x] 支持数组形式消息上报
- [x] 支持`bot.send``matcher.send`直接向频道发送消息
- [ ] 支持`event.to_me`以支持`to_me`规则
- [x] 支持`event.to_me`以支持`to_me`规则
- [ ] 可选的事件转换器, 将频道消息事件转换为群消息

## 安装
Expand All @@ -34,7 +34,7 @@
如果它被成功加载, 你在调试模式下应该看到这样的日志:

```diff
11-13 09:14:52 [DEBUG] nonebot | Succeeded to load adapter "cqhttp"
11-13 09:14:52 [DEBUG] nonebot | Succeeded to load adapter "onebot"
11-13 09:14:52 [SUCCESS] nonebot | Succeeded to import "nonebot.plugins.echo"
+ 11-13 09:14:52 [SUCCESS] nonebot | Succeeded to import "nonebot_plugin_guild_patch"
11-13 09:14:52 [SUCCESS] nonebot | Running NoneBot...
Expand All @@ -50,7 +50,7 @@

```python
from nonebot.plugin import on_command
from nonebot.adapters.cqhttp import Bot, MessageSegment
from nonebot.adapters.onebot import Bot, MessageSegment

from nonebot_plugin_guild_patch import GuildMessageEvent

Expand Down
4 changes: 3 additions & 1 deletion omega_miya/service/gocqhttp_guild_patch/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
GuildMessageEvent,
MessageReactionsUpdatedNoticeEvent,
)
from .permission import GUILD, GUILD_SUPERUSER
from .permission import GUILD, GUILD_ADMIN, GUILD_OWNER, GUILD_SUPERUSER

original_send = Bot.send

Expand Down Expand Up @@ -55,6 +55,8 @@ async def patched_send(

__all__ = [
"GUILD",
"GUILD_OWNER",
"GUILD_ADMIN",
"GUILD_SUPERUSER",
"GuildMessageEvent",
"ChannelNoticeEvent",
Expand Down
51 changes: 3 additions & 48 deletions omega_miya/service/gocqhttp_guild_patch/models.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from typing import List, Optional, Type, TypeVar
from typing import List, Optional, Tuple, Type, TypeVar

from nonebot.adapters.onebot.v11 import (
Adapter,
Expand All @@ -8,21 +8,18 @@
MessageSegment,
NoticeEvent,
)
from nonebot.exception import NoLogException
from nonebot.log import logger
from nonebot.typing import overrides
from nonebot.utils import escape_tag
from pydantic import BaseModel, Field, parse_obj_as, root_validator, validator
from typing_extensions import Literal

from .config import guild_patch_config

Event_T = TypeVar("Event_T", bound=Type[Event])


def register_event(event: Event_T) -> Event_T:
Adapter.add_custom_model(event)
logger.opt(colors=True).debug(
logger.opt(colors=True).trace(
f"Custom event <e>{event.__qualname__!r}</e> registered "
f"from module <g>{event.__class__.__module__!r}</g>"
)
Expand Down Expand Up @@ -83,18 +80,12 @@ def get_event_description(self) -> str:
)
)

def get_log_string(self) -> str:
if not guild_patch_config.enable_guild_event_log:
raise NoLogException(adapter_name='nonebot-adapter-onebot')
else:
return super().get_log_string()

@overrides(MessageEvent)
def get_session_id(self) -> str:
return f"guild_{self.guild_id}_channel_{self.channel_id}_{self.user_id}"

@staticmethod
def _check_at_me(message: Message, self_tiny_id: int) -> tuple[Message, bool]:
def _check_at_me(message: Message, self_tiny_id: int) -> Tuple[Message, bool]:
"""检查消息开头或结尾是否存在 @机器人,去除并赋值 event.to_me"""
is_tome = False
# ensure message not empty
Expand Down Expand Up @@ -166,12 +157,6 @@ class ChannelNoticeEvent(NoticeEvent):
user_id: int
sub_type: None = None

def get_log_string(self) -> str:
if not guild_patch_config.enable_guild_event_log:
raise NoLogException(adapter_name='nonebot-adapter-onebot')
else:
return super().get_log_string()


@register_event
class GuildChannelRecallNoticeEvent(ChannelNoticeEvent):
Expand All @@ -181,12 +166,6 @@ class GuildChannelRecallNoticeEvent(ChannelNoticeEvent):
operator_id: int
message_id: str

def get_log_string(self) -> str:
if not guild_patch_config.enable_guild_event_log:
raise NoLogException(adapter_name='nonebot-adapter-onebot')
else:
return super().get_log_string()


@register_event
class MessageReactionsUpdatedNoticeEvent(ChannelNoticeEvent):
Expand All @@ -196,12 +175,6 @@ class MessageReactionsUpdatedNoticeEvent(ChannelNoticeEvent):
message_id: str
current_reactions: Optional[List[ReactionInfo]] = None

def get_log_string(self) -> str:
if not guild_patch_config.enable_guild_event_log:
raise NoLogException(adapter_name='nonebot-adapter-onebot')
else:
return super().get_log_string()


class SlowModeInfo(BaseModel):
slow_mode_key: int
Expand Down Expand Up @@ -239,12 +212,6 @@ class ChannelUpdatedNoticeEvent(ChannelNoticeEvent):
old_info: ChannelInfo
new_info: ChannelInfo

def get_log_string(self) -> str:
if not guild_patch_config.enable_guild_event_log:
raise NoLogException(adapter_name='nonebot-adapter-onebot')
else:
return super().get_log_string()


@register_event
class ChannelCreatedNoticeEvent(ChannelNoticeEvent):
Expand All @@ -254,12 +221,6 @@ class ChannelCreatedNoticeEvent(ChannelNoticeEvent):
operator_id: int
channel_info: ChannelInfo

def get_log_string(self) -> str:
if not guild_patch_config.enable_guild_event_log:
raise NoLogException(adapter_name='nonebot-adapter-onebot')
else:
return super().get_log_string()


@register_event
class ChannelDestroyedNoticeEvent(ChannelNoticeEvent):
Expand All @@ -269,12 +230,6 @@ class ChannelDestroyedNoticeEvent(ChannelNoticeEvent):
operator_id: int
channel_info: ChannelInfo

def get_log_string(self) -> str:
if not guild_patch_config.enable_guild_event_log:
raise NoLogException(adapter_name='nonebot-adapter-onebot')
else:
return super().get_log_string()


__all__ = [
"GuildMessageEvent",
Expand Down
Loading

0 comments on commit 5bd2a84

Please sign in to comment.