summaryrefslogtreecommitdiff
path: root/ATRI/plugins
diff options
context:
space:
mode:
Diffstat (limited to 'ATRI/plugins')
-rw-r--r--ATRI/plugins/admin.py59
-rw-r--r--ATRI/plugins/anime-search/__init__.py27
-rw-r--r--ATRI/plugins/anti-rubbish.py20
-rw-r--r--ATRI/plugins/call-owner.py32
-rw-r--r--ATRI/plugins/code-runner.py26
-rw-r--r--ATRI/plugins/curse/__init__.py27
-rw-r--r--ATRI/plugins/drifting-bottle/__init__.py18
-rw-r--r--ATRI/plugins/essential.py48
-rw-r--r--ATRI/plugins/funny.py32
-rw-r--r--ATRI/plugins/github.py24
-rw-r--r--ATRI/plugins/hitokoto.py28
-rw-r--r--ATRI/plugins/key-repo/__init__.py171
-rw-r--r--ATRI/plugins/rich/__init__.py26
-rw-r--r--ATRI/plugins/rich/data_source.py16
-rw-r--r--ATRI/plugins/status.py81
-rw-r--r--ATRI/plugins/utils/__init__.py43
-rw-r--r--ATRI/plugins/utils/data_source.py16
17 files changed, 340 insertions, 354 deletions
diff --git a/ATRI/plugins/admin.py b/ATRI/plugins/admin.py
index 45acf4b..9465130 100644
--- a/ATRI/plugins/admin.py
+++ b/ATRI/plugins/admin.py
@@ -1,26 +1,10 @@
-#!/usr/bin/env python3
-# -*- coding:utf-8 -*-
-'''
-File: admin.py
-Created Date: 2021-02-04 21:17:12
-Author: Kyomotoi
-License: GPLv3
-Project: https://github.com/Kyomotoi/ATRI
---------
-Last Modified: Sunday, 7th March 2021 3:14:01 pm
-Modified By: Kyomotoi ([email protected])
---------
-Copyright (c) 2021 Kyomotoi
-'''
-
+import os
import json
import time
from pathlib import Path
from datetime import datetime
from nonebot.permission import SUPERUSER
-from nonebot.plugin import on_command, on_message, CommandGroup
from nonebot.adapters.cqhttp import (
Bot,
MessageEvent,
@@ -28,7 +12,8 @@ from nonebot.adapters.cqhttp import (
)
from nonebot.typing import T_State
-from ATRI.exceptions import WriteError, read_error
+from ATRI.service import Service as sv
+from ATRI.exceptions import WriteError, load_error
from ATRI.utils.file import open_file
from ATRI.log import (
logger,
@@ -38,10 +23,11 @@ from ATRI.log import (
ADMIN_DIR = Path('.') / 'ATRI' / 'data' / 'database' / 'admin'
+os.makedirs(ADMIN_DIR, exist_ok=True)
# 收集bot所在的群聊聊天记录
-chat_monitor = on_message()
+chat_monitor = sv.on_message()
@chat_monitor.handle()
async def _chat_monitor(bot: Bot, event: GroupMessageEvent) -> None:
@@ -96,8 +82,9 @@ async def _chat_monitor(bot: Bot, event: GroupMessageEvent) -> None:
ESSENTIAL_DIR = Path('.') / 'ATRI' / 'data' / 'database' / 'essential'
-request_friend = on_command(
- "好友申请",
+request_friend = sv.on_command(
+ name="好友申请处理",
+ cmd="好友申请",
permission=SUPERUSER
)
@@ -135,8 +122,9 @@ async def _request_friend(bot: Bot, event: MessageEvent) -> None:
await request_friend.finish("阿...请检查输入——!")
-request_group = on_command(
- "群聊申请",
+request_group = sv.on_command(
+ name="群聊申请处理",
+ cmd="群聊申请",
permission=SUPERUSER
)
@@ -184,8 +172,9 @@ async def _request_group(bot: Bot, event: MessageEvent) -> None:
await request_friend.finish("阿...请检查输入——!")
-broadcast = on_command(
- "/broadcast",
+broadcast = sv.on_command(
+ name="广播",
+ cmd="/broadcast",
permission=SUPERUSER
)
@@ -224,8 +213,9 @@ async def _bd(bot: Bot, event: MessageEvent, state: T_State) -> None:
await broadcast.finish(repo_msg)
-track_error = on_command(
- "/track",
+track_error = sv.on_command(
+ name="错误堆栈查看",
+ cmd="/track",
permission=SUPERUSER
)
@@ -241,7 +231,7 @@ async def _(bot: Bot, event: MessageEvent, state: T_State) -> None:
data = {}
try:
- data = read_error(track_id)
+ data = load_error(track_id)
except:
await track_error.finish("Ignore track ID!")
@@ -249,14 +239,15 @@ async def _(bot: Bot, event: MessageEvent, state: T_State) -> None:
f"ID: {track_id}\n"
f"Time: {data['time']}\n"
f"Prompt: {data['prompt']}\n"
- f"{data['error_content']}"
+ f"{data['content']}"
)
await track_error.finish(msg0)
-get_log = on_command(
- "/getlog",
+get_log = sv.on_command(
+ name="获取控制台信息",
+ cmd="/getlog",
permission=SUPERUSER
)
@@ -290,7 +281,11 @@ async def _get_log(bot: Bot, event: MessageEvent) -> None:
await get_log.finish("\n".join(content).replace("ATRI", "ATRI")) # type: ignore
-shutdown = on_command("/shutdown", permission=SUPERUSER)
+shutdown = sv.on_command(
+ name="紧急停机",
+ cmd="/shutdown",
+ permission=SUPERUSER
+)
@shutdown.handle()
async def _shutdown(bot: Bot, event: MessageEvent, state: T_State) -> None:
diff --git a/ATRI/plugins/anime-search/__init__.py b/ATRI/plugins/anime-search/__init__.py
index 3ff8964..07cc8dc 100644
--- a/ATRI/plugins/anime-search/__init__.py
+++ b/ATRI/plugins/anime-search/__init__.py
@@ -1,29 +1,13 @@
-#!/usr/bin/env python3
-# -*- coding:utf-8 -*-
-'''
-File: __init__.py
-Created Date: 2021-02-19 22:16:34
-Author: Kyomotoi
-License: GPLv3
-Project: https://github.com/Kyomotoi/ATRI
---------
-Last Modified: Sunday, 7th March 2021 3:18:10 pm
-Modified By: Kyomotoi ([email protected])
---------
-Copyright (c) 2021 Kyomotoi
-'''
-
import re
import json
from nonebot.adapters.cqhttp.message import MessageSegment
-from nonebot.plugin import on_command
from nonebot.adapters.cqhttp import Bot, MessageEvent
from nonebot.adapters.cqhttp.message import Message
from nonebot.typing import T_State
-from ATRI.rule import is_in_banlist, is_in_dormant
+from ATRI.service import Service as sv
+from ATRI.rule import is_block, is_in_dormant
from ATRI.exceptions import RequestTimeOut
from ATRI.utils.request import get_bytes
@@ -33,9 +17,10 @@ from .data_source import to_simple_string
URL = "https://trace.moe/api/search?url="
-anime_search = on_command(
- "/anime",
- rule=is_in_banlist() & is_in_dormant()
+anime_search = sv.on_command(
+ name="以图搜番",
+ cmd="/anime",
+ rule=is_block() & is_in_dormant()
)
@anime_search.handle()
diff --git a/ATRI/plugins/anti-rubbish.py b/ATRI/plugins/anti-rubbish.py
index 7350789..de8e1e1 100644
--- a/ATRI/plugins/anti-rubbish.py
+++ b/ATRI/plugins/anti-rubbish.py
@@ -1,19 +1,3 @@
-#!/usr/bin/env python3
-# -*- coding:utf-8 -*-
-'''
-File: anti-rubbish.py
-Created Date: 2021-02-15 12:39:24
-Author: Kyomotoi
-License: GPLv3
-Project: https://github.com/Kyomotoi/ATRI
---------
-Last Modified: Sunday, 7th March 2021 3:13:51 pm
-Modified By: Kyomotoi ([email protected])
---------
-Copyright (c) 2021 Kyomotoi
-'''
-
import json
from pathlib import Path
from datetime import datetime
@@ -23,7 +7,7 @@ from nonebot.plugin import on_command, on_message
from nonebot.adapters.cqhttp import Bot, GroupMessageEvent
from ATRI.log import logger
-from ATRI.rule import is_in_banlist
+from ATRI.rule import is_block
from ATRI.config import nonebot_config
from ATRI.utils.file import write_file
from ATRI.utils.apscheduler import scheduler
@@ -58,7 +42,7 @@ async def _anti_rubbish(bot: Bot, event: GroupMessageEvent) -> None:
f"GET 吃屎人 {user}[@群{group}] 第{noob_data[user][key]}次: {msg}")
-rubbish = on_command("/rubbish", rule=is_in_banlist())
+rubbish = on_command("/rubbish", rule=is_block())
@rubbish.handle()
async def _rubbish(bot: Bot, event: GroupMessageEvent) -> None:
diff --git a/ATRI/plugins/call-owner.py b/ATRI/plugins/call-owner.py
index c09276f..af8e83d 100644
--- a/ATRI/plugins/call-owner.py
+++ b/ATRI/plugins/call-owner.py
@@ -1,28 +1,12 @@
-#!/usr/bin/env python3
-# -*- coding:utf-8 -*-
-'''
-File: call-owner.py
-Created Date: 2021-02-19 23:02:45
-Author: Kyomotoi
-License: GPLv3
-Project: https://github.com/Kyomotoi/ATRI
---------
-Last Modified: Sunday, 7th March 2021 3:13:40 pm
-Modified By: Kyomotoi ([email protected])
---------
-Copyright (c) 2021 Kyomotoi
-'''
-
from nonebot.permission import SUPERUSER
-from nonebot.plugin import on_command
from nonebot.typing import T_State
from nonebot.adapters.cqhttp import (
Bot,
MessageEvent
)
-from ATRI.rule import is_in_banlist
+from ATRI.service import Service as sv
+from ATRI.rule import is_block
from ATRI.config import nonebot_config
from ATRI.utils.apscheduler import scheduler
from ATRI.utils.list import count_list
@@ -31,7 +15,11 @@ from ATRI.utils.list import count_list
repo_list = []
-repo = on_command("来杯红茶", rule=is_in_banlist())
+repo = sv.on_command(
+ name="给维护者留言",
+ cmd="来杯红茶",
+ rule=is_block()
+)
@repo.handle()
async def _repo(bot: Bot, event: MessageEvent, state: T_State) -> None:
@@ -69,7 +57,11 @@ async def _() -> None:
repo_list = []
-reset_repo = on_command("重置红茶", permission=SUPERUSER)
+reset_repo = sv.on_command(
+ name="重置给维护者留言次数",
+ cmd="重置红茶",
+ permission=SUPERUSER
+)
@reset_repo.handle()
async def _reset_repo(bot: Bot, event: MessageEvent) -> None:
diff --git a/ATRI/plugins/code-runner.py b/ATRI/plugins/code-runner.py
index 0761384..731abfc 100644
--- a/ATRI/plugins/code-runner.py
+++ b/ATRI/plugins/code-runner.py
@@ -1,27 +1,11 @@
-#!/usr/bin/env python3
-# -*- coding:utf-8 -*-
-'''
-File: code-runner.py
-Created Date: 2021-02-20 07:43:44
-Author: Kyomotoi
-License: GPLv3
-Project: https://github.com/Kyomotoi/ATRI
---------
-Last Modified: Sunday, 7th March 2021 3:13:28 pm
-Modified By: Kyomotoi ([email protected])
---------
-Copyright (c) 2021 Kyomotoi
-'''
-
"""
Idea from: https://github.com/cczu-osa/aki
"""
import json
-from nonebot.plugin import on_command
from nonebot.adapters.cqhttp import Bot, MessageEvent
-from ATRI.rule import is_in_banlist, is_in_dormant
+from ATRI.service import Service as sv
+from ATRI.rule import is_block, is_in_dormant
from ATRI.utils.request import post_bytes
from ATRI.exceptions import RequestTimeOut
@@ -56,7 +40,11 @@ SUPPORTED_LANGUAGES = {
}
-code_runner = on_command("/code", rule=is_in_banlist() & is_in_dormant())
+code_runner = sv.on_command(
+ name="运行代码",
+ cmd="/code",
+ rule=is_block() & is_in_dormant()
+)
@code_runner.handle()
async def _code_runner(bot: Bot, event: MessageEvent) -> None:
diff --git a/ATRI/plugins/curse/__init__.py b/ATRI/plugins/curse/__init__.py
index f78e022..03da205 100644
--- a/ATRI/plugins/curse/__init__.py
+++ b/ATRI/plugins/curse/__init__.py
@@ -1,24 +1,8 @@
-#!/usr/bin/env python3
-# -*- coding:utf-8 -*-
-'''
-File: __init__.py
-Created Date: 2021-02-04 17:58:27
-Author: Kyomotoi
-License: GPLv3
-Project: https://github.com/Kyomotoi/ATRI
---------
-Last Modified: Sunday, 7th March 2021 3:14:41 pm
-Modified By: Kyomotoi ([email protected])
---------
-Copyright (c) 2021 Kyomotoi
-'''
-
-from nonebot.plugin import on_command
from nonebot.adapters.cqhttp import Bot, MessageEvent
+from ATRI.service import Service as sv
from ATRI.rule import (
- is_in_banlist,
+ is_block,
is_in_dormant,
is_in_service
)
@@ -33,10 +17,11 @@ sick_list = []
__plugin_name__ = 'curse'
-curse = on_command(
- "口臭一下",
+curse = sv.on_command(
+ name="口臭",
+ cmd="口臭一下",
aliases={"口臭", "骂我"},
- rule=is_in_banlist() & is_in_dormant()
+ rule=is_block() & is_in_dormant()
& is_in_service(__plugin_name__)
)
diff --git a/ATRI/plugins/drifting-bottle/__init__.py b/ATRI/plugins/drifting-bottle/__init__.py
index c9bd0a7..5bd514c 100644
--- a/ATRI/plugins/drifting-bottle/__init__.py
+++ b/ATRI/plugins/drifting-bottle/__init__.py
@@ -1,16 +1,2 @@
-#!/usr/bin/env python3
-# -*- coding:utf-8 -*-
-'''
-File: __init__.py
-Created Date: 2021-02-15 11:45:36
-Author: Kyomotoi
-License: GPLv3
-Project: https://github.com/Kyomotoi/ATRI
---------
-Last Modified: Sunday, 7th March 2021 3:14:36 pm
-Modified By: Kyomotoi ([email protected])
---------
-Copyright (c) 2021 Kyomotoi
-'''
-
+from ATRI.service import Service as sv
+from ATRI.rule import is_block, is_in_service \ No newline at end of file
diff --git a/ATRI/plugins/essential.py b/ATRI/plugins/essential.py
index f7d9840..020a413 100644
--- a/ATRI/plugins/essential.py
+++ b/ATRI/plugins/essential.py
@@ -1,28 +1,11 @@
-#!/usr/bin/env python3
-# -*- coding:utf-8 -*-
-'''
-File: essential.py
-Created Date: 2021-02-04 12:53:00
-Author: Kyomotoi
-License: GPLv3
-Project: https://github.com/Kyomotoi/ATRI
---------
-Last Modified: Sunday, 7th March 2021 3:13:09 pm
-Modified By: Kyomotoi ([email protected])
---------
-Copyright (c) 2021 Kyomotoi
-'''
-
+import os
import time
import json
import shutil
from pathlib import Path
from random import choice
-import nonebot
from nonebot.adapters import Bot
-from nonebot.plugin import on_notice, on_request
from nonebot.adapters.cqhttp.message import Message
from nonebot.adapters.cqhttp import (
FriendRequestEvent,
@@ -37,17 +20,19 @@ from nonebot.adapters.cqhttp import (
FriendRecallNoticeEvent
)
+import ATRI
from ATRI.log import logger
from ATRI.exceptions import WriteError
from ATRI.config import nonebot_config
-from ATRI.rule import is_in_banlist
+from ATRI.rule import is_block
from ATRI.service import Service as sv
-PLUGIN_INFO_DIR = Path('.') / 'ATRI' / 'data' / 'service' / 'plugins'
+PLUGIN_INFO_DIR = Path('.') / 'ATRI' / 'data' / 'service' / 'services'
+
+driver = ATRI.driver()
-driver = nonebot.get_driver()
@driver.on_startup
async def startup() -> None:
@@ -64,8 +49,8 @@ async def shutdown() -> None:
except:
repo = (
'清理插件信息失败',
- '请前往 ATRI/data/service 下',
- '将 plugins 整个文件夹删除'
+ '请前往 ATRI/data/service/services 下',
+ '将 services 整个文件夹删除'
)
logger.error(repo)
time.sleep(10)
@@ -94,9 +79,10 @@ async def disconnect(bot) -> None:
ESSENTIAL_DIR = Path('.') / 'ATRI' / 'data' / 'database' / 'essential'
+os.makedirs(ESSENTIAL_DIR, exist_ok=True)
# 处理:好友请求
-request_friend_event = on_request(rule=is_in_banlist())
+request_friend_event = sv.on_request("Friends request", rule=is_block())
@request_friend_event.handle()
async def _request_friend_event(bot, event: FriendRequestEvent) -> None:
@@ -136,7 +122,7 @@ async def _request_friend_event(bot, event: FriendRequestEvent) -> None:
# 处理:邀请入群,如身为管理,还附有入群请求
-request_group_event = on_request(rule=is_in_banlist())
+request_group_event = sv.on_request("Group request",rule=is_block())
@request_group_event.handle()
async def _request_group_event(bot, event: GroupRequestEvent) -> None:
@@ -178,7 +164,7 @@ async def _request_group_event(bot, event: GroupRequestEvent) -> None:
# 处理群成员变动
-group_member_event = on_notice()
+group_member_event = sv.on_notice("Group member change")
@group_member_event.handle()
async def _group_member_event(bot: Bot, event) -> None:
@@ -205,7 +191,7 @@ async def _group_member_event(bot: Bot, event) -> None:
# 处理群管理事件
-group_admin_event = on_notice()
+group_admin_event = sv.on_notice("Group admin change")
@group_admin_event.handle()
async def _group_admin_event(bot: Bot, event: GroupAdminNoticeEvent) -> None:
@@ -218,7 +204,7 @@ async def _group_admin_event(bot: Bot, event: GroupAdminNoticeEvent) -> None:
# 处理群禁言事件
-group_ban_event = on_notice()
+group_ban_event = sv.on_notice("Group ban change")
@group_ban_event.handle()
async def _group_ban_event(bot: Bot, event: GroupBanNoticeEvent) -> None:
@@ -247,7 +233,7 @@ async def _group_ban_event(bot: Bot, event: GroupBanNoticeEvent) -> None:
# 处理群红包运气王事件
-lucky_read_bag_event = on_notice()
+lucky_read_bag_event = sv.on_notice("Group read bag winner")
@lucky_read_bag_event.handle()
async def _lucky_read_bag_event(bot, event: LuckyKingNotifyEvent) -> None:
@@ -259,7 +245,7 @@ async def _lucky_read_bag_event(bot, event: LuckyKingNotifyEvent) -> None:
# 处理群文件上传事件
-group_file_upload_event = on_notice()
+group_file_upload_event = sv.on_notice("Group file change")
@group_file_upload_event.handle()
async def _group_file_upload_event(bot,
@@ -268,7 +254,7 @@ async def _group_file_upload_event(bot,
# 处理撤回事件
-recall_event = on_notice()
+recall_event = sv.on_notice("Group member recall")
@recall_event.handle()
async def _recall_event(bot: Bot, event) -> None:
diff --git a/ATRI/plugins/funny.py b/ATRI/plugins/funny.py
index 39a691d..472c77c 100644
--- a/ATRI/plugins/funny.py
+++ b/ATRI/plugins/funny.py
@@ -1,27 +1,11 @@
-#!/usr/bin/env python3
-# -*- coding:utf-8 -*-
-'''
-File: funny.py
-Created Date: 2021-02-04 21:17:21
-Author: Kyomotoi
-License: GPLv3
-Project: https://github.com/Kyomotoi/ATRI
---------
-Last Modified: Sunday, 7th March 2021 3:13:19 pm
-Modified By: Kyomotoi ([email protected])
---------
-Copyright (c) 2021 Kyomotoi
-'''
-
from pathlib import Path
from random import choice, randint
from nonebot.adapters.cqhttp import Bot, MessageEvent
-from nonebot.plugin import on_command, on_message
+from ATRI.service import Service as sv
from ATRI.rule import (
- is_in_banlist,
+ is_block,
is_in_dormant,
is_in_service
)
@@ -29,9 +13,10 @@ from ATRI.rule import (
__plugin_name__ = "laugh"
-get_laugh = on_command(
- "来句笑话",
- rule=is_in_banlist() & is_in_dormant()
+get_laugh = sv.on_command(
+ name="看不懂的笑话",
+ cmd="来句笑话",
+ rule=is_block() & is_in_dormant()
& is_in_service(__plugin_name__)
)
@@ -51,9 +36,10 @@ async def _get_laugh(bot: Bot, event: MessageEvent) -> None:
__plugin_name__ = "wty"
-me_to_you = on_message(
- rule=is_in_banlist() & is_in_dormant() & is_in_service(__plugin_name__)
+me_to_you = sv.on_message(
+ rule=is_block() & is_in_dormant() & is_in_service(__plugin_name__)
)
+sv.manual_reg_service("你又彳亍了")
@me_to_you.handle()
async def _me_to_you(bot: Bot, event: MessageEvent) -> None:
diff --git a/ATRI/plugins/github.py b/ATRI/plugins/github.py
index 118d6f5..167ca2f 100644
--- a/ATRI/plugins/github.py
+++ b/ATRI/plugins/github.py
@@ -1,26 +1,9 @@
-#!/usr/bin/env python3
-# -*- coding:utf-8 -*-
-'''
-File: github.py
-Created Date: 2021-02-26 23:22:34
-Author: Kyomotoi
-License: GPLv3
-Project: https://github.com/Kyomotoi/ATRI
---------
-Last Modified: Sunday, 7th March 2021 3:11:56 pm
-Modified By: Kyomotoi ([email protected])
---------
-Copyright (c) 2021 Kyomotoi
-'''
-
import re
import json
-
-from nonebot.plugin import on_message
from nonebot.adapters.cqhttp import Bot, MessageEvent
-from ATRI.rule import is_in_banlist, is_in_dormant
+from ATRI.service import Service as sv
+from ATRI.rule import is_block, is_in_dormant
from ATRI.utils.request import get_bytes
from ATRI.exceptions import RequestTimeOut
@@ -28,7 +11,8 @@ from ATRI.exceptions import RequestTimeOut
URL = "https://api.github.com/repos/{owner}/{repo}/issues/{issue_number}"
-github_issues = on_message(rule=is_in_banlist() & is_in_dormant())
+github_issues = sv.on_message(rule=is_block() & is_in_dormant())
+sv.manual_reg_service("GitHubIssue速览")
@github_issues.handle()
async def _github_issues(bot: Bot, event: MessageEvent) -> None:
diff --git a/ATRI/plugins/hitokoto.py b/ATRI/plugins/hitokoto.py
index ff686fc..3754125 100644
--- a/ATRI/plugins/hitokoto.py
+++ b/ATRI/plugins/hitokoto.py
@@ -1,33 +1,16 @@
-#!/usr/bin/env python3
-# -*- coding:utf-8 -*-
-'''
-File: hitokoto.py
-Created Date: 2021-02-04 17:40:21
-Author: Kyomotoi
-License: GPLv3
-Project: https://github.com/Kyomotoi/ATRI
---------
-Last Modified: Sunday, 7th March 2021 3:11:44 pm
-Modified By: Kyomotoi ([email protected])
---------
-Copyright (c) 2021 Kyomotoi
-'''
-
import os
import json
from pathlib import Path
from random import choice, randint
-
-from nonebot.plugin import on_command
from nonebot.adapters.cqhttp import Bot, MessageEvent
from ATRI.rule import (
- is_in_banlist,
+ is_block,
is_in_dormant,
is_in_service,
to_bot
)
+from ATRI.service import Service as sv
from ATRI.exceptions import LoadingError
from ATRI.utils.list import count_list, del_list_aim
@@ -38,10 +21,11 @@ sick_list = []
__plugin_name__ = 'hitokoto'
-hitokoto = on_command(
- "一言",
+hitokoto = sv.on_command(
+ name="Hitokoto",
+ cmd="一言",
aliases={"抑郁一下", "网抑云"},
- rule=is_in_banlist() & is_in_dormant()
+ rule=is_block() & is_in_dormant()
& is_in_service(__plugin_name__) & to_bot()
)
diff --git a/ATRI/plugins/key-repo/__init__.py b/ATRI/plugins/key-repo/__init__.py
new file mode 100644
index 0000000..4b2241c
--- /dev/null
+++ b/ATRI/plugins/key-repo/__init__.py
@@ -0,0 +1,171 @@
+import os
+import json
+import time
+from random import choice
+from pathlib import Path
+
+from nonebot.typing import T_State
+from nonebot.adapters.cqhttp import Bot, MessageEvent
+
+from ATRI.config import nonebot_config
+from ATRI.service import Service as sv
+from ATRI.rule import is_block, is_in_dormant, is_in_service, to_bot
+
+
+# 此功能未完善
+
+
+KEYREPO_DIV = Path('.') / 'ATRI' / 'data' / 'database' / 'KeyRepo'
+os.makedirs(KEYREPO_DIV, exist_ok=True)
+
+
+__plugin_name__ = "KeyRepo"
+
+keyrepo = sv.on_message(rule=is_block()
+ & is_in_dormant()
+ & is_in_service(__plugin_name__)
+ & to_bot())
+
+async def _keyrepo(bot: Bot, event: MessageEvent) -> None:
+ msg = str(event.get_message())
+
+ file_name = "data.json"
+ path = KEYREPO_DIV / file_name
+ try:
+ data = json.loads(path.read_bytes())
+ except:
+ with open(path, 'w') as r:
+ r.write(json.dumps({}))
+ data = {}
+
+ for key in data.keys():
+ if key in msg:
+ await keyrepo.finish(choice(data[key]))
+
+
+train = sv.on_command(
+ name="调教",
+ cmd="/train",
+ rule=is_block()
+)
+
[email protected]("key", prompt="哦哦哦要开始学习了!请告诉咱知识点")
+async def _train(bot: Bot, event: MessageEvent, state: T_State) -> None:
+ if "[CQ" in state["key"]:
+ await train.reject("仅支持纯文本呢...")
+
[email protected]("repo", prompt="咱该如何回答呢?")
+async def _trainR(bot: Bot, event: MessageEvent, state: T_State) -> None:
+ if "[CQ" in state["repo"]:
+ await train.reject("仅支持纯文本呢...")
+
+ if state["key"] == "-d":
+ file_name = "review.json"
+ path = KEYREPO_DIV / file_name
+ try:
+ data = json.loads(path.read_bytes())
+ except:
+ data = {}
+
+ key = state["repo"]
+ if key not in data:
+ await train.finish("未发现该待审核的知识点呢...")
+ else:
+ msg = (
+ f"Key: {key}\n"
+ f"Repo: {data[key]['repo']}\n"
+ "已经从咱的审核列表移除!"
+ )
+ del data[key]
+ with open(path, 'w') as r:
+ r.write(json.dumps(data))
+ await train.finish(msg)
+ elif state["key"] == "-i":
+ file_name = "review.json"
+ path = KEYREPO_DIV / file_name
+ try:
+ data = json.loads(path.read_bytes())
+ except:
+ data = {}
+ if state["repo"] not in data:
+ await train.finish("未发现该知识点呢")
+ key = data[state["repo"]]
+
+ msg = (
+ f"用户: {key['user']}\n"
+ f"知识点: {state['repo']}"
+ f"回复: {key['repo']}"
+ f"时间: {key['time']}"
+ "/train -r 知识点 y/n"
+ )
+ await train.finish(msg)
+ elif state["key"] == "-ls":
+ file_name = "review.json"
+ path = KEYREPO_DIV / file_name
+ try:
+ data = json.loads(path.read_bytes())
+ except:
+ data = {}
+ keys = ",".join(data.keys())
+ msg = f"目前等待审核的有如下:\n{keys}"
+ await train.finish(msg)
+ elif state["key"] == "-r":
+ file_name = "review.json"
+ path = KEYREPO_DIV / file_name
+ try:
+ data = json.loads(path.read_bytes())
+ except:
+ data = {}
+
+
+ key = state["key"]
+ repo = state["repo"]
+ user = event.get_user_id()
+ if user not in nonebot_config["superusers"]:
+ file_name = "review.json"
+ path = KEYREPO_DIV / file_name
+ try:
+ data = json.loads(path.read_bytes())
+ except:
+ data = {}
+
+ if key in data:
+ msg = "欸欸欸,该词还在等待咱的审核,请先等先来的审核完再提交吧..."
+ await train.finish(msg)
+ else:
+ data[key] = {
+ "user": user,
+ "repo": repo,
+ "time": time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())
+ }
+ with open(path, 'r') as r:
+ r.write(json.dumps(data, indent=4))
+
+ msg = (
+ "欸欸欸这不错欸!不过,还是先等待咱审核审核,"
+ "如想撤销本次学习,请发送 /train -d 知识点"
+ )
+ await train.finish(msg)
+
+ else:
+ file_name = "data.json"
+ path = KEYREPO_DIV / file_name
+ try:
+ data = json.loads(path.read_bytes())
+ except:
+ data = {}
+
+ if key in data:
+ repo_list: list = data[key]
+ repo_list.append(repo)
+ data[key] = repo_list
+ msg = f"哦哦哦,{key}原来还有这样的回复,学到了~!"
+ await bot.send(event, msg)
+ else:
+ data[key] = [repo]
+ msg = "好欸,咱学到了新的知识点!"
+ await bot.send(event, msg)
+
+ with open(path, 'w') as r:
+ r.write(json.dumps(data))
diff --git a/ATRI/plugins/rich/__init__.py b/ATRI/plugins/rich/__init__.py
index 7f9369e..7c8179d 100644
--- a/ATRI/plugins/rich/__init__.py
+++ b/ATRI/plugins/rich/__init__.py
@@ -1,30 +1,13 @@
-#!/usr/bin/env python3
-# -*- coding:utf-8 -*-
-'''
-File: __init__.py
-Created Date: 2021-02-07 09:34:23
-Author: Kyomotoi
-License: GPLv3
-Project: https://github.com/Kyomotoi/ATRI
---------
-Last Modified: Sunday, 7th March 2021 3:14:28 pm
-Modified By: Kyomotoi ([email protected])
---------
-Copyright (c) 2021 Kyomotoi
-'''
-
import re
import json
from aiohttp.client import ClientSession
-
from nonebot.adapters.cqhttp import Bot, MessageEvent
-from nonebot.plugin import on_message
+from ATRI.service import Service as sv
from ATRI.utils.request import get_bytes
from ATRI.utils.list import count_list, del_list_aim
from ATRI.rule import (
- is_in_banlist,
+ is_block,
is_in_dormant,
)
@@ -34,9 +17,10 @@ from .data_source import dec
waiting_list = []
-bilibili_rich = on_message(
- rule=is_in_banlist() & is_in_dormant()
+bilibili_rich = sv.on_message(
+ rule=is_block() & is_in_dormant()
)
+sv.manual_reg_service("监听b站小程序")
@bilibili_rich.handle()
async def _bilibili_rich(bot: Bot, event: MessageEvent) -> None:
diff --git a/ATRI/plugins/rich/data_source.py b/ATRI/plugins/rich/data_source.py
index d3e7d6e..32ac219 100644
--- a/ATRI/plugins/rich/data_source.py
+++ b/ATRI/plugins/rich/data_source.py
@@ -1,19 +1,3 @@
-#!/usr/bin/env python3
-# -*- coding:utf-8 -*-
-'''
-File: data_source.py
-Created Date: 2021-02-07 09:34:31
-Author: Kyomotoi
-License: GPLv3
-Project: https://github.com/Kyomotoi/ATRI
---------
-Last Modified: Sunday, 7th March 2021 3:14:31 pm
-Modified By: Kyomotoi ([email protected])
---------
-Copyright (c) 2021 Kyomotoi
-'''
-
table = 'fZodR9XQDSUm21yCkr6zBqiveYah8bt4xsWpHnJE7jL5VG3guMTKNPAwcF'
tr = {}
for i in range(58):
diff --git a/ATRI/plugins/status.py b/ATRI/plugins/status.py
index fe10dea..c3b033c 100644
--- a/ATRI/plugins/status.py
+++ b/ATRI/plugins/status.py
@@ -1,36 +1,30 @@
-#!/usr/bin/env python3
-# -*- coding:utf-8 -*-
-'''
-File: status.py
-Created Date: 2021-02-19 21:52:56
-Author: Kyomotoi
-License: GPLv3
-Project: https://github.com/Kyomotoi/ATRI
---------
-Last Modified: Sunday, 7th March 2021 3:11:30 pm
-Modified By: Kyomotoi ([email protected])
---------
-Copyright (c) 2021 Kyomotoi
-'''
-
import psutil
-
-from nonebot.plugin import on_command
from nonebot.adapters.cqhttp import Bot, MessageEvent
-from ATRI.rule import is_in_banlist
+from ATRI.log import logger as log
+from ATRI.service import Service as sv
+from ATRI.rule import is_block
from ATRI.exceptions import GetStatusError
+from ATRI.utils.apscheduler import scheduler
+from ATRI.config import nonebot_config
-ping = on_command("/ping", rule=is_in_banlist())
+ping = sv.on_command(
+ name="测试机器人",
+ cmd="/ping",
+ rule=is_block()
+)
@ping.handle()
async def _ping(bot: Bot, event: MessageEvent) -> None:
await ping.finish("I'm fine.")
-status = on_command("/status", rule=is_in_banlist())
+status = sv.on_command(
+ name="检查机器人状态",
+ cmd="/status",
+ rule=is_block()
+)
@status.handle()
async def _status(bot: Bot, event: MessageEvent) -> None:
@@ -64,3 +58,48 @@ async def _status(bot: Bot, event: MessageEvent) -> None:
) + msg
await status.finish(msg0)
+
+
+ 'interval',
+ minutes=5,
+ misfire_grace_time=10
+)
+async def _():
+ log.info("开始自检")
+ try:
+ cpu = psutil.cpu_percent(interval=1)
+ mem = psutil.virtual_memory().percent
+ disk = psutil.disk_usage("/").percent
+ inteSENT = psutil.net_io_counters().bytes_sent / 1000000 # type: ignore
+ inteRECV = psutil.net_io_counters().bytes_sent / 1000000 # type: ignore
+ except GetStatusError:
+ raise GetStatusError("Failed to get status.")
+
+ msg = ""
+ if cpu > 80: # type: ignore
+ msg = "咱感觉有些头晕..."
+ if mem > 80:
+ msg = "咱感觉有点头晕并且有点累..."
+ elif mem > 80:
+ msg = "咱感觉有点累..."
+ elif disk > 80:
+ msg = "咱感觉身体要被塞满了..."
+ else:
+ log.info("运作正常")
+ return
+
+ msg0 = (
+ "Self status:\n"
+ f"* CPU: {cpu}%\n"
+ f"* MEM: {mem}%\n"
+ f"* DISK: {disk}%\n"
+ f"* netSENT: {inteSENT}MB\n"
+ f"* netRECV: {inteRECV}MB\n"
+ ) + msg
+
+ for sup in nonebot_config["superusers"]:
+ await sv.NetworkPost.send_private_msg(
+ user_id=sup,
+ message=msg0
+ )
diff --git a/ATRI/plugins/utils/__init__.py b/ATRI/plugins/utils/__init__.py
index 47c3b47..10b3317 100644
--- a/ATRI/plugins/utils/__init__.py
+++ b/ATRI/plugins/utils/__init__.py
@@ -1,26 +1,9 @@
-#!/usr/bin/env python3
-# -*- coding:utf-8 -*-
-'''
-File: __init__.py
-Created Date: 2021-02-04 21:14:48
-Author: Kyomotoi
-License: GPLv3
-Project: https://github.com/Kyomotoi/ATRI
---------
-Last Modified: Sunday, 7th March 2021 3:14:16 pm
-Modified By: Kyomotoi ([email protected])
---------
-Copyright (c) 2021 Kyomotoi
-'''
-
import re
-
-from nonebot.plugin import on_command
from nonebot.adapters.cqhttp import Bot, MessageEvent
+from ATRI.service import Service as sv
from ATRI.rule import (
- is_in_banlist,
+ is_block,
is_in_dormant,
is_in_service
)
@@ -29,9 +12,10 @@ from .data_source import roll_dice
__plugin_name__ = "roll"
-roll = on_command(
- "/roll",
- rule=is_in_banlist() & is_in_dormant()
+roll = sv.on_command(
+ name="roll一下",
+ cmd="/roll",
+ rule=is_block() & is_in_dormant()
& is_in_service(__plugin_name__)
)
@@ -50,18 +34,3 @@ async def _(bot: Bot, event: MessageEvent, state: dict) -> None:
await roll.finish("请输入正确的参数!!\ndemo:1d10 或 2d10+2d10")
await roll.finish(roll_dice(resu))
-
-
-# __plugin_name__ = "fakemsg"
-
-# fakemsg = on_command(
-# "/fakemsg",
-# rule=is_in_banlist() & is_in_dormant()
-# & is_in_service(__plugin_name__)
-# )
-
-# @fakemsg.handle()
-# async def _fakemsg(bot: Bot, event: MessageEvent, state: dict) -> None:
-# ...
-
-# @fakemsg.got() \ No newline at end of file
diff --git a/ATRI/plugins/utils/data_source.py b/ATRI/plugins/utils/data_source.py
index 6d018f1..f41a1d1 100644
--- a/ATRI/plugins/utils/data_source.py
+++ b/ATRI/plugins/utils/data_source.py
@@ -1,19 +1,3 @@
-#!/usr/bin/env python3
-# -*- coding:utf-8 -*-
-'''
-File: data_source.py
-Created Date: 2021-02-04 21:14:59
-Author: Kyomotoi
-License: GPLv3
-Project: https://github.com/Kyomotoi/ATRI
---------
-Last Modified: Sunday, 7th March 2021 3:14:22 pm
-Modified By: Kyomotoi ([email protected])
---------
-Copyright (c) 2021 Kyomotoi
-'''
-
import re
import random