+ // check if remoteAddr is present in the ban list
+ if banUntil, ok := s.banList[strings.Split(remoteAddr, ":")[0]]; ok {
+ // permaban
+ if banUntil == nil {
+ t := NewTransaction(
+ TranServerMsg,
+ &[]byte{0, 0},
+ NewField(FieldData, []byte("You are permanently banned on this server")),
+ NewField(FieldChatOptions, []byte{0, 0}),
+ )
+
+ _, err := io.Copy(rwc, t)
+ if err != nil {
+ return err
+ }
+
+ time.Sleep(1 * time.Second)
+ return nil
+ }
+
+ // temporary ban
+ if time.Now().Before(*banUntil) {
+ t := NewTransaction(
+ TranServerMsg,
+ &[]byte{0, 0},
+ NewField(FieldData, []byte("You are temporarily banned on this server")),
+ NewField(FieldChatOptions, []byte{0, 0}),
+ )
+
+ _, err := io.Copy(rwc, t)
+ if err != nil {
+ return err
+ }
+
+ time.Sleep(1 * time.Second)
+ return nil
+ }