Files
bunny-bot/internal/moon/chatMembersCollection.go
2025-06-02 18:54:42 +03:00

125 lines
3.6 KiB
Go

package moon
import (
int64int64collection "bunny-bot/internal/collection"
"slices"
"time"
)
// FindNewMember looksup for given member in NewMembers.
func FindNewMember(chatid int64, userid int64) int64 {
return findMember(chatid, userid, NewMembers)
}
// FindAppearedMember looksup for given member in AppearedMembers.
func FindAppearedMember(chatid int64, userid int64) int64 {
return findMember(chatid, userid, AppearedMembers)
}
// FindSquashedMember looksup for given member in SquashedMembers.
func FindSquashedMember(chatid int64, userid int64) int64 {
return findMember(chatid, userid, SquashedMembers)
}
// findMember looksup for given member in given collection.
func findMember(chatid int64, userid int64, collection []*MembersCollection) int64 {
for _, MembersCollection := range collection {
if MembersCollection.ChatID == chatid {
if timestamp, found := MembersCollection.Members.Get(userid); found {
return timestamp
}
return 0
}
}
return 0
}
// ListNewMembers returns slice with members in NewMembers.
func ListNewMembers(chatid int64) []int64 {
return listMembers(chatid, NewMembers)
}
// ListAppearedMembers returns slice with members in AppearedMembers.
func ListAppearedMembers(chatid int64) []int64 {
return listMembers(chatid, AppearedMembers)
}
// ListSquashedMembers returns slice with members in SquashedMembers.
func ListSquashedMembers(chatid int64) []int64 {
return listMembers(chatid, SquashedMembers)
}
// listMembers gets list of members from given collection.
func listMembers(chatid int64, collection []*MembersCollection) []int64 {
for _, MembersCollection := range collection {
if MembersCollection.ChatID == chatid {
return MembersCollection.Members.ListKeys()
}
}
return []int64{}
}
// DeleteNewMember deletes given userid from given chaid NewMembers collection.
func DeleteNewMember(chatid, userid int64) {
deleteMember(chatid, userid, NewMembers)
}
// DeleteNewMember deletes given userid from given chaid AppearedMembers collection.
func DeleteAppearedMember(chatid, userid int64) {
deleteMember(chatid, userid, AppearedMembers)
}
// DeleteNewMember deletes given userid from given chaid SquashedMembers collection.
func DeleteSquashedMember(chatid, userid int64) {
deleteMember(chatid, userid, SquashedMembers)
}
// deleteMembers deletes given member from given collection.
func deleteMember(chatid int64, userid int64, collection []*MembersCollection) {
for _, MembersCollection := range collection {
if MembersCollection.ChatID == chatid {
MembersCollection.Members.Delete(userid)
return
}
}
}
// AddNewMember adds given userid from given chaid to NewMembers chat collection.
func AddNewMember(chatid, userid int64) {
addMember(chatid, userid, NewMembers)
}
// AddAppearedMember adds given userid from given chaid to AppearedMembers chat collection.
func AddAppearedMember(chatid, userid int64) {
addMember(chatid, userid, AppearedMembers)
}
// AddSquashedMember adds given userid from given chaid to SquashedMembers chat collection.
func AddSquashedMember(chatid, userid int64) {
addMember(chatid, userid, SquashedMembers)
}
// addMember adds given userid from given chaid to given chat collection.
func addMember(chatid, userid int64, collection []*MembersCollection) {
// we have to create collection if it is not exist.
if !slices.Contains(ChatList, chatid) {
collection = append(
collection,
&MembersCollection{
ChatID: chatid,
Members: *int64int64collection.NewCollection(),
},
)
}
for _, MembersCollection := range collection {
if MembersCollection.ChatID == chatid {
MembersCollection.Members.Set(userid, time.Now().Unix())
}
}
}