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)