mirror of
https://github.com/fumiama/NanoBot.git
synced 2026-06-05 02:30:23 +08:00
fix: seq
This commit is contained in:
14
bot.go
14
bot.go
@@ -253,7 +253,7 @@ func (bot *Bot) Connect() *Bot {
|
||||
time.Sleep(2 * time.Second) // 等待两秒后重新连接
|
||||
continue
|
||||
}
|
||||
bot.ready, err = payload.GetEventReady()
|
||||
bot.ready, bot.seq, err = payload.GetEventReady()
|
||||
if err != nil {
|
||||
log.Warnln(getLogHeader(), "解析 EventReady 时出现错误:", err)
|
||||
_ = conn.Close()
|
||||
@@ -358,13 +358,12 @@ func (bot *Bot) Listen() {
|
||||
continue
|
||||
}
|
||||
log.Debug(getLogHeader(), " 接收到第 ", payload.S, " 个事件: ", payload.Op, ", 类型: ", payload.T, ", 数据: ", BytesToString(payload.D))
|
||||
if payload.S <= bot.seq {
|
||||
log.Warn(getLogHeader(), " 忽略重复编号: ", payload.S, ", 事件: ", payload.Op, ", 类型: ", payload.T)
|
||||
continue
|
||||
}
|
||||
bot.seq = payload.S
|
||||
switch payload.Op {
|
||||
case OpCodeDispatch: // Receive
|
||||
if payload.S <= bot.seq {
|
||||
log.Warn(getLogHeader(), " 忽略重复编号: ", payload.S, ", 事件: ", payload.Op, ", 类型: ", payload.T)
|
||||
continue
|
||||
}
|
||||
switch payload.T {
|
||||
case "RESUMED":
|
||||
log.Infoln(getLogHeader(), bot.ready.User.Username, "的网关连接恢复完成")
|
||||
@@ -396,6 +395,9 @@ func (bot *Bot) Listen() {
|
||||
default:
|
||||
log.Warn(getLogHeader(), " 忽略未知事件, 序号: ", payload.S, ", Op: ", payload.Op, ", 类型: ", payload.T, ", 数据: ", BytesToString(payload.D))
|
||||
}
|
||||
if payload.S > bot.seq {
|
||||
bot.seq = payload.S
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -55,7 +55,7 @@ type EventReady struct {
|
||||
}
|
||||
|
||||
// GetEventReady OpCodeDispatch READY
|
||||
func (wp *WebsocketPayload) GetEventReady() (er EventReady, err error) {
|
||||
func (wp *WebsocketPayload) GetEventReady() (er EventReady, seq uint32, err error) {
|
||||
if wp.Op != OpCodeDispatch {
|
||||
err = errors.New(getThisFuncName() + " unexpected OpCode " + strconv.Itoa(int(wp.Op)) + ", T: " + wp.T + ", D: " + BytesToString(wp.D))
|
||||
return
|
||||
@@ -64,6 +64,7 @@ func (wp *WebsocketPayload) GetEventReady() (er EventReady, err error) {
|
||||
err = errors.New(getThisFuncName() + " unexpected event type " + wp.T + ", T: " + wp.T + ", D: " + BytesToString(wp.D))
|
||||
return
|
||||
}
|
||||
seq = wp.S
|
||||
err = json.Unmarshal(wp.D, &er)
|
||||
return
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user