diff --git a/main.go b/main.go index 09a790e..75207f6 100644 --- a/main.go +++ b/main.go @@ -239,7 +239,14 @@ func main() { cli.OnServerUpdated(func(bot *client.QQClient, e *client.ServerUpdatedEvent) { log.Infof("收到服务器地址更新通知, 将在下一次重连时应用. 地址信息已储存到 servers.bin 文件") _ = ioutil.WriteFile("servers.bin", binary.NewWriterF(func(w *binary.Writer) { - w.WriteUInt16(uint16(len(e.Servers))) + w.WriteUInt16(func() (c uint16) { + for _, s := range e.Servers { + if !strings.Contains(s.Server, "com") { + c++ + } + } + return + }()) for _, s := range e.Servers { if !strings.Contains(s.Server, "com") { w.WriteString(s.Server) @@ -250,18 +257,25 @@ func main() { }) if global.PathExists("servers.bin") { if data, err := ioutil.ReadFile("servers.bin"); err == nil { - r := binary.NewReader(data) - var addr []*net.TCPAddr - l := r.ReadUInt16() - for i := 0; i < int(l); i++ { - addr = append(addr, &net.TCPAddr{ - IP: net.ParseIP(r.ReadString()), - Port: int(r.ReadUInt16()), - }) - } - if len(addr) > 0 { - cli.SetCustomServer(addr) - } + func() { + defer func() { + if pan := recover(); pan != nil { + log.Error("读取服务器地址时出现错误: %v", pan) + } + }() + r := binary.NewReader(data) + var addr []*net.TCPAddr + l := r.ReadUInt16() + for i := 0; i < int(l); i++ { + addr = append(addr, &net.TCPAddr{ + IP: net.ParseIP(r.ReadString()), + Port: int(r.ReadUInt16()), + }) + } + if len(addr) > 0 { + cli.SetCustomServer(addr) + } + }() } } rsp, err := cli.Login()