summaryrefslogtreecommitdiff
path: root/ATRI/plugins/essential.py
diff options
context:
space:
mode:
Diffstat (limited to 'ATRI/plugins/essential.py')
-rw-r--r--ATRI/plugins/essential.py206
1 files changed, 133 insertions, 73 deletions
diff --git a/ATRI/plugins/essential.py b/ATRI/plugins/essential.py
index 7f14882..72090e3 100644
--- a/ATRI/plugins/essential.py
+++ b/ATRI/plugins/essential.py
@@ -24,19 +24,19 @@ from nonebot.adapters.cqhttp import (
LuckyKingNotifyEvent,
GroupUploadNoticeEvent,
GroupRecallNoticeEvent,
- FriendRecallNoticeEvent,
+ FriendRecallNoticeEvent
)
import ATRI
from ATRI.log import logger
from ATRI.exceptions import WriteError
-from ATRI.config import Config
+from ATRI.config import BotSelfConfig
from ATRI.service import Service as sv
from ATRI.utils.cqcode import coolq_code_check
-PLUGIN_INFO_DIR = Path(".") / "ATRI" / "data" / "service" / "services"
-ESSENTIAL_DIR = Path(".") / "ATRI" / "data" / "database" / "essential"
+PLUGIN_INFO_DIR = Path('.') / 'ATRI' / 'data' / 'service' / 'services'
+ESSENTIAL_DIR = Path('.') / 'ATRI' / 'data' / 'database' / 'essential'
os.makedirs(PLUGIN_INFO_DIR, exist_ok=True)
os.makedirs(ESSENTIAL_DIR, exist_ok=True)
@@ -57,57 +57,71 @@ async def shutdown() -> None:
shutil.rmtree(PLUGIN_INFO_DIR)
logger.debug("成功!")
except Exception:
- repo = ("清理插件信息失败", "请前往 ATRI/data/service/services 下", "将 services 整个文件夹删除")
+ repo = (
+ '清理插件信息失败',
+ '请前往 ATRI/data/service/services 下',
+ '将 services 整个文件夹删除'
+ )
time.sleep(10)
raise Exception(repo)
@driver.on_bot_connect
async def connect(bot) -> None:
- for superuser in Config.BotSelfConfig.superusers:
- await sv.NetworkPost.send_private_msg(int(superuser), "WebSocket 成功连接,数据开始传输。")
+ for superuser in BotSelfConfig.superusers:
+ await sv.NetworkPost.send_private_msg(
+ int(superuser),
+ "WebSocket 成功连接,数据开始传输。"
+ )
@driver.on_bot_disconnect
async def disconnect(bot) -> None:
- for superuser in Config.BotSelfConfig.superusers:
+ for superuser in BotSelfConfig.superusers:
try:
- await sv.NetworkPost.send_private_msg(int(superuser), "WebSocket 貌似断开了呢...")
+ await sv.NetworkPost.send_private_msg(
+ int(superuser),
+ "WebSocket 貌似断开了呢..."
+ )
except:
logger.error("WebSocket 已断开,等待重连")
@run_preprocessor # type: ignore
-async def _check_block(
- matcher: Matcher, bot: Bot, event: MessageEvent, state: T_State
-) -> None:
+async def _check_block(matcher: Matcher,
+ bot: Bot,
+ event: MessageEvent,
+ state: T_State) -> None:
user = str(event.user_id)
try:
msg = str(event.message)
except:
msg = ""
if not sv.BlockSystem.auth_user(user):
- raise IgnoredException(f"Block user: {user}")
-
+ raise IgnoredException(f'Block user: {user}')
+
if not sv.Dormant.is_dormant():
if "/dormant" not in msg:
- raise IgnoredException("Bot has been dormant.")
-
+ raise IgnoredException('Bot has been dormant.')
+
if isinstance(event, GroupMessageEvent):
group = str(event.group_id)
if not sv.BlockSystem.auth_group(group):
- raise IgnoredException(f"Block group: {group}")
+ raise IgnoredException(f'Block group: {group}')
@run_preprocessor # type: ignore
-async def _store_message(matcher: Matcher, bot: Bot, event, state: T_State) -> None:
+async def _store_message(matcher: Matcher,
+ bot: Bot,
+ event,
+ state: T_State) -> None:
if isinstance(event, GroupMessageEvent):
if event.sub_type == "normal":
- now_time = datetime.now().strftime("%Y-%m-%d")
- GROUP_DIR = ESSENTIAL_DIR / "chat_history" / f"{event.group_id}"
+ now_time = datetime.now().strftime('%Y-%m-%d')
+ GROUP_DIR = ESSENTIAL_DIR / 'chat_history' / f'{event.group_id}'
os.makedirs(GROUP_DIR, exist_ok=True)
path = GROUP_DIR / f"{now_time}.chat.json"
- now_time = datetime.now().strftime("%Y%m%d-%H%M%S")
+ now_time = datetime.now().strftime('%Y%m%d-%H%M%S')
try:
data = json.loads(path.read_bytes())
@@ -133,12 +147,12 @@ async def _store_message(matcher: Matcher, bot: Bot, event, state: T_State) -> N
"area": event.sender.area,
"level": event.sender.level,
"role": event.sender.role,
- "title": event.sender.title,
+ "title": event.sender.title
},
- "to_me": str(event.to_me),
+ "to_me": str(event.to_me)
}
try:
- with open(path, "w", encoding="utf-8") as r:
+ with open(path, 'w', encoding='utf-8') as r:
r.write(json.dumps(data, indent=4))
logger.debug(f"写入消息成功,id: {event.message_id}")
except WriteError:
@@ -154,44 +168,52 @@ async def _store_message(matcher: Matcher, bot: Bot, event, state: T_State) -> N
# 处理:好友请求
request_friend_event = sv.on_request()
-
@request_friend_event.handle()
async def _request_friend_event(bot, event: FriendRequestEvent) -> None:
file_name = "request_friend.json"
path = ESSENTIAL_DIR / file_name
path.parent.mkdir(exist_ok=True, parents=True)
-
+
try:
data = json.loads(path.read_bytes())
except:
data = dict()
- data[event.flag] = {"user_id": event.user_id, "comment": event.comment}
+ data[event.flag] = {
+ "user_id": event.user_id,
+ "comment": event.comment
+ }
try:
- with open(path, "w", encoding="utf-8") as r:
- r.write(json.dumps(data, indent=4))
+ with open(path, 'w', encoding='utf-8') as r:
+ r.write(
+ json.dumps(
+ data, indent=4
+ )
+ )
except WriteError:
raise WriteError("Writing file failed!")
-
- for superuser in Config.BotSelfConfig.superusers:
+
+ for superuser in BotSelfConfig.superusers:
msg = (
"主人,收到一条好友请求:\n"
f"请求人:{event.get_user_id()}\n"
f"申请信息:{event.comment}\n"
f"申请码:{event.flag}"
)
- await sv.NetworkPost.send_private_msg(user_id=int(superuser), message=msg)
+ await sv.NetworkPost.send_private_msg(
+ user_id=int(superuser),
+ message=msg
+ )
# 处理:邀请入群,如身为管理,还附有入群请求
request_group_event = sv.on_request()
-
@request_group_event.handle()
async def _request_group_event(bot, event: GroupRequestEvent) -> None:
file_name = "request_group.json"
path = ESSENTIAL_DIR / file_name
path.parent.mkdir(exist_ok=True, parents=True)
-
+
try:
data = json.loads(path.read_bytes())
except:
@@ -200,42 +222,56 @@ async def _request_group_event(bot, event: GroupRequestEvent) -> None:
"user_id": event.user_id,
"group_id": event.group_id,
"sub_type": event.sub_type,
- "comment": event.comment,
+ "comment": event.comment
}
try:
- with open(path, "w", encoding="utf-8") as r:
- r.write(json.dumps(data, indent=4))
+ with open(path, 'w', encoding='utf-8') as r:
+ r.write(
+ json.dumps(
+ data, indent=4
+ )
+ )
except WriteError:
raise WriteError("Writing file failed!")
-
- for superuser in Config.BotSelfConfig.superusers:
+
+ for superuser in BotSelfConfig.superusers:
msg = (
"主人,收到一条入群请求:\n"
f"请求人:{event.get_user_id()}\n"
f"申请信息:{event.comment}\n"
f"申请码:{event.flag}"
)
- await sv.NetworkPost.send_private_msg(user_id=int(superuser), message=msg)
-
+ await sv.NetworkPost.send_private_msg(
+ user_id=int(superuser),
+ message=msg
+ )
+
# 处理群成员变动
group_member_event = sv.on_notice()
-
@group_member_event.handle()
async def _group_member_event(bot: Bot, event: GroupIncreaseNoticeEvent) -> None:
- msg = "好欸!事新人!\n" f"在下 {choice(list(Config.BotSelfConfig.nickname))} 哒!w!"
+ msg = (
+ "好欸!事新人!\n"
+ f"在下 {choice(list(BotSelfConfig.nickname))} 哒!w!"
+ )
await group_member_event.finish(msg)
-
@group_member_event.handle()
async def _gro(bot: Bot, event: GroupDecreaseNoticeEvent) -> None:
if event.is_tome():
if event.user_id != event.self_id:
return
- msg = "呜呜呜,主人" f"咱被群 {event.group_id} 里的 {event.operator_id} 扔出来了..."
- for superuser in Config.BotSelfConfig.superusers:
- await sv.NetworkPost.send_private_msg(user_id=int(superuser), message=msg)
+ msg = (
+ "呜呜呜,主人"
+ f"咱被群 {event.group_id} 里的 {event.operator_id} 扔出来了..."
+ )
+ for superuser in BotSelfConfig.superusers:
+ await sv.NetworkPost.send_private_msg(
+ user_id=int(superuser),
+ message=msg
+ )
else:
await group_member_event.finish("阿!有人离开了我们...")
@@ -243,82 +279,98 @@ async def _gro(bot: Bot, event: GroupDecreaseNoticeEvent) -> None:
# 处理群管理事件
group_admin_event = sv.on_notice()
-
@group_admin_event.handle()
async def _group_admin_event(bot: Bot, event: GroupAdminNoticeEvent) -> None:
if not event.is_tome():
return
-
- for superuser in Config.BotSelfConfig.superusers:
+
+ for superuser in BotSelfConfig.superusers:
await sv.NetworkPost.send_private_msg(
- user_id=int(superuser), message=f"好欸!主人!我在群 {event.group_id} 成为了管理!!"
+ user_id=int(superuser),
+ message=f"好欸!主人!我在群 {event.group_id} 成为了管理!!"
)
# 处理群禁言事件
group_ban_event = sv.on_notice()
-
@group_ban_event.handle()
async def _group_ban_event(bot: Bot, event: GroupBanNoticeEvent) -> None:
if not event.is_tome():
return
-
+
if event.duration:
msg = (
"那个..。,主人\n"
f"咱在群 {event.group_id} 被 {event.operator_id} 塞上了口球...\n"
f"时长...是 {event.duration} 秒"
)
- for superuser in Config.BotSelfConfig.superusers:
- await sv.NetworkPost.send_private_msg(user_id=int(superuser), message=msg)
+ for superuser in BotSelfConfig.superusers:
+ await sv.NetworkPost.send_private_msg(
+ user_id=int(superuser),
+ message=msg
+ )
else:
- msg = "好欸!主人\n" f"咱在群 {event.group_id} 被 {event.operator_id} 上的口球解除了!"
- for superuser in Config.BotSelfConfig.superusers:
- await sv.NetworkPost.send_private_msg(user_id=int(superuser), message=msg)
+ msg = (
+ "好欸!主人\n"
+ f"咱在群 {event.group_id} 的口球被 {event.operator_id} 解除了!"
+ )
+ for superuser in BotSelfConfig.superusers:
+ await sv.NetworkPost.send_private_msg(
+ user_id=int(superuser),
+ message=msg
+ )
# 处理群红包运气王事件
lucky_read_bag_event = sv.on_notice()
-
@lucky_read_bag_event.handle()
async def _lucky_read_bag_event(bot, event: LuckyKingNotifyEvent) -> None:
- msg = "8行,这可忍?" f"gkd [CQ:at,qq={event.user_id}] 发一个!"
+ msg = (
+ "8行,这可忍?"
+ f"gkd [CQ:at,qq={event.user_id}] 发一个!"
+ )
await lucky_read_bag_event.finish(Message(msg))
# 处理群文件上传事件
group_file_upload_event = sv.on_notice()
-
@group_file_upload_event.handle()
-async def _group_file_upload_event(bot, event: GroupUploadNoticeEvent) -> None:
+async def _group_file_upload_event(bot,
+ event: GroupUploadNoticeEvent) -> None:
await group_file_upload_event.finish("让我康康传了啥好东西")
# 处理撤回事件
recall_event = sv.on_notice()
-
@recall_event.handle()
async def _recall_event(bot: Bot, event: GroupRecallNoticeEvent) -> None:
try:
repo = await bot.get_msg(message_id=event.message_id)
except:
return
-
+
group = event.group_id
repo = str(repo["message"])
check = await coolq_code_check(repo, group=group)
if not check:
repo = repo.replace("CQ", "QC")
- msg = "主人,咱拿到了一条撤回信息!\n" f"{event.user_id}@[群:{event.group_id}]\n" "撤回了\n" f"{repo}"
-
- for superuser in Config.BotSelfConfig.superusers:
- await sv.NetworkPost.send_private_msg(user_id=int(superuser), message=msg)
+ msg = (
+ "主人,咱拿到了一条撤回信息!\n"
+ f"{event.user_id}@[群:{event.group_id}]\n"
+ "撤回了\n"
+ f"{repo}"
+ )
+ for superuser in BotSelfConfig.superusers:
+ await sv.NetworkPost.send_private_msg(
+ user_id=int(superuser),
+ message=msg
+ )
@recall_event.handle()
async def _rec(bot: Bot, event: FriendRecallNoticeEvent) -> None:
@@ -326,15 +378,23 @@ async def _rec(bot: Bot, event: FriendRecallNoticeEvent) -> None:
repo = await bot.get_msg(message_id=event.message_id)
except:
return
-
+
user = event.user_id
repo = str(repo["message"])
check = await coolq_code_check(repo, user)
if not check:
repo = repo.replace("CQ", "QC")
-
- msg = "主人,咱拿到了一条撤回信息!\n" f"{event.user_id}@[私聊]" "撤回了\n" f"{repo}"
+
+ msg = (
+ "主人,咱拿到了一条撤回信息!\n"
+ f"{event.user_id}@[私聊]"
+ "撤回了\n"
+ f"{repo}"
+ )
await bot.send(event, "咱看到惹~!")
- for superuser in Config.BotSelfConfig.superusers:
- await sv.NetworkPost.send_private_msg(user_id=int(superuser), message=msg)
+ for superuser in BotSelfConfig.superusers:
+ await sv.NetworkPost.send_private_msg(
+ user_id=int(superuser),
+ message=msg
+ )