TWT233 / khl.py

Python SDK for kaiheila.cn API
MIT License
243 stars 40 forks source link

feat: add simple RabbitMQ support #216

Open hank9999 opened 1 year ago

hank9999 commented 1 year ago

add simple RabbitMQ support

kook -> khl.py 生产者 (解析数据) -> RabbitMQ -> khl.py 消费者 (处理数据)

传递过程中 从生产者->消费者端数据为避免明文传输,进行AES加密

from khl import RabbitMQ, Bot, Cert

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

rabbitmq = RabbitMQ(
    # host='127.0.0.1',  # RabbitMQ 服务地址
    # port=5672,  # RabbitMQ 服务端口
    # queue='bot',  # RabbitMQ 队列名称
    # qos=10,   # 速率控制 (该选项控制每次从服务器抓取多少条消息, 控制本地queue内消息数量)
    # heartbeat=30,  # 心跳时间 (RabbitMQ 协议规定每二分之一心跳时间发一次心跳 一般5-60 不推荐小于5)
    login='bot',  # 强制填写 认证信息
    password='password',  # 强制填写 认证信息
    # key='xxxxxx',  # 可由 login+password 生成
    # key_digits=16,  # 密钥位数 16位为AES128 24位为AES192 32位为AES256
    # is_producer=False  # 是否为生产者
)

cert = Cert(
    token='xxx',
    # is_rabbitmq_receiver=True  # 若在 Bot 示例中没有传入 cert, 可由 rabbitmq 参数判断生成
)

---

# 生产者
# 注意 作为生产者时, RabbitMQ 中的 is_producer 为 True
rabbitmq = RabbitMQ(login='bot', password='password', is_producer=True)
bot = Bot('token', rabbitmq=rabbitmq)

# 注意 作为生产者时, cert 中的 is_rabbitmq_receiver 不填 或 False
bot = Bot(
    cert=Cert(token='xxx', verify_token='xxx', encrypt_key='xxx'),
    rabbitmq=rabbitmq
)

---

# 消费者
# 注意 作为消费者时, RabbitMQ 中的 is_producer 不填 或 False
rabbitmq = RabbitMQ(login='bot', password='password')
bot = Bot('token', rabbitmq=rabbitmq)

# 注意 作为消费者时, 若传入 cert, 则 cert 中的 is_rabbitmq_receiver 为 True
bot = Bot(
    cert=Cert(token='xxx', is_rabbitmq_receiver=True),
    rabbitmq=rabbitmq
)

---

# 最后启动
bot.run()
# await bot.start()
hank9999 commented 1 year ago

有点太大了,推荐是单独抽出一个文件夹/模块出来,比较整洁

单独抽出来的话层级也比较高(现在这个写法感觉就像是混在了基础功能层里,如果改成做在基础功能层之上、利用基础功能层的话会比较好)

好的,我会再修改一下