mirror of
https://github.com/xuthus83/LittlePaimon.git
synced 2024-12-16 13:40:53 +08:00
62 lines
2.3 KiB
Python
62 lines
2.3 KiB
Python
import re
|
||
import hoshino
|
||
from hoshino import sucmd, HoshinoBot
|
||
from hoshino.typing import CommandSession, CQHttpError, MessageSegment as ms
|
||
|
||
@sucmd('billing')
|
||
async def billing(session: CommandSession):
|
||
bot = session.bot
|
||
args = session.current_arg_text.split()
|
||
try:
|
||
for i in range(0, len(args), 2):
|
||
args[i] = int(args[i])
|
||
assert re.fullmatch(r'\d{4}-\d{2}-\d{2}', args[i + 1]), f"{args[i + 1]}不是合法日期"
|
||
except (ValueError, AssertionError) as e:
|
||
await session.finish(str(e))
|
||
|
||
try:
|
||
sid_group = {}
|
||
for sid in hoshino.get_self_ids():
|
||
gs = await bot.get_group_list(self_id=sid)
|
||
sid_group[sid] = [g['group_id'] for g in gs]
|
||
except CQHttpError as e:
|
||
await session.finish(str(e))
|
||
|
||
failed = []
|
||
not_found = []
|
||
for i in range(0, len(args), 2):
|
||
gid = args[i]
|
||
date = args[i + 1]
|
||
bill_sent_flag = False
|
||
for sid, groups in sid_group.items():
|
||
if gid in groups:
|
||
msg = f"本群bot将于/已于{date}到期,请及时联系{hoshino.config.SUPERUSERS[0]}续费,以免影响使用!"
|
||
oid = await get_group_owner_id(bot, sid, gid)
|
||
if oid:
|
||
msg = str(ms.at(oid)) + msg
|
||
try:
|
||
await bot.send_group_msg(self_id=sid, group_id=gid, message=msg)
|
||
bill_sent_flag = True
|
||
except CQHttpError:
|
||
failed.append(gid)
|
||
try:
|
||
await session.send(f"bot{sid} 向 群{gid} 发送billing失败!")
|
||
except CQHttpError:
|
||
hoshino.logger.critical((f"bot{sid} 向 群{gid} 发送billing失败!且回报SUPERUSER失败!"))
|
||
if not bill_sent_flag and gid not in failed:
|
||
not_found.append(gid)
|
||
|
||
msg = f"发送bill完毕!\n失败{len(failed)}:{failed}\n未找到{len(not_found)}:{not_found}"
|
||
await session.send(msg)
|
||
|
||
|
||
async def get_group_owner_id(bot: HoshinoBot, self_id, group_id) -> int:
|
||
try:
|
||
members = await bot.get_group_member_list(self_id=self_id, group_id=group_id)
|
||
except CQHttpError:
|
||
return 0
|
||
for m in members:
|
||
if m.get('role') == 'owner':
|
||
return m.get('user_id', 0)
|
||
return 0
|