summaryrefslogtreecommitdiff
path: root/ATRI/plugins/manage/modules/broadcast.py
diff options
context:
space:
mode:
Diffstat (limited to 'ATRI/plugins/manage/modules/broadcast.py')
1 files changed, 72 insertions, 0 deletions
diff --git a/ATRI/plugins/manage/modules/broadcast.py b/ATRI/plugins/manage/modules/broadcast.py
new file mode 100644
index 0000000..5086fcf
--- /dev/null
+++ b/ATRI/plugins/manage/modules/broadcast.py
@@ -0,0 +1,72 @@
+import asyncio
+from random import randint
+
+from nonebot.typing import T_State
+from nonebot.permission import SUPERUSER
+from nonebot.adapters.cqhttp import Bot, MessageEvent
+
+from ATRI.service import Service as sv
+
+
+__doc__ = """
+群发内容
+权限组:维护者
+用法:
+ 广播 内容
+"""
+
+broadcast = sv.on_command(
+ cmd="广播",
+ docs=__doc__,
+ permission=SUPERUSER
+)
+
+@broadcast.args_parser # type: ignore
+async def _broadcast_load(bot: Bot,
+ event: MessageEvent,
+ state: T_State) -> None:
+ msg = str(event.message)
+ quit_list = ['算了', '罢了', '取消']
+ if msg in quit_list:
+ await broadcast.finish('好吧...')
+ if not msg:
+ await broadcast.reject('想群发啥呢0w0')
+ else:
+ state['msg'] = msg
+
+@broadcast.handle()
+async def _broadcast(bot: Bot, event: MessageEvent, state: T_State) -> None:
+ msg = str(event.message).strip()
+ if msg:
+ state['msg'] = msg
+
+@broadcast.got('msg', prompt='请告诉咱需要群发的内容~!')
+async def _deal_broadcast(bot: Bot,
+ event: MessageEvent,
+ state: T_State) -> None:
+ msg = state['msg']
+ group_list = await bot.get_group_list()
+ succ_list = []
+ err_list = []
+
+ for group in group_list:
+ await asyncio.sleep(randint(0, 2))
+ try:
+ await bot.send_group_msg(group_id=group["group_id"],
+ message=msg)
+ except BaseException:
+ err_list.append(group["group_id"])
+
+ msg0 = ""
+ for i in err_list:
+ msg0 += f" {i}\n"
+
+ repo_msg = (
+ f"推送消息:\n{msg}\n"
+ "————————\n"
+ f"总共:{len(group_list)}\n"
+ f"成功推送:{len(succ_list)}\n"
+ f"失败[{len(err_list)}]个:\n"
+ ) + msg0
+
+ await broadcast.finish(repo_msg)