Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: add simple RabbitMQ support #241

Open
wants to merge 11 commits into
base: main
Choose a base branch
from
Open

Conversation

hank9999
Copy link
Contributor

@hank9999 hank9999 commented Nov 19, 2024

不小心把 #216 的分支删了 重新开一个PR
基于 #239 #240

与源保持高度用法兼容性,不影响以前正在跑的所有代码
只需另加一个生产者,消费者添加rabbitmq参数 即可正常运行
可启动多个消费端处理数据

pip install -U git+https://github.com/hank9999/khl.py@rabbitmq 快速安装体验(

kook -> khl.py 生产者 (解析数据) -> RabbitMQ -> khl.py 消费者 (处理数据)
传递过程中 从生产者->消费者端数据为避免明文传输,进行AES加密

AES 密钥采用 PBKDF2 迭代 10万次生成结果,增强安全性

# 注释项代表有默认值
# compress 参数会影响 RabbitMQ 消息传递中是否压缩

rabbitmq = RabbitMQ(
    # host='127.0.0.1',  # RabbitMQ 服务地址
    # port=5672,  # RabbitMQ 服务端口
    # queue='kook',  # RabbitMQ 队列名称
    # qos=10,   # 速率控制 (该选项控制每次从服务器抓取多少条消息, 控制本地queue内消息数量)
    # heartbeat=30,  # 心跳时间 (RabbitMQ 协议规定每二分之一心跳时间发一次心跳 一般5-60 不推荐小于5)
    login='bot',  # 强制填写 认证信息
    password='password',  # 强制填写 认证信息
    # key='',  # 可自定义高强度 key, 建议自定义大于16位, 不填由 login+password+queue+compress+key_digits 生成
    # salt='',  # 用于 PBKDF2 算法迭代密钥, 建议自定义大于16位, 不填使用默认值
    # key_digits=32,  # 密钥位数 16位为AES128 24位为AES192 32位为AES256 不填默认32位 (密钥字节数)
    # compress=True  # 是否压缩数据
)
# 生产者
from khl.rabbitmq import RabbitMQProductionBot, RabbitMQ
rabbitmq = RabbitMQ(login='bot', password='password')

# 使用 rabbitmq 模块下的 RabbitMQProductionBot 替代 Bot 接收数据
# Cert Webhook 等与 Bot 保持一致
# 无 client, gate, out 选项, 这个对象只用于接收数据,不需要有HTTP请求/解析的功能
# 无 task 任务 如需任务需要在消费端添加
bot = RabbitMQProductionBot('token', rabbitmq=rabbitmq) 

# 与 Bot 启动方法保持兼容性
# bot.start()
bot.run()
# 消费者
from khl import Bot
from khl.rabbitmq import RabbitMQ, RabbitMQReceiver
rabbitmq = RabbitMQ(login='bot', password='password')

# 借助 PR #240, 使用自定义 Receiver 直接传入,无需修改任何原有逻辑
bot = Bot('token', receiver=RabbitMQReceiver(rabbitmq))

bot.run()

1. use aes256 by default
2. construct complex string if key is empty
3. add salt and pbkdf2 to improve key security
@hank9999
Copy link
Contributor Author

2024.12.10 更新
一、移除了没有使用的变量
二、增强安全性

  1. 默认使用 AES256 加密
  2. 空密钥时,构造一个包含更多变量的确定的字符串
  3. AES 加密密钥使用 PBKDF2 + 盐 迭代10万次结果

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant