Skip to content

Commit

Permalink
- 适配 Graia-Ariadne 0.7
Browse files Browse the repository at this point in the history
- 删除 MessageItem、MessageSender等历史遗留
- 删除 GithubWatcher插件,等待重新适配、
- 对 AppCore 进行了一些修改
  • Loading branch information
SAGIRI-kawaii committed Aug 5, 2022
1 parent 7ebe67b commit 8b0d397
Show file tree
Hide file tree
Showing 107 changed files with 2,931 additions and 3,461 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -28,3 +28,4 @@ test.py
/statics/genshin/map/*
/statics/genshin/material/*
/statics/genshin/temp/*
migrator.py
7 changes: 6 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
* [使用文档](#使用文档)
* [注意](#注意)
* [鸣谢](#鸣谢)
* [Stargazers over time](#Stargazers over time)

## 项目特色
- 基于Sqlalchemy的异步ORM
Expand Down Expand Up @@ -67,4 +68,8 @@

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

[<img src=".github/jetbrains-variant-3.png" width="200"/>](https://www.jetbrains.com/?from=sagiri-bot)
[<img src=".github/jetbrains-variant-3.png" width="200"/>](https://www.jetbrains.com/?from=sagiri-bot)

## Stargazers over time

[![Stargazers over time](https://starchart.cc/SAGIRI-kawaii/sagiri-bot.svg)](https://starchart.cc/SAGIRI-kawaii/sagiri-bot)
6 changes: 6 additions & 0 deletions config_demo.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,12 @@ image_path:
bizhi: bizhi
sketch: sketch

# 个性化设置
commands:
default:
prefix: /
alias: []

# 功能相关
functions:
tencent:
Expand Down
44 changes: 29 additions & 15 deletions main.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,20 +5,23 @@
from datetime import time
from pathlib import Path

from graia.ariadne.event.lifecycle import ApplicationLaunched
from graia.ariadne.event.message import Group, Member, MessageChain, Friend
from creart import create
from graia.saya import Saya
from graia.broadcast import Broadcast
from graia.ariadne.event.lifecycle import ApplicationLaunch
from graia.ariadne.event.message import ActiveFriendMessage, ActiveGroupMessage
from graia.ariadne.event.message import Group, Member, MessageChain, Friend, Stranger

from sagiri_bot.config import GlobalConfig
from sagiri_bot.core.app_core import AppCore
from sagiri_bot.utils import online_notice, load_config
from sagiri_bot.internal_utils import online_notice
from sagiri_bot.core.api_server.app import run_api_server, set_log

core = AppCore(load_config())

config = create(GlobalConfig)
core = AppCore(config)
app = core.get_app()
bcc = core.get_bcc()
saya = core.get_saya()
config = core.get_config()
bcc = create(Broadcast)
saya = create(Saya)

logger.add(
Path(os.getcwd()) / "log" / "{time:YYYY-MM-DD}" / "common.log",
Expand All @@ -34,7 +37,7 @@
encoding="utf-8",
rotation=time(),
)
logger.add(set_log)
# logger.add(set_log)

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

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


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


@bcc.receiver("TempMessage")
async def temp_message_listener(member: Member, message: MessageChain):
message_text_log = message.display.replace("\n", "\\n").strip()
logger.info(f"收到来自群 <{member.group.name.strip()}> 中成员 <{member.name.strip()}> 的临时消息:{message_text_log}")


@bcc.receiver("StrangerMessage")
async def stranger_message_listener(stranger: Stranger, message: MessageChain):
message_text_log = message.display.replace("\n", "\\n").strip()
logger.info(f"收到来自陌生人 <{stranger.nickname.strip()}> 的消息:{message_text_log}")


@bcc.receiver("ActiveGroupMessage")
async def send_group_message_handler(event: ActiveGroupMessage):
message_text_log = event.messageChain.asDisplay().replace("\n", "\\n").strip()
message_text_log = event.message_chain.display.replace("\n", "\\n").strip()
logger.info(f"成功向群 <{event.subject.name.strip()}> 发送消息:{message_text_log}")


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


@logger.catch
@bcc.receiver(ApplicationLaunched)
@bcc.receiver(ApplicationLaunch)
async def init():
await core.bot_launch_init()
await online_notice(app)
Expand Down
19 changes: 18 additions & 1 deletion poetry.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ python = ">=3.8, <3.10"
aiohttp = "^3.8.1"
beautifulsoup4 = "^4.11.1"
graia-scheduler = "^0.0.7"
graia-ariadne = "^0.6.16"
graia-ariadne = "^0.8.1"
graia-saya = "^0.0.15"
graiax-silkcoder = "^0.2.6"
fastapi = "^0.78.0"
Expand Down Expand Up @@ -39,6 +39,7 @@ requests = "^2.27.1"
picimagesearch = "^3.3.2"
scipy = "^1.8.1"
pypinyin = "^0.46.0"
creart = "^0.2.1"

[tool.poetry.dev-dependencies]
numpy = "^1.22.4"
Expand Down
5 changes: 3 additions & 2 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
aiohttp
beautifulsoup4
graia-scheduler
graia-ariadne==0.6.16
graia-ariadne
graia-saya
graiax-silkcoder==0.2.0
fastapi
Expand Down Expand Up @@ -34,4 +34,5 @@ markdown
requests
scipy
PicImageSearch
pypinyin
pypinyin
creart
19 changes: 8 additions & 11 deletions sagiri_bot/command_parse/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@

from .commands import *
from sagiri_bot.orm.async_orm import orm
from sagiri_bot.utils import group_setting
from sagiri_bot.utils import user_permission_require
from sagiri_bot.internal_utils import group_setting
from sagiri_bot.internal_utils import user_permission_require
from sagiri_bot.orm.async_orm import Setting, UserPermission, BlackList


Expand All @@ -21,14 +21,12 @@ class BlackListType(Enum):
def camel_to_underscore(s: str) -> str:
result = s[0]
for i in range(1, len(s)):
if s[i].isupper() and not s[i - 1].isupper():
result += '_'
result += s[i]
elif s[i].isupper() and s[i - 1].isupper() and s[i + 1].islower():
result += '_'
result += s[i]
else:
result += s[i]
if s[i].isupper():
if not s[i - 1].isupper():
result += '_'
elif s[i - 1].isupper() and s[i + 1].islower():
result += '_'
result += s[i]
return result.lower()


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

35 changes: 35 additions & 0 deletions sagiri_bot/config.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,19 @@
import os
import yaml
from abc import ABC
from pathlib import Path
from pydantic import BaseModel
from typing import Type, List, Dict
from typing_extensions import TypedDict

from creart import exists_module
from creart import add_creator
from creart.creator import AbstractCreator, CreateTargetInfo


class PluginConfig(TypedDict):
prefix: List[str]
alias: List[str]


class GlobalConfig(BaseModel):
Expand All @@ -11,6 +26,7 @@ class GlobalConfig(BaseModel):
web_manager_auto_boot: bool = False
image_path: dict = {}
proxy: str = "proxy"
commands: Dict[str, PluginConfig]
functions: dict = {
"tencent": {
"secret_id": "secret_id",
Expand All @@ -34,3 +50,22 @@ class GlobalConfig(BaseModel):
"automatic_update": False,
"data_retention": False
}


class ConfigClassCreator(AbstractCreator, ABC):
targets = (
CreateTargetInfo("sagiri_bot.config", "GlobalConfig"),
)

@staticmethod
def available() -> bool:
return exists_module("sagiri_bot.config")

@staticmethod
def create(create_type: Type[GlobalConfig]) -> GlobalConfig:
with open(Path(os.getcwd()) / "config.yaml", "r", encoding='utf-8') as f:
configs = yaml.load(f.read(), Loader=yaml.BaseLoader)
return GlobalConfig(**configs)


add_creator(ConfigClassCreator)
24 changes: 12 additions & 12 deletions sagiri_bot/control.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
from sagiri_bot.frequency_limit_module import GlobalFrequencyLimitDict
from sagiri_bot.orm.async_orm import orm, Setting, BlackList, UserPermission
from sagiri_bot.handler.required_module.saya_manager.utils import saya_data, SayaData
from sagiri_bot.utils import group_setting, user_permission_require, update_user_call_count_plus
from sagiri_bot.internal_utils import group_setting, user_permission_require, update_user_call_count_plus


class Permission(object):
Expand Down Expand Up @@ -67,17 +67,17 @@ def require(cls, level: int = DEFAULT) -> Depend:
:param level: 限制等级
"""

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

Expand Down Expand Up @@ -113,13 +113,13 @@ async def limit(event: GroupMessage) -> NoReturn:
if frequency_limit_instance.blacklist_judge(group, member):
if not frequency_limit_instance.announce_judge(group, member):
await frequency_limit_instance.blacklist_announced(group, member)
await ariadne_ctx.get().sendGroupMessage(
group, MessageChain("检测到大量请求,加入黑名单一小时!"), quote=event.messageChain.getFirst(Source)
await ariadne_ctx.get().send_group_message(
group, MessageChain("检测到大量请求,加入黑名单一小时!"), quote=event.message_chain.get_first(Source)
)
raise ExecutionStop()
if frequency_limit_instance.get(group, member, func_name) + weight >= total_weight:
await ariadne_ctx.get().sendGroupMessage(
group, MessageChain("超过频率调用限制!"), quote=event.messageChain.getFirst(Source)
await ariadne_ctx.get().send_group_message(
group, MessageChain("超过频率调用限制!"), quote=event.message_chain.get_first(Source)
)
raise ExecutionStop()
else:
Expand Down Expand Up @@ -220,17 +220,17 @@ async def cd_check(event: GroupMessage) -> NoReturn:
return
if event.sender.id not in cls.sent_alert:
if not silent:
await ariadne_ctx.get().sendGroupMessage(
await ariadne_ctx.get().send_group_message(
event.sender.group,
MessageChain.create(
MessageChain(
[
Plain(
f"冷却还有{last[1] + suspend_time - current:.2f}秒结束,"
f"之后可再执行{max_exec}次"
)
]
),
quote=event.messageChain.getFirst(Source).id,
quote=event.message_chain.get_first(Source).id,
)
cls.sent_alert.add(event.sender.id)
raise ExecutionStop()
Expand Down Expand Up @@ -278,7 +278,7 @@ async def judge(event: GroupMessage) -> NoReturn:
print(name, saya_data.is_turned_on(name, group))
if not saya_data.is_turned_on(name, group):
if saya_data.is_notice_on(name, group) or notice:
await ariadne_ctx.get().sendMessage(
await ariadne_ctx.get().send_message(
group, MessageChain(f"{name}插件已关闭,请联系管理员")
)
raise ExecutionStop()
Expand Down
Loading

1 comment on commit 8b0d397

@SAGIRI-kawaii
Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

完成对 Graia-Ariadne 0.7+适配 ( #278 )

Please sign in to comment.