OPQBot-NT
  1. WebSocket
OPQBot-NT
  • 🔮 OPQBot搭建指南 🔮
  • 🤔 白嫖TOKEN 指南🤔
  • 🐱 OPQ酸Q 🐱
  • 登录接口
    • 扫码登录
      GET
    • 离线账号
      POST
    • 配置文件登陆
      GET
  • 发送消息
    • 🤗 发送消息结构 🤗
    • 😲 接收消息结构 😲
    • 发送好友文本消息
      POST
    • 发送好友图片消息
      POST
    • 发送私聊文本消息
      POST
    • 发送私聊语音消息
      POST
    • 发送私聊图片消息
      POST
    • 发送群组文本消息
      POST
    • 发送群组图片消息
      POST
    • 发送群组回复消息
      POST
    • 发送群组卡片消息-JSON
      POST
    • 发送群组卡片消息-XML
      POST
    • 发送群组语音消息
      POST
    • 发送好友语音消息
      POST
    • 推送群组文件消息
      POST
    • 获取群组文件下载URL
      POST
    • 上传组合消息
      POST
    • 发送群组MD消息
      POST
  • 定时任务
    • 🎃 定时任务🎃
    • 添加定时任务
    • 获取定时任务
    • 删除定时任务
  • 其他接口
    • 获取框架信息
    • 获取框架信息
    • 上传资源文件
    • 上传群组文件
    • QueryUinByUid
    • GetClientKey
    • GetPSKey
    • GetGTK
    • GetCookies
    • 获取群组成员列表
    • 处理好友系统消息
    • 处理群系统消息
    • 修改群成员昵称
    • 打开群组红包
    • 获取好友列表
    • 获取在线列表
    • 获取群组列表
    • 全局调试日志
    • 撤回群组消息
    • 撤回好友消息
    • 禁言群组成员
    • 移除群组成员
    • 退出群聊
    • 新增好友分组
    • 设置好友分组
    • 删除好友分组
    • 设置头衔
    • 拍一拍
    • 点赞接口
    • 设置群组禁言
    • 设置群组名称
    • 群组验证设置
    • 设置群组管理员
  • 相关事件
    • 🤪 登录相关事件 🤪
    • 😿 消息相关事件 😿
    • 🧐 好友相关事件 🧐
    • 🤩 群组相关事件 🤩
  • WebSocket
    • 🔮 介绍 🔮
    • 🔮 功能🔮
    • Demo
  • LuaApi
    • 介绍
    • 插件模版
    • Lua--Log模块
    • Lua--Json模块
    • Lua--HTTP模块
    • Lua--MYSQL模块
    • Lua--定时任务
    • 审批入群事件
    • 审批好友事件
    • 发送群组图片
    • Lua自定义库
    • 打开群组红包
  • Lua插件示例
    • 插件示例-复读机
    • 插件示例-语音报时
  1. WebSocket

🔮 功能🔮

📌
通过WebSocket实现正反连接功能包的调用
解决痛点:内网环境中反向链接不能调用WebApi的情况
💡
WebSocket传输数据均是异步操作 对于功一个完整的能包请求和响应保持一致 通过ReqId字段来标记区分不同的功能包的响应
例如 发送消息
结构如下
{
"ReqId": 123123, //标记🏷️
"BotUin":"123456789",
"CgiCmd": "MessageSvc.PbSendMsg",
"CgiRequest": {
"ToUin": 1234455667,
"ToType": 2,
"Content": "你好"
}
}
发送消息返回
{
"CgiBaseResponse": {
"ErrMsg": "",
"Ret": 0
},
"ReqId": 123123,//🏷️标记
"ResponseData": {
"MsgSeq": 11073,
"MsgTime": 1697271309
}
}
其他功能包的调用同理
信息
WebSocket 复读机实现
# WS client example
import asyncio
import json
import random
import requests
import websockets
# websocket client
SERCIVE_HOST = "127.0.0.1:8086"


async def Wsdemo():
    uri = "ws://{}/ws".format(SERCIVE_HOST)
    try:
        async with websockets.connect(uri) as websocket:
            while True:
                greeting = await websocket.recv()
                print(f"<{greeting}")
                EventJson = json.loads(greeting)
                if "CurrentPacket" in EventJson:
                    EventName = EventJson["CurrentPacket"]["EventName"]
                    EventData = EventJson["CurrentPacket"]["EventData"]
                    print(f"<{EventName}")

                    if EventData["MsgHead"]["FromType"] == 2 and EventData["MsgHead"]["MsgType"] == 82:
                        if "复读机" in EventData["MsgBody"]["Content"]:
                            text = EventData["MsgBody"]["Content"].replace(
                                "复读机", "")
                            api_json = {"ReqId": 123123, "BotUin": str(EventJson["CurrentQQ"]), "CgiCmd": "MessageSvc.PbSendMsg", "CgiRequest": {"ToUin":  EventData["MsgHead"]["FromUin"], "ToType": EventData["MsgHead"]["FromType"],
                                                                                                                                                 "Content": text}}
                                                                                                                                                 #在原有的WeApi提交的Json中增加ReqId字段标记即可 随机整数
                            await websocket.send(json.dumps(api_json))

                if "ReqId" in EventJson:
                    print(f"<发送消息返回{EventJson}")

    except Exception as e:
        # 断线重连
        t = random.randint(5, 8)
        print(f"< 超时重连中... { t}", e)
        await asyncio.sleep(t)
        await Wsdemo()
asyncio.get_event_loop().run_until_complete(Wsdemo())

# websocket server


# async def main_logic(websocket, path):
#     while True:
#         greeting = await websocket.recv()
#         EventJson = json.loads(greeting)
#         EventName = EventJson["CurrentPacket"]["EventName"]
#         EventData = EventJson["CurrentPacket"]["EventData"]
#         print(f"<{EventName} {greeting}")

# start_server = websockets.serve(main_logic, '127.0.0.1', 5678)
# asyncio.get_event_loop().run_until_complete(start_server)
# asyncio.get_event_loop().run_forever()

上一页
🔮 介绍 🔮
下一页
Demo
Built with