Files
NeoBot/plugins/broadcast.py
K2cr2O1 54f74d0e73 feat: 添加Docker沙箱代码执行功能
- 新增Docker沙箱执行环境,提供安全隔离的代码执行能力
- 重构code_py插件,使用Docker容器替代子进程执行
- 添加docker配置项和权限检查功能
- 实现代码执行队列和并发控制
- 新增广播插件,仅限管理员使用
2026-01-06 22:56:00 +08:00

76 lines
2.4 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# -*- coding: utf-8 -*-
"""
管理员专用的广播插件
功能:
- 仅限管理员在私聊中调用。
- 通过回复一条消息并发送指令,将该消息转发给机器人所在的所有群聊。
- 此插件不写入 __plugin_meta__保持隐藏。
"""
from core.command_manager import matcher
from models import MessageEvent
from core.permission_manager import ADMIN
from core.logger import logger
@matcher.command("broadcast", "广播", permission=ADMIN)
async def broadcast_message(event: MessageEvent):
"""
广播指令处理器。
:param event: 消息事件对象。
"""
# 1. 检查是否为私聊消息
if event.group_id:
# 在群聊中调用时,静默处理,不予响应
return
# 2. 检查是否回复了某条消息
reply = event.reply
if not reply:
await event.reply("请通过“回复”一条您想广播的消息来使用此功能。")
return
# 3. 获取机器人所在的群聊列表
bot = event.bot
try:
group_list = await bot.get_group_list()
if not group_list:
await event.reply("机器人目前没有加入任何群聊。")
return
except Exception as e:
logger.error(f"[Broadcast] 获取群聊列表失败: {e}")
await event.reply(f"获取群聊列表时发生错误,无法广播。错误信息: {e}")
return
# 4. 遍历所有群聊并转发消息
success_count = 0
failed_count = 0
total_groups = len(group_list)
await event.reply(f"准备向 {total_groups} 个群聊广播消息,请稍候...")
for group in group_list:
group_id = group.get("group_id")
if not group_id:
continue
try:
# 直接转发被回复的消息
await bot.forward_message(
group_id=group_id,
message_id=reply.message_id
)
success_count += 1
logger.info(f"[Broadcast] 已成功将消息转发至群聊: {group_id}")
except Exception as e:
failed_count += 1
logger.error(f"[Broadcast] 转发消息至群聊 {group_id} 失败: {e}")
# 5. 向管理员报告结果
report_message = (
f"广播任务完成。\n"
f"总群聊数: {total_groups}\n"
f"成功: {success_count}\n"
f"失败: {failed_count}"
)
await event.reply(report_message)