1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
|
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)
|