Initial commit
This commit is contained in:
52
internal/moon/runAndBan.go
Normal file
52
internal/moon/runAndBan.go
Normal file
@@ -0,0 +1,52 @@
|
||||
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: */
|
||||
Reference in New Issue
Block a user