package groupmeext import ( "context" "gitea.watsonlabs.net/watsonb8/groupme-lib" ) type Client struct { *groupme.Client } // NewClient creates a new GroupMe API Client func NewClient() *Client { n := Client{ Client: groupme.NewClient(), } return &n } func (c Client) IndexAllGroups(authToken string) ([]*groupme.Group, error) { return c.IndexGroups(context.TODO(), &groupme.GroupsQuery{ // Omit: "memberships", PerPage: 100, //TODO: Configurable and add multipage support }, authToken) } func (c Client) IndexAllRelations(authToken string) ([]*groupme.User, error) { return c.IndexRelations(context.TODO(), authToken) } func (c Client) IndexAllChats(authToken string) ([]*groupme.Chat, error) { return c.IndexChats(context.TODO(), &groupme.IndexChatsQuery{ PerPage: 100, //TODO? }, authToken) } func (c Client) LoadMessagesAfter(groupID groupme.ID, lastMessageID string, lastMessageFromMe bool, private bool, authToken string) ([]*groupme.Message, error) { if private { ans, e := c.IndexDirectMessages(context.TODO(), groupID.String(), &groupme.IndexDirectMessagesQuery{ SinceID: groupme.ID(lastMessageID), //Limit: num, }, authToken) //fmt.Println(groupID, lastMessageID, num, i.Count, e) if e != nil { return nil, e } for i, j := 0, len(ans.Messages)-1; i < j; i, j = i+1, j-1 { ans.Messages[i], ans.Messages[j] = ans.Messages[j], ans.Messages[i] } return ans.Messages, nil } else { i, e := c.IndexMessages(context.TODO(), groupID, &groupme.IndexMessagesQuery{ AfterID: groupme.ID(lastMessageID), //20 for consistency with dms Limit: 20, }, authToken) //fmt.Println(groupID, lastMessageID, num, i.Count, e) if e != nil { return nil, e } return i.Messages, nil } } func (c Client) LoadMessagesBefore(groupID, lastMessageID string, private bool, authToken string) ([]*groupme.Message, error) { if private { i, e := c.IndexDirectMessages(context.TODO(), groupID, &groupme.IndexDirectMessagesQuery{ BeforeID: groupme.ID(lastMessageID), //Limit: num, }, authToken) //fmt.Println(groupID, lastMessageID, num, i.Count, e) if e != nil { return nil, e } return i.Messages, nil } else { //TODO: limit max 100 i, e := c.IndexMessages(context.TODO(), groupme.ID(groupID), &groupme.IndexMessagesQuery{ BeforeID: groupme.ID(lastMessageID), //20 for consistency with dms Limit: 20, }, authToken) //fmt.Println(groupID, lastMessageID, num, i.Count, e) if e != nil { return nil, e } return i.Messages, nil } } func (c *Client) RemoveFromGroup(uid, groupID groupme.ID, authToken string) error { group, err := c.ShowGroup(context.TODO(), groupID, authToken) if err != nil { return err } return c.RemoveMember(context.TODO(), groupID, group.GetMemberByUserID(uid).ID, authToken) }