Skip to content

Commit 8b0d397

Browse files
committed
- 适配 Graia-Ariadne 0.7
- 删除 MessageItem、MessageSender等历史遗留 - 删除 GithubWatcher插件,等待重新适配、 - 对 AppCore 进行了一些修改
1 parent 7ebe67b commit 8b0d397

File tree

107 files changed

+2931
-3461
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

107 files changed

+2931
-3461
lines changed

Diff for: .gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -28,3 +28,4 @@ test.py
2828
/statics/genshin/map/*
2929
/statics/genshin/material/*
3030
/statics/genshin/temp/*
31+
migrator.py

Diff for: README.md

+6-1
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
* [使用文档](#使用文档)
2626
* [注意](#注意)
2727
* [鸣谢](#鸣谢)
28+
* [Stargazers over time](#Stargazers over time)
2829

2930
## 项目特色
3031
- 基于Sqlalchemy的异步ORM
@@ -67,4 +68,8 @@
6768

6869
- 特别感谢 [JetBrains](https://www.jetbrains.com/?from=sagiri-bot) 为开源项目提供免费的 [PyCharm](https://www.jetbrains.com/pycharm/?from=sagiri-bot) 等 IDE 的授权
6970

70-
[<img src=".github/jetbrains-variant-3.png" width="200"/>](https://www.jetbrains.com/?from=sagiri-bot)
71+
[<img src=".github/jetbrains-variant-3.png" width="200"/>](https://www.jetbrains.com/?from=sagiri-bot)
72+
73+
## Stargazers over time
74+
75+
[![Stargazers over time](https://starchart.cc/SAGIRI-kawaii/sagiri-bot.svg)](https://starchart.cc/SAGIRI-kawaii/sagiri-bot)

Diff for: config_demo.yaml

+6
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,12 @@ image_path:
1717
bizhi: bizhi
1818
sketch: sketch
1919

20+
# 个性化设置
21+
commands:
22+
default:
23+
prefix: /
24+
alias: []
25+
2026
# 功能相关
2127
functions:
2228
tencent:

Diff for: main.py

+29-15
Original file line numberDiff line numberDiff line change
@@ -5,20 +5,23 @@
55
from datetime import time
66
from pathlib import Path
77

8-
from graia.ariadne.event.lifecycle import ApplicationLaunched
9-
from graia.ariadne.event.message import Group, Member, MessageChain, Friend
8+
from creart import create
9+
from graia.saya import Saya
10+
from graia.broadcast import Broadcast
11+
from graia.ariadne.event.lifecycle import ApplicationLaunch
1012
from graia.ariadne.event.message import ActiveFriendMessage, ActiveGroupMessage
13+
from graia.ariadne.event.message import Group, Member, MessageChain, Friend, Stranger
1114

15+
from sagiri_bot.config import GlobalConfig
1216
from sagiri_bot.core.app_core import AppCore
13-
from sagiri_bot.utils import online_notice, load_config
17+
from sagiri_bot.internal_utils import online_notice
1418
from sagiri_bot.core.api_server.app import run_api_server, set_log
1519

16-
core = AppCore(load_config())
17-
20+
config = create(GlobalConfig)
21+
core = AppCore(config)
1822
app = core.get_app()
19-
bcc = core.get_bcc()
20-
saya = core.get_saya()
21-
config = core.get_config()
23+
bcc = create(Broadcast)
24+
saya = create(Saya)
2225

2326
logger.add(
2427
Path(os.getcwd()) / "log" / "{time:YYYY-MM-DD}" / "common.log",
@@ -34,7 +37,7 @@
3437
encoding="utf-8",
3538
rotation=time(),
3639
)
37-
logger.add(set_log)
40+
# logger.add(set_log)
3841

3942
ignore = ["__init__.py", "__pycache__"]
4043
with saya.module_context():
@@ -54,32 +57,43 @@
5457

5558
@bcc.receiver("GroupMessage")
5659
async def group_message_handler(message: MessageChain, group: Group, member: Member):
57-
message_text_log = message.asDisplay().replace("\n", "\\n").strip()
60+
message_text_log = message.display.replace("\n", "\\n").strip()
5861
logger.info(
5962
f"收到来自群 <{group.name.strip()}> 中成员 <{member.name.strip()}> 的消息:{message_text_log}"
6063
)
6164

6265

6366
@bcc.receiver("FriendMessage")
6467
async def friend_message_listener(friend: Friend, message: MessageChain):
65-
message_text_log = message.asDisplay().replace("\n", "\\n").strip()
68+
message_text_log = message.display.replace("\n", "\\n").strip()
6669
logger.info(f"收到来自好友 <{friend.nickname.strip()}> 的消息:{message_text_log}")
6770

6871

72+
@bcc.receiver("TempMessage")
73+
async def temp_message_listener(member: Member, message: MessageChain):
74+
message_text_log = message.display.replace("\n", "\\n").strip()
75+
logger.info(f"收到来自群 <{member.group.name.strip()}> 中成员 <{member.name.strip()}> 的临时消息:{message_text_log}")
76+
77+
78+
@bcc.receiver("StrangerMessage")
79+
async def stranger_message_listener(stranger: Stranger, message: MessageChain):
80+
message_text_log = message.display.replace("\n", "\\n").strip()
81+
logger.info(f"收到来自陌生人 <{stranger.nickname.strip()}> 的消息:{message_text_log}")
82+
83+
6984
@bcc.receiver("ActiveGroupMessage")
7085
async def send_group_message_handler(event: ActiveGroupMessage):
71-
message_text_log = event.messageChain.asDisplay().replace("\n", "\\n").strip()
86+
message_text_log = event.message_chain.display.replace("\n", "\\n").strip()
7287
logger.info(f"成功向群 <{event.subject.name.strip()}> 发送消息:{message_text_log}")
7388

7489

7590
@bcc.receiver("ActiveFriendMessage")
7691
async def send_group_message_handler(event: ActiveFriendMessage):
77-
message_text_log = event.messageChain.asDisplay().replace("\n", "\\n").strip()
92+
message_text_log = event.message_chain.display.replace("\n", "\\n").strip()
7893
logger.info(f"成功向好友 <{event.subject.nickname.strip()}> 发送消息:{message_text_log}")
7994

8095

81-
@logger.catch
82-
@bcc.receiver(ApplicationLaunched)
96+
@bcc.receiver(ApplicationLaunch)
8397
async def init():
8498
await core.bot_launch_init()
8599
await online_notice(app)

Diff for: poetry.lock

+18-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: pyproject.toml

+2-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ python = ">=3.8, <3.10"
1010
aiohttp = "^3.8.1"
1111
beautifulsoup4 = "^4.11.1"
1212
graia-scheduler = "^0.0.7"
13-
graia-ariadne = "^0.6.16"
13+
graia-ariadne = "^0.8.1"
1414
graia-saya = "^0.0.15"
1515
graiax-silkcoder = "^0.2.6"
1616
fastapi = "^0.78.0"
@@ -39,6 +39,7 @@ requests = "^2.27.1"
3939
picimagesearch = "^3.3.2"
4040
scipy = "^1.8.1"
4141
pypinyin = "^0.46.0"
42+
creart = "^0.2.1"
4243

4344
[tool.poetry.dev-dependencies]
4445
numpy = "^1.22.4"

Diff for: requirements.txt

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
aiohttp
22
beautifulsoup4
33
graia-scheduler
4-
graia-ariadne==0.6.16
4+
graia-ariadne
55
graia-saya
66
graiax-silkcoder==0.2.0
77
fastapi
@@ -34,4 +34,5 @@ markdown
3434
requests
3535
scipy
3636
PicImageSearch
37-
pypinyin
37+
pypinyin
38+
creart

Diff for: sagiri_bot/command_parse/utils.py

+8-11
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@
99

1010
from .commands import *
1111
from sagiri_bot.orm.async_orm import orm
12-
from sagiri_bot.utils import group_setting
13-
from sagiri_bot.utils import user_permission_require
12+
from sagiri_bot.internal_utils import group_setting
13+
from sagiri_bot.internal_utils import user_permission_require
1414
from sagiri_bot.orm.async_orm import Setting, UserPermission, BlackList
1515

1616

@@ -21,14 +21,12 @@ class BlackListType(Enum):
2121
def camel_to_underscore(s: str) -> str:
2222
result = s[0]
2323
for i in range(1, len(s)):
24-
if s[i].isupper() and not s[i - 1].isupper():
25-
result += '_'
26-
result += s[i]
27-
elif s[i].isupper() and s[i - 1].isupper() and s[i + 1].islower():
28-
result += '_'
29-
result += s[i]
30-
else:
31-
result += s[i]
24+
if s[i].isupper():
25+
if not s[i - 1].isupper():
26+
result += '_'
27+
elif s[i - 1].isupper() and s[i + 1].islower():
28+
result += '_'
29+
result += s[i]
3230
return result.lower()
3331

3432

@@ -205,4 +203,3 @@ async def check_admin(member: Union[int, Member], group: Union[int, Group]) -> b
205203
return res[0] >= 2
206204
else:
207205
return False
208-

Diff for: sagiri_bot/config.py

+35
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,19 @@
1+
import os
2+
import yaml
3+
from abc import ABC
4+
from pathlib import Path
15
from pydantic import BaseModel
6+
from typing import Type, List, Dict
7+
from typing_extensions import TypedDict
8+
9+
from creart import exists_module
10+
from creart import add_creator
11+
from creart.creator import AbstractCreator, CreateTargetInfo
12+
13+
14+
class PluginConfig(TypedDict):
15+
prefix: List[str]
16+
alias: List[str]
217

318

419
class GlobalConfig(BaseModel):
@@ -11,6 +26,7 @@ class GlobalConfig(BaseModel):
1126
web_manager_auto_boot: bool = False
1227
image_path: dict = {}
1328
proxy: str = "proxy"
29+
commands: Dict[str, PluginConfig]
1430
functions: dict = {
1531
"tencent": {
1632
"secret_id": "secret_id",
@@ -34,3 +50,22 @@ class GlobalConfig(BaseModel):
3450
"automatic_update": False,
3551
"data_retention": False
3652
}
53+
54+
55+
class ConfigClassCreator(AbstractCreator, ABC):
56+
targets = (
57+
CreateTargetInfo("sagiri_bot.config", "GlobalConfig"),
58+
)
59+
60+
@staticmethod
61+
def available() -> bool:
62+
return exists_module("sagiri_bot.config")
63+
64+
@staticmethod
65+
def create(create_type: Type[GlobalConfig]) -> GlobalConfig:
66+
with open(Path(os.getcwd()) / "config.yaml", "r", encoding='utf-8') as f:
67+
configs = yaml.load(f.read(), Loader=yaml.BaseLoader)
68+
return GlobalConfig(**configs)
69+
70+
71+
add_creator(ConfigClassCreator)

Diff for: sagiri_bot/control.py

+12-12
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
from sagiri_bot.frequency_limit_module import GlobalFrequencyLimitDict
1919
from sagiri_bot.orm.async_orm import orm, Setting, BlackList, UserPermission
2020
from sagiri_bot.handler.required_module.saya_manager.utils import saya_data, SayaData
21-
from sagiri_bot.utils import group_setting, user_permission_require, update_user_call_count_plus
21+
from sagiri_bot.internal_utils import group_setting, user_permission_require, update_user_call_count_plus
2222

2323

2424
class Permission(object):
@@ -67,17 +67,17 @@ def require(cls, level: int = DEFAULT) -> Depend:
6767
:param level: 限制等级
6868
"""
6969

70-
async def perm_check(event: GroupMessage, group: Group) -> NoReturn:
70+
async def perm_check(event: GroupMessage, group: Group, source: Source) -> NoReturn:
7171
if not Permission.DEFAULT <= level <= Permission.MASTER:
7272
raise ValueError(f"invalid level: {level}")
7373
member_level = await cls.get(event.sender.group, event.sender)
7474
if member_level == cls.MASTER:
7575
pass
7676
elif member_level < level:
77-
await ariadne_ctx.get().sendGroupMessage(
77+
await ariadne_ctx.get().send_group_message(
7878
group,
7979
MessageChain(f"权限不足,爬!需要达到等级{level},你的等级是{member_level}"),
80-
quote=event.messageChain.getFirst(Source)
80+
quote=source
8181
)
8282
raise ExecutionStop()
8383

@@ -113,13 +113,13 @@ async def limit(event: GroupMessage) -> NoReturn:
113113
if frequency_limit_instance.blacklist_judge(group, member):
114114
if not frequency_limit_instance.announce_judge(group, member):
115115
await frequency_limit_instance.blacklist_announced(group, member)
116-
await ariadne_ctx.get().sendGroupMessage(
117-
group, MessageChain("检测到大量请求,加入黑名单一小时!"), quote=event.messageChain.getFirst(Source)
116+
await ariadne_ctx.get().send_group_message(
117+
group, MessageChain("检测到大量请求,加入黑名单一小时!"), quote=event.message_chain.get_first(Source)
118118
)
119119
raise ExecutionStop()
120120
if frequency_limit_instance.get(group, member, func_name) + weight >= total_weight:
121-
await ariadne_ctx.get().sendGroupMessage(
122-
group, MessageChain("超过频率调用限制!"), quote=event.messageChain.getFirst(Source)
121+
await ariadne_ctx.get().send_group_message(
122+
group, MessageChain("超过频率调用限制!"), quote=event.message_chain.get_first(Source)
123123
)
124124
raise ExecutionStop()
125125
else:
@@ -220,17 +220,17 @@ async def cd_check(event: GroupMessage) -> NoReturn:
220220
return
221221
if event.sender.id not in cls.sent_alert:
222222
if not silent:
223-
await ariadne_ctx.get().sendGroupMessage(
223+
await ariadne_ctx.get().send_group_message(
224224
event.sender.group,
225-
MessageChain.create(
225+
MessageChain(
226226
[
227227
Plain(
228228
f"冷却还有{last[1] + suspend_time - current:.2f}秒结束,"
229229
f"之后可再执行{max_exec}次"
230230
)
231231
]
232232
),
233-
quote=event.messageChain.getFirst(Source).id,
233+
quote=event.message_chain.get_first(Source).id,
234234
)
235235
cls.sent_alert.add(event.sender.id)
236236
raise ExecutionStop()
@@ -278,7 +278,7 @@ async def judge(event: GroupMessage) -> NoReturn:
278278
print(name, saya_data.is_turned_on(name, group))
279279
if not saya_data.is_turned_on(name, group):
280280
if saya_data.is_notice_on(name, group) or notice:
281-
await ariadne_ctx.get().sendMessage(
281+
await ariadne_ctx.get().send_message(
282282
group, MessageChain(f"{name}插件已关闭,请联系管理员")
283283
)
284284
raise ExecutionStop()

0 commit comments

Comments
 (0)