diff options
author | Kyomotoi <0w0@imki.moe> | 2022-11-04 08:52:56 +0800 |
---|---|---|
committer | Kyomotoi <0w0@imki.moe> | 2022-11-04 08:52:56 +0800 |
commit | dddc29b9c18b9d646ff18144094584e2badbe384 (patch) | |
tree | 1f0ee0b0f48481316bc4d7f0a3383655e125c02d /ATRI/plugins/broadcast.py | |
parent | 1b211c3a9a882935c1653d2ce1a8f73ea9ea90f8 (diff) | |
download | ATRI-dddc29b9c18b9d646ff18144094584e2badbe384.tar.gz ATRI-dddc29b9c18b9d646ff18144094584e2badbe384.tar.bz2 ATRI-dddc29b9c18b9d646ff18144094584e2badbe384.zip |
🎨 跟随底层的更改, 规范代码风格
Diffstat (limited to 'ATRI/plugins/broadcast.py')
-rw-r--r-- | ATRI/plugins/broadcast.py | 142 |
1 files changed, 65 insertions, 77 deletions
diff --git a/ATRI/plugins/broadcast.py b/ATRI/plugins/broadcast.py index 43ce698..c391230 100644 --- a/ATRI/plugins/broadcast.py +++ b/ATRI/plugins/broadcast.py @@ -1,58 +1,54 @@ import json import random import asyncio -from pathlib import Path from nonebot.matcher import Matcher from nonebot.params import CommandArg, ArgPlainText -from nonebot.adapters.onebot.v11 import Bot, Message, MessageEvent -from nonebot.adapters.onebot.v11 import GroupMessageEvent, PrivateMessageEvent +from nonebot.adapters.onebot.v11 import Message, MessageEvent +from nonebot.adapters.onebot.v11 import GroupMessageEvent +from ATRI.bot import Bot from ATRI.rule import to_bot from ATRI.service import Service -from ATRI.permission import MASTER, GROUP_ADMIN +from ATRI.utils import FileDealer +from ATRI.permission import ADMIN, MASTER from ATRI.message import MessageBuilder -BC_PATH = Path(".") / "data" / "plugins" / "broadcast" -BC_PATH.mkdir(parents=True, exist_ok=True) - -_BROADCAST_REPO = ( +__BROADCAST_REPO_FORMAT = ( MessageBuilder("广播报告:") .text("信息: {msg}") - .text("预计推送群:{len_g} 个") - .text("成功: {su_g} 失败: {fl_g}") - .text("失败群列表: {f_g}") + .text("预计推送群:{len_group} 个") + .text("成功: {success_group} 失败: {failed_group}") + .text("失败群列表:") + .text("{failed_group_list}") .done() ) -class BroadCast: - @staticmethod - def load_rej_list() -> list: - data = list() - path = BC_PATH / "rej_list.json" - if not path.is_file(): - with open(path, "w", encoding="utf-8") as w: - w.write(json.dumps(data)) - return data +async def __load_reject_list() -> list: + path = plugin.get_path() / "rej_list.json" + file = FileDealer(path) + if not path.is_file(): + await file.write(list()) + return list() + + return list(file.json()) - return json.loads(path.read_bytes()) - @classmethod - def store_rej_list(cls, data: list): - path = BC_PATH / "rej_list.json" - if not path.is_file(): - cls.load_rej_list() +async def __store_reject_list(data: list) -> None: + path = plugin.get_path() / "rej_list.json" + file = FileDealer(path) + if not path.is_file(): + await __load_reject_list() - with open(path, "w", encoding="utf-8") as w: - w.write(json.dumps(data)) + await file.write(json.dumps(data)) -bc = Service("广播").document("向bot所在的所有群发送信息").only_admin(True).rule(to_bot()) +plugin = Service("广播").document("向bot所在的所有群发送信息").rule(to_bot()) -caster = bc.on_command("广播", "向bot所在的所有群发送信息,有防寄延迟", aliases={"bc"}, permission=MASTER) +caster = plugin.on_command("广播", "向bot所在的群发送信息", aliases={"/bc"}, permission=MASTER) @caster.handle() @@ -62,73 +58,65 @@ async def _(matcher: Matcher, args: Message = CommandArg()): matcher.set_arg("bc_msg", args) -@caster.got("bc_msg", "想要咱群发什么呢?") -async def _(bot: Bot, event: MessageEvent, s_msg: str = ArgPlainText("bc_msg")): - w_group = await bot.get_group_list() +@caster.got("bc_msg", prompt="需要咱广播啥呢") +async def _(bot: Bot, event: MessageEvent, msg: str = ArgPlainText("bc_msg")): + group_list = await bot.get_group_list() + if not group_list: + await caster.finish("你还没让咱加入任何群呢...") - await bot.send(event, "正在推送...(每个群延迟1~3s)") + await caster.send("正在推送...(每群延迟2-4s)") - w_msg = Message(f"来自维护者的信息:\n{s_msg}") + bc_msg = Message(f"来自维护者的消息:\n{msg}") - su_g = list() - fl_g = list() - for i in w_group: + success_group = list() + failed_group = list() + for i in group_list: group_id = i["group_id"] try: - await bot.send_group_msg(group_id=group_id, message=w_msg) - su_g.append(group_id) + await bot.send_group_msg(group_id=group_id, message=bc_msg) + success_group.append(group_id) except Exception: - fl_g.append(group_id) + failed_group.append(group_id) - await asyncio.sleep(random.randint(2, 3)) + await asyncio.sleep(random.randint(2, 4)) - repo_msg = _BROADCAST_REPO.format( - msg=s_msg, - len_g=len(w_group), - su_g=su_g, - fl_g=fl_g, - f_g=", ".join(map(str, fl_g)), + result = __BROADCAST_REPO_FORMAT.format( + msg=bc_msg, + len_group=len(group_list), + success_group=len(success_group), + failed_group=len(failed_group), + failed_group_list=", ".join(map(str, failed_group)), ) - await caster.finish(Message(repo_msg)) + await caster.finish(Message(result)) -rej_broadcast = bc.on_command("拒绝广播", "拒绝来自开发者的广播推送", permission=GROUP_ADMIN) +reject_bc = plugin.on_command("拒绝广播", "拒绝来自维护者的信息推送", permission=ADMIN) -@rej_broadcast.handle() -async def _(bot: Bot, event: GroupMessageEvent): +@reject_bc.handle() +async def _(event: GroupMessageEvent): group_id = str(event.group_id) - rej_g = BroadCast().load_rej_list() - if group_id in rej_g: - await rej_broadcast.finish("本群已在推送黑名单内辣!") + reject_list = await __load_reject_list() + if group_id in reject_list: + await reject_bc.finish("本群拒绝过啦~") else: - rej_g.append(group_id) - BroadCast().store_rej_list(rej_g) - await rej_broadcast.finish("完成~!已将本群列入推送黑名单") - + reject_list.append(group_id) + await __store_reject_list(reject_list) + await reject_bc.finish("完成!") -@rej_broadcast.handle() -async def _(event: PrivateMessageEvent): - await rej_broadcast.finish("该功能仅在群聊中触发...") +accept_bc = plugin.on_command("接受广播", "接受来自维护者的信息推送", permission=ADMIN) -acc_broadcast = bc.on_command("接受广播", "接受来自开发者的广播推送", permission=GROUP_ADMIN) - -@acc_broadcast.handle() -async def _(bot: Bot, event: GroupMessageEvent): +@accept_bc.handle() +async def _(event: GroupMessageEvent): group_id = str(event.group_id) - rej_g = BroadCast().load_rej_list() - if group_id in rej_g: - rej_g.remove(group_id) - BroadCast().store_rej_list(rej_g) - await rej_broadcast.finish("已将本群移除推送黑名单!") + reject_list = await __load_reject_list() + if group_id in reject_list: + reject_list.remove(group_id) + await __store_reject_list(reject_list) + await accept_bc.finish("完成!") else: - await rej_broadcast.finish("本群不在推送黑名单里呢...") - - -@acc_broadcast.handle() -async def _(event: PrivateMessageEvent): - await rej_broadcast.finish("该功能仅在群聊中触发...") + await accept_bc.finish("本群未拒绝广播呢...") |