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()) } } }