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