logo
0
0
WeChat Login
fix(channelws): reject unsupported qq interaction replies

pkg/channelws

pkg/channelws 提供可外部复用的 QQ BotWeCom AiBot websocket 客户端,复用的是当前网关已验证的真实协议实现,而不是一套新的草稿 SDK。

导入路径

import "cnb.cool/zishuo/workbuddy/pkg/channelws"

当前暴露

  • NewQQBotWSClient(opts Options) *QQBotWSClient
  • NewWeComAiBotClient(opts Options) *WeComAiBotClient
  • QQBotInboundMessage
  • QQBotReplyContext
  • WeComAiBotInboundMessage
  • StatusEvent
  • ErrorEvent
  • Options

快速开始

QQ Bot

client := channelws.NewQQBotWSClient(channelws.Options{}) client.SetOnMessage(func(msg channelws.QQBotInboundMessage) { _ = client.SendReply(context.Background(), msg.MsgID, "收到") }) if err := client.Connect(context.Background(), appID, appSecret); err != nil { log.Fatal(err) } defer client.Disconnect()

WeCom AiBot

client := channelws.NewWeComAiBotClient(channelws.Options{}) client.SetOnMessage(func(msg channelws.WeComAiBotInboundMessage) { _ = client.ReplyText(context.Background(), msg.MsgID, "收到") }) if err := client.Connect(context.Background(), botID, secret); err != nil { log.Fatal(err) } defer client.Disconnect()

Options

Options 支持以下覆盖项:

  • ProxyURL
  • HTTPTimeout
  • HandshakeTimeout
  • QQTokenURL
  • QQGatewayURL
  • QQAPIBaseURL
  • WeComAiBotWSURL
  • ReplyContextTTL
  • ReplyContextLimit

零值会自动回退到当前网关默认配置与真实线上地址。

状态事件

兼容层仍保留:

  • SetOnStatus(func(status, errMsg string))

新的推荐入口:

  • SetOnStatusEvent(func(StatusEvent))
  • LastStatusEvent() StatusEvent
  • SetOnError(func(ErrorEvent))
  • LastErrorEvent() ErrorEvent

其中:

  • StatusEvent 用于生命周期状态变化,以及同状态下的新错误原因
  • ErrorEvent 用于 reply lookupack timeoutconnect 等操作级失败
  • QQ INTERACTION_CREATE 目前只支持入站观测,不支持回发;调用 SendReply 时会返回 ErrQQInteractionReplyUnsupported

可运行示例

  • go run ./examples/channelws -mode qq -qq-app-id <appId> -qq-app-secret <secret>
  • go run ./examples/channelws -mode aibot -aibot-id <botId> -aibot-secret <secret>

参考