package moon import "time" func RunAndBan() { for { // If user have both events, he is not spammer. So wipe him from unchecked events list, just for sure. for _, chatid := range ChatList { for _, AppearedMember := range ListAppearedMembers(chatid) { for _, NewMember := range ListNewMembers(chatid) { if AppearedMember == NewMember { Log.Infof("Skip banning %d, because it has both events newMember and updateMember") DeleteAppearedMember(chatid, AppearedMember) DeleteNewMember(chatid, NewMember) } } } } currentTime := time.Now().Unix() // We would like to process only events that definitely older than 10 seconds! for _, chatid := range ChatList { for _, AppearedMember := range ListAppearedMembers(chatid) { eventTimestamp := FindAppearedMember(chatid, AppearedMember) eventTimeDelta := currentTime - eventTimestamp // Looks like it is spammer! if eventTimeDelta > 10 { Log.Infof("Ban user that have no newChatMember message since chatMemberUpdated for more than 10 seconds") squash(chatid, AppearedMember) } } for _, NewMember := range ListNewMembers(chatid) { eventTimestamp := FindAppearedMember(chatid, NewMember) eventTimeDelta := currentTime - eventTimestamp // Totally new members should not have chatMemberUpdated events. if eventTimeDelta > 15 { Log.Debugf("Clean newChatMember event record older than 10 seconds for user %s", NewMember) DeleteNewMember(chatid, NewMember) } } } time.Sleep(10 * time.Second) } } /* vim: set ft=go noet ai ts=4 sw=4 sts=4: */