mirror of
https://github.com/xuthus83/LittlePaimon.git
synced 2025-04-12 23:29:37 +08:00
✨ 新增消息广播
:向多个群广播发送消息,修复深渊配队
旅行者未拥有问题
This commit is contained in:
parent
fb15e0754a
commit
7f762617ca
@ -1,5 +1,6 @@
|
||||
import os
|
||||
import asyncio
|
||||
import random
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
@ -7,9 +8,9 @@ from nonebot import on_command, get_bot
|
||||
from nonebot.permission import SUPERUSER
|
||||
from nonebot.plugin import PluginMetadata
|
||||
from nonebot.rule import to_me
|
||||
from nonebot.params import CommandArg, ArgPlainText
|
||||
from nonebot.params import CommandArg, ArgPlainText, Arg
|
||||
from nonebot.typing import T_State
|
||||
from nonebot.adapters.onebot.v11 import Message, MessageEvent, GroupMessageEvent
|
||||
from nonebot.adapters.onebot.v11 import Bot, Message, MessageEvent, GroupMessageEvent, ActionFailed
|
||||
from nonebot.adapters.onebot.v11.helpers import convert_chinese_to_bool
|
||||
from LittlePaimon import NICKNAME, DRIVER, SUPERUSERS, __version__
|
||||
from LittlePaimon.utils.files import save_json, load_json
|
||||
@ -50,6 +51,12 @@ run_cmd = on_command('cmd', permission=SUPERUSER, rule=to_me(), priority=1, bloc
|
||||
'pm_usage': '@bot cmd<命令>',
|
||||
'pm_priority': 4
|
||||
})
|
||||
broadcast = on_command('广播', permission=SUPERUSER, rule=to_me(), priority=1, block=True, state={
|
||||
'pm_name': 'broadcast',
|
||||
'pm_description': '向指定或所有群发送消息,需超级用户权限',
|
||||
'pm_usage': '@bot 广播<内容>',
|
||||
'pm_priority': 5
|
||||
})
|
||||
|
||||
|
||||
@update_cmd.handle()
|
||||
@ -75,7 +82,9 @@ async def _(event: MessageEvent):
|
||||
async def _(event: MessageEvent):
|
||||
if convert_chinese_to_bool(event.message):
|
||||
await reboot_cmd.send(f'{NICKNAME}开始执行重启,请等待{NICKNAME}的归来', at_sender=True)
|
||||
save_json({'session_type': event.message_type, 'session_id': event.group_id if isinstance(event, GroupMessageEvent) else event.user_id}, Path() / 'rebooting.json')
|
||||
save_json({'session_type': event.message_type,
|
||||
'session_id': event.group_id if isinstance(event, GroupMessageEvent) else event.user_id},
|
||||
Path() / 'rebooting.json')
|
||||
if sys.argv[0].endswith('nb'):
|
||||
sys.argv[0] = 'bot.py'
|
||||
os.execv(sys.executable, ['python'] + sys.argv)
|
||||
@ -102,6 +111,36 @@ async def _(event: MessageEvent, cmd: str = ArgPlainText('cmd')):
|
||||
await run_cmd.finish(f'{cmd}\n运行结果:\n{result}')
|
||||
|
||||
|
||||
@broadcast.handle()
|
||||
async def _(event: MessageEvent, state: T_State, msg: Message = CommandArg()):
|
||||
if msg:
|
||||
state['msg'] = msg
|
||||
else:
|
||||
await broadcast.finish('请给出要广播的消息', at_sender=True)
|
||||
|
||||
|
||||
@broadcast.got('groups', prompt='要广播到哪些群呢?多个群以空格隔开,或发送"全部"向所有群广播')
|
||||
async def _(event: MessageEvent, bot: Bot, msg: str = ArgPlainText('msg'), groups: str = ArgPlainText('groups')):
|
||||
group_list = await bot.get_group_list()
|
||||
group_list = [g['group_id'] for g in group_list]
|
||||
if groups in {'全部', '所有', 'all'}:
|
||||
send_groups = group_list
|
||||
else:
|
||||
groups = groups.split(' ')
|
||||
send_groups = [int(group) for group in groups if group.isdigit() and int(group) in group_list]
|
||||
if not send_groups:
|
||||
await broadcast.finish('要广播的群未加入或参数不对', at_sender=True)
|
||||
else:
|
||||
await broadcast.send(f'开始向{len(send_groups)}个群发送广播,每群间隔5~10秒', at_sender=True)
|
||||
for group in send_groups:
|
||||
try:
|
||||
await bot.send_group_msg(group_id=group, message=msg)
|
||||
await asyncio.sleep(random.randint(5, 10))
|
||||
except ActionFailed:
|
||||
await broadcast.send(f'群{group}发送消息失败')
|
||||
await broadcast.finish('消息广播发送完成', at_sender=True)
|
||||
|
||||
|
||||
@DRIVER.on_bot_connect
|
||||
async def _():
|
||||
if (Path() / 'rebooting.json').exists():
|
||||
|
@ -39,11 +39,11 @@ def update():
|
||||
except InvalidGitRepositoryError:
|
||||
return '没有发现git仓库,无法通过git更新'
|
||||
origin = repo.remotes.origin
|
||||
repo.git.stash()
|
||||
# repo.git.stash()
|
||||
try:
|
||||
origin.pull()
|
||||
except GitCommandError as e:
|
||||
return f'更新失败,错误信息:{e},请手动进行更新'
|
||||
finally:
|
||||
repo.git.stash('pop')
|
||||
# finally:
|
||||
# repo.git.stash('pop')
|
||||
return f'更新完成,版本:{__version__}\n最新更新日志为:\n{repo.head.commit.message.replace(":bug:", "🐛").replace(":sparkles:", "✨").replace(":memo:", "📝")}\n可使用命令[@bot 重启]重启{NICKNAME}'
|
||||
|
@ -16,7 +16,7 @@ async def draw_team_line(up: TeamRate, down: TeamRate, characters: List[str]) ->
|
||||
up.formation.sort(key=lambda x: x.star, reverse=True)
|
||||
down.formation.sort(key=lambda x: x.star, reverse=True)
|
||||
for i, member in enumerate(up.formation):
|
||||
owned = (member.name in characters or member.name in {'荧', '空'}) if characters else True
|
||||
owned = (member.name in characters or member.name == '旅行者') if characters else True
|
||||
await img.paste(await load_image(RESOURCE_BASE_PATH / 'icon' / f'{member.star}starbox.png'), (110 * i, 0))
|
||||
await img.paste(
|
||||
await load_image(RESOURCE_BASE_PATH / 'avatar' / f'{get_chara_icon(name=member.name)}.png', size=(100, 100)),
|
||||
@ -27,7 +27,7 @@ async def draw_team_line(up: TeamRate, down: TeamRate, characters: List[str]) ->
|
||||
await img.paste(await load_image(RESOURCE_BASE_PATH / 'icon' / 'grey_box.png'), (110 * i, 0))
|
||||
await img.text(f'{round(up.rate * 100, 2)}%', 439, 30, fm.get('bahnschrift_bold', 30), '#33231a')
|
||||
for i, member in enumerate(down.formation):
|
||||
owned = (member.name in characters or member.name in {'荧', '空'}) if characters else True
|
||||
owned = (member.name in characters or member.name == '旅行者') if characters else True
|
||||
await img.paste(await load_image(RESOURCE_BASE_PATH / 'icon' / f'{member.star}starbox.png'), (583 + 110 * i, 0))
|
||||
await img.paste(
|
||||
await load_image(RESOURCE_BASE_PATH / 'avatar' / f'{get_chara_icon(name=member.name)}.png', size=(100, 100)),
|
||||
|
Loading…
x
Reference in New Issue
Block a user