141 lines
2.8 KiB
Go
141 lines
2.8 KiB
Go
package moon
|
|
|
|
import (
|
|
"fmt"
|
|
"slices"
|
|
"time"
|
|
|
|
"github.com/NicoNex/echotron/v3"
|
|
)
|
|
|
|
// TODO: refactor to return bool, error
|
|
|
|
// squash bans given chat member.
|
|
func squash(chatid int64, userid int64) {
|
|
banUntilDate := time.Now().Unix() + 10
|
|
|
|
user := GetUser(userid)
|
|
chat := GetChat(chatid)
|
|
|
|
// If there is no such chatid, means that no such cache too.
|
|
if len(ChatList) == 0 || !slices.Contains(ChatList, chatid) {
|
|
Log.Debugf("Add %s %s (%d) to list of known chats", chat.Type, chat.Title, chat.ID)
|
|
|
|
ChatList = append(ChatList, chatid)
|
|
}
|
|
|
|
key := fmt.Sprintf("%d+%d", chatid, userid)
|
|
if _, exist := SquashedMembers.Get(key); exist {
|
|
Log.Infof(
|
|
"Skip banning user %s %s (username = %s, id = %d) in %s %s (%d), already banned",
|
|
user.FirstName,
|
|
user.LastName,
|
|
user.Username,
|
|
user.ID,
|
|
chat.Type,
|
|
chat.Title,
|
|
chat.ID,
|
|
)
|
|
|
|
return
|
|
}
|
|
|
|
if res, err := Tg.BanChatMember(
|
|
chatid,
|
|
userid,
|
|
&echotron.BanOptions{
|
|
UntilDate: int(banUntilDate),
|
|
},
|
|
); err != nil {
|
|
Log.Errorf(
|
|
"Unable to ban user user %s %s (username = %s, id = %d) in %s %s (%d): %s",
|
|
user.FirstName,
|
|
user.LastName,
|
|
user.Username,
|
|
user.ID,
|
|
chat.Type,
|
|
chat.Title,
|
|
chat.ID,
|
|
res.Description,
|
|
)
|
|
} else {
|
|
if !res.Ok {
|
|
Log.Errorf(
|
|
"Unable to ban user %s %s (username = %s, id = %d) in %s %s (%d): %s",
|
|
user.FirstName,
|
|
user.LastName,
|
|
user.Username,
|
|
user.ID,
|
|
chat.Type,
|
|
chat.Title,
|
|
chat.ID,
|
|
res.Description,
|
|
)
|
|
} else {
|
|
Log.Debugf(
|
|
"Banned user %s %s (username = %s, id = %d) in %s %s (%d).",
|
|
user.FirstName,
|
|
user.LastName,
|
|
user.Username,
|
|
user.ID,
|
|
chat.Type,
|
|
chat.Title,
|
|
chat.ID,
|
|
)
|
|
|
|
key := fmt.Sprintf("%d+%d", chatid, userid)
|
|
|
|
Log.Debugf(
|
|
"Put user %s %s (username = %s, id = %d) in %s %s (%d) into SquashedMembers to debounce ban.",
|
|
user.FirstName,
|
|
user.LastName,
|
|
user.Username,
|
|
user.ID,
|
|
chat.Type,
|
|
chat.Title,
|
|
chat.ID,
|
|
)
|
|
|
|
SquashedMembers.Set(key, true, 30*time.Second)
|
|
|
|
Log.Debugf(
|
|
"Remove user %s %s (username = %s, id = %d) in %s %s (%d) from NewMembers.",
|
|
user.FirstName,
|
|
user.LastName,
|
|
user.Username,
|
|
user.ID,
|
|
chat.Type,
|
|
chat.Title,
|
|
chat.ID,
|
|
)
|
|
|
|
NewMembers.Delete(key)
|
|
|
|
Log.Debugf(
|
|
"Remove user %s %s (username = %s, id = %d) in %s %s (%d) from AppearedMembers.",
|
|
user.FirstName,
|
|
user.LastName,
|
|
user.Username,
|
|
user.ID,
|
|
chat.Type,
|
|
chat.Title,
|
|
chat.ID,
|
|
)
|
|
AppearedMembers.Delete(key)
|
|
|
|
if err := Cfg.SaveKeyValue(
|
|
"BannedMembers",
|
|
fmt.Sprintf("%d", chatid),
|
|
fmt.Sprintf("%d", userid),
|
|
fmt.Sprintf("%d", time.Now().Unix()),
|
|
); err != nil {
|
|
Log.Error(err)
|
|
} else {
|
|
Log.Infof("Info about banned userid %d saved to BannedMembers db", userid)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/* vim: set ft=go noet ai ts=4 sw=4 sts=4: */
|