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 协议
Metadata
Release files for nonebot-plugin-scheduled-broadcast 0.1.5
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| nonebot_plugin_scheduled_broadcast-0.1.5.tar.gz | 12.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| nonebot_plugin_scheduled_broadcast-0.1.5-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 21.5 kB
Release files / nonebot_plugin_scheduled_broadcast-0.1.5.tar.gz
| Download URL | nonebot_plugin_scheduled_broadcast-0.1.5.tar.gz |
|---|---|
| Size | 12.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
f552156402501670776969f5cb4a85830c2adf6290f4afd19e9ee02e0df7b8d0
|
|
BLAKE2b-256 checksum How to use checksums |
83732978709899696c89ff4dbc3490afb70792c89ada8102db6c5b57b5a036b0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
pdm/2.10.1 CPython/3.10.12
|
Release files / nonebot_plugin_scheduled_broadcast-0.1.5-py3-none-any.whl
| Download URL | nonebot_plugin_scheduled_broadcast-0.1.5-py3-none-any.whl |
|---|---|
| Size | 9.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
6c49a9f049d5b444fdd17aa8ad0bca41b59b382b5e850cf9c62060fe4c8d80c7
|
|
BLAKE2b-256 checksum How to use checksums |
d8fe6abfa6a3c529ee4ac11997eb0015f4621a5d99743df575a930171a7be304
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
pdm/2.10.1 CPython/3.10.12
|