Skip to main content

基于PostgreSQL的分布式黑名单系统

Project description

NoneBot 分布式黑名单插件

✨ 基于 PostgreSQL 的分布式黑名单系统,支持多客户端名单同步 ✨

功能特性

  • 🚀 高性能内存缓存: 使用高效的二叉树结构实现毫秒级黑名单检查
  • 🌐 分布式架构: 基于 PostgreSQL 的中心化数据存储,支持多节点部署
  • 实时同步: 自动同步黑名单变更,确保所有节点数据一致
  • 🛡️ 自动防护: 定时检查群成员,自动踢出黑名单用户
  • 📊 操作日志: 完整的操作记录和版本控制

系统架构

本插件采用Hub-and-Spoke(中心辐射)架构:

  • Hub(中心节点): PostgreSQL 数据库,作为唯一数据源
  • Spoke(边缘节点): 各个 NoneBot 实例,维护本地高速缓存
         PostgreSQL Hub
              |
    +---------+---------+
    |         |         |
  Bot A     Bot B     Bot C
 (Cache)   (Cache)   (Cache)

💿 安装

使用 nb-cli 安装 在 nonebot2 项目的根目录下打开命令行, 输入以下指令即可安装
nb plugin install nonebot-plugin-distributed-blacklist
使用包管理器安装 在 nonebot2 项目的插件目录下, 打开命令行, 根据你使用的包管理器, 输入相应的安装命令
pip
pip install nonebot-plugin-distributed-blacklist
pdm
pdm add nonebot-plugin-distributed-blacklist
poetry
poetry add nonebot-plugin-distributed-blacklist
conda
conda install nonebot-plugin-distributed-blacklist

打开 nonebot2 项目根目录下的 pyproject.toml 文件, 在 [tool.nonebot] 部分追加写入

plugins = ["nonebot_plugin_distributed_blacklist"]

📊 数据库配置

本插件使用 PostgreSQL 数据库。在首次运行前,你需要完成数据库的初始化。

1. 创建数据库

首先,请在你的 PostgreSQL 服务中创建一个新的数据库。命令行示意:

psql -U blacklist_user
CREATE DATABASE distributed_blacklist OWNER blacklist_user;
\q

2. 初始化脚本

我们提供了一个初始化脚本 init_db.sql 来为你创建所有必需的数据表和索引。请使用 psql 命令行工具来执行它。

这是最推荐的方式:

psql -U blacklist_user -d distributed_blacklist -f /path/to/your/init_db.sql

执行成功且没有报错,则你的数据库已经准备就绪,可以配置插件并启动你的机器人了。

⚙️ 配置

在 NoneBot 配置文件中添加以下配置:

配置项 必填 默认值 说明
distributed_blacklist_db_host localhost PostgreSQL 服务器地址
distributed_blacklist_db_port 5432 PostgreSQL 端口
distributed_blacklist_db_name blacklist 数据库名称
distributed_blacklist_db_user blacklist 数据库用户名
distributed_blacklist_db_password 数据库密码
distributed_blacklist_admins [] 黑名单管理员QQ号列表
distributed_blacklist_sync_interval 300 同步间隔(秒)
distributed_blacklist_kick_check_interval 3600 踢人检查间隔(秒)
distributed_blacklist_db_max_connections 10 最大数据库连接数
distributed_blacklist_db_min_connections 2 最小数据库连接数
distributed_blacklist_enable_auto_kick true 启用定时踢人功能
distributed_blacklist_debug_mode false 调试模式,启用详细日志输出
distributed_blacklist_check_global false 阻断黑名单用户指令

配置示例

# .env 文件
DISTRIBUTED_BLACKLIST_DB_HOST=your_database_host
DISTRIBUTED_BLACKLIST_DB_PORT=5432
DISTRIBUTED_BLACKLIST_DB_NAME=blacklist
DISTRIBUTED_BLACKLIST_DB_USER=blacklist
DISTRIBUTED_BLACKLIST_DB_PASSWORD=your_password
DISTRIBUTED_BLACKLIST_ADMINS=[123456789, 987654321]  # 管理员QQ号列表

DISTRIBUTED_BLACKLIST_CHECK_GLOBAL=true
DISTRIBUTED_BLACKLIST_ENABLE_AUTO_KICK=true
DISTRIBUTED_BLACKLIST_SYNC_INTERVAL=300
DISTRIBUTED_BLACKLIST_KICK_CHECK_INTERVAL=3600
DISTRIBUTED_BLACKLIST_DEBUG_MODE=false

🎉 使用

指令表

以下指令默认都需要命令前缀,请根据自己的设置添加命令前缀,下略。

指令 别名 权限 范围 说明
添加黑名单 <QQ号> [原因] 加黑, 上黑, 加黑名单 SUPERUSERDISTRIBUTED_BLACKLIST_ADMINS 群聊 或 私聊 添加用户到黑名单
删除黑名单 <QQ号> 删黑, 下黑, 删黑名单 SUPERUSERDISTRIBUTED_BLACKLIST_ADMINS 群聊 或 私聊 从黑名单移除用户
搜索黑名单 <QQ号> 查黑, 查询黑名单, 查找黑名单 SUPERUSERDISTRIBUTED_BLACKLIST_ADMINS 群聊 或 私聊 查询用户是否在黑名单中
同步黑名单 SUPERUSERDISTRIBUTED_BLACKLIST_ADMINS 群聊 或 私聊 手动触发黑名单同步

使用说明

插件会在每次启动的第一次触发踢人时,检查所有所在群的权限。后续只从机器人是管理或群主的群检查黑名单。若在机器人已经缓存管理数据后才给机器人管理,则需要重启Nonebot并重新触发踢人流程。

黑名单数据使用增量同步,若增量同步出现问题,请删除LocalStore提供的插件数据目录下的blacklist_data.json

使用示例

# 添加黑名单
添加黑名单 123456789 恶意刷屏

# 删除黑名单
删除黑名单 123456789

# 搜索黑名单
搜索黑名单 123456789

# 同步黑名单
同步黑名单

📄 许可证

LGPLv3

致谢

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

nonebot_plugin_distributed_blacklist-1.0.3.tar.gz (24.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

File details

Details for the file nonebot_plugin_distributed_blacklist-1.0.3.tar.gz.

File metadata

File hashes

Hashes for nonebot_plugin_distributed_blacklist-1.0.3.tar.gz
Algorithm Hash digest
SHA256 2e3d3ba27e997b1db73e539eb553f2199aa4888daebac22b3c86d9624291bc44
MD5 f990b3337c6f8dba0651ebb121f0582d
BLAKE2b-256 3870d6882a0cb65a338de6185f6a71c18159af696acda8393c1ff62e385adf45

See more details on using hashes here.

File details

Details for the file nonebot_plugin_distributed_blacklist-1.0.3-py3-none-any.whl.

File metadata

File hashes

Hashes for nonebot_plugin_distributed_blacklist-1.0.3-py3-none-any.whl
Algorithm Hash digest
SHA256 662930a4fd66d7ce8ccc2c00c2d3de864adfc7b96f3c4f55666e1d6baf87348b
MD5 f1c58a702c4085197a6e9c7547732340
BLAKE2b-256 352acfc6c3310badd6e8b531618d7eb452dc1aebd3d651213dba542592f2d18f

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page