1
0
mirror of https://github.com/fumiama/NanoBot.git synced 2026-06-05 02:30:23 +08:00
This commit is contained in:
源文雨
2023-10-19 00:55:14 +09:00
parent fdc7d729b8
commit da5cad685a
2 changed files with 10 additions and 7 deletions

14
bot.go
View File

@@ -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
}
}
}

View File

@@ -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
}