A customizable, adapter-independent, event-based scheduled broadcaster aiming for all nonebot2 adapters.
Project description
Nonebot Plugin Scheduled Broadcast
✨ 一款可配置的, 不依赖具体适配器的, 基于事件的定时广播插件. ✨
特性
- 基于一般事件
nonebot.adapters.Event构造, 从而支持全部协议的信息发送. - 定时广播由文件配置, 基于
apscheduler提供类crontab的配置参数.
安装
使用 nb-cli 安装
- 在
nonebot2项目的根目录下打开命令行, 输入以下指令即可安装:
nb-cli plugin install nonebot-plugin-scheduled-broadcast
使用包管理器安装
- 使用
pdm安装:
pdm add nonebot-plugin-scheduled-broadcast
- 使用
poetry安装:
poetry add nonebot-plugin-scheduled-broadcast
- 使用
pip安装:(虽然不太推荐但大概率没事)
pip install nonebot-plugin-scheduled-broadcast
使用
启动广播
- 保证发送消息的
id位于SUPERUSER用户组中. - 在需要启动广播的地方发送:
启动广播/enablebc [-bid 广播ID]
广播ID是可选项, 如果用户没有输入广播ID, 则会使用对应事件的session_id去掉user_id的结果作为广播ID, 如果此时广播ID为空, 则不支持自动生成广播ID.- 如果是第一次使用, 机器人在执行上述命令后, 在
nonebot2项目的根目录下生成一个名为broadcast_policy.json的配置文件. - 如果该机器人下已经存在相同的
广播ID, 配置文件将会保留, 同时广播作业将被恢复, 如果不需要手动修改配置文件, 不需要重启.
待触发指令的编写
- 由于本插件提供了一个装饰器, 可以按照如下方式编写待触发指令:
from nonebot import require
from nonebot.adapters import Event
from nonebot.log import logger
require("nonebot_plugin_scheduled_broadcast")
from nonebot_plugin_scheduled_broadcast import broadcast
@broadcast('example')
async def _(self_id: str, event: Event):
"""Scheduled example broadcast."""
message = generate_your_message()
try:
bot = nonebot.get_bots()[self_id] # select the target bot
await bot.send(event=event, message=message) # send message
except Exception:
logger.error(traceback.format_exc()) # print logs
- 触发指令编写完成以后, 启动机器人即可.
配置待触发指令的广播时间
- 保证发送消息的
id位于SUPERUSER用户组中. - 在需要启动广播的地方发送:
设置广播/setbc 待触发指令 [-bid 广播ID] [-s 秒] [-m 分] [-h 时] [-w 周数] [-d 星期几] [-D 日] [-M 月] [-Y 年]
广播ID是可选项, 如果用户没有输入广播ID, 则会使用对应事件的session_id去掉user_id的结果作为广播ID, 如果此时广播ID为空, 则不支持自动生成广播ID.- 配置项支持不含空格的
apscheduler语法, 当配置项留空时, 将会使得该指令不被触发.
关闭广播
- 保证发送消息的
id位于SUPERUSER用户组中. - 在需要关闭广播的地方发送:
关闭广播/disablebc [-bid 广播ID]
广播ID是可选项, 如果用户没有输入广播ID, 则会使用对应事件的session_id去掉user_id的结果作为广播ID, 如果此时广播ID为空, 则不支持自动生成广播ID.- 停止广播之后, 对应
广播ID中的enable将被置为false, 为保持可复用性, 其余部分将不会改变, 同时广播作业将被暂停, 如果不需要修改config中的内容, 不需要重启.
配置
broadcast_policy_location: 代表配置文件的存放位置, 默认值为./broadcast_policy.json
注意事项
- 由于每一个
Event几乎不会相同, 建议不要在同一个地方多次执行启动广播命令, 可能会刷屏的. - 由于用到了
pickle的序列化和反序列化功能, 而该功能具有潜在的安全风险, 请谨慎对待来源不明的配置文件. 如果不确定配置文件的安全性, 建议重新启动广播以生成新的广播ID, 然后替换配置文件中的config键里面的内容. - 目前版本使用了
nonebot.driver.Driver中的on_bot_connect和on_bot_disconnect钩子函数用于检测Bot的连接与断开, 但是适配器adapter-console中检测断开的时机过晚, 导致终端退出时scheduler仍然在后台运行, 不建议在生产环境引入该适配器.
配置文件的手动填写
- 一般而言, 配置文件不需要手动修改, 但是本指南仍然会介绍配置文件的结构:
{
"self_id": {
"broadcast_id": {
"config": {
"example": {"second": "*/30"}
},
"data": "event data (b64encode)",
"hash": "event hash (sha256)",
"enable": true
},
"another broadcast_id": {
// ...
}
},
"another self_id": {
// ...
}
}
config的可用配置与apscheduler一致, 以下给出一个示例, 该示例表示,example命令会在每天10:24, 每隔10秒被触发:
{
"config": {
"example": {
"hour": 10,
"minute": 24,
"second": "*/10"
}
}
}
协议
- 本项目使用 MIT 协议
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file nonebot_plugin_scheduled_broadcast-0.1.5.tar.gz.
File metadata
- Download URL: nonebot_plugin_scheduled_broadcast-0.1.5.tar.gz
- Upload date:
- Size: 12.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: pdm/2.10.1 CPython/3.10.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f552156402501670776969f5cb4a85830c2adf6290f4afd19e9ee02e0df7b8d0
|
|
| MD5 |
5081d8b5140e82632f37dbf53f6824b8
|
|
| BLAKE2b-256 |
83732978709899696c89ff4dbc3490afb70792c89ada8102db6c5b57b5a036b0
|
File details
Details for the file nonebot_plugin_scheduled_broadcast-0.1.5-py3-none-any.whl.
File metadata
- Download URL: nonebot_plugin_scheduled_broadcast-0.1.5-py3-none-any.whl
- Upload date:
- Size: 9.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: pdm/2.10.1 CPython/3.10.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6c49a9f049d5b444fdd17aa8ad0bca41b59b382b5e850cf9c62060fe4c8d80c7
|
|
| MD5 |
0dc34ec1d4f591640d8c39c583e5a6c8
|
|
| BLAKE2b-256 |
d8fe6abfa6a3c529ee4ac11997eb0015f4621a5d99743df575a930171a7be304
|