-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathemojis_wrapped.go
66 lines (62 loc) · 1.77 KB
/
emojis_wrapped.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
package main
import (
"fmt"
"time"
"github.com/ryho/slack-emoji-bot/util"
"github.com/slack-go/slack"
)
func emojisWrapped(allEmojis *SlackEmojiResponseMessage) error {
// Get the emojis channel
emojiChannelID, err := getChannel(emojiChannel)
if err != nil {
return err
}
messages, err := findAllVotePrompts(emojiChannelID)
if err != nil {
return err
}
for _, msg := range messages {
timestamp, err := timeFromMessage(msg)
if err != nil {
return err
}
voters := map[string]util.SetEntry{}
for _, reaction := range msg.Reactions {
for _, user := range reaction.Users {
voters[user] = util.SetEntry{}
}
}
fmt.Printf("Reactions %v, voters %v, date %v\n", len(msg.Reactions), len(voters), timestamp)
}
return printTopEmojisByReactionVote(allEmojis, true, 100, messages...)
}
func findAllVotePrompts(emojiChannelId string) ([]*slack.Message, error) {
conversationParams := &slack.GetConversationHistoryParameters{
ChannelID: emojiChannelId,
}
var reactionMessages []*slack.Message
for true {
messages, err := GetConversationHistoryWithBackoff(conversationParams)
if err != nil {
return nil, err
}
for i, message := range messages.Messages {
if message.Text == votePrompt || message.Text == votePromptPrevious {
reactionMessages = append(reactionMessages, &messages.Messages[i])
}
}
if len(messages.ResponseMetaData.NextCursor) == 0 {
return reactionMessages, nil
}
// Check if we have looked through 15 days
lastMessageTime, err := timeFromMessage(&messages.Messages[len(messages.Messages)-1])
if err != nil {
return nil, err
}
if time.Since(lastMessageTime) > time.Hour*24*365 {
return reactionMessages, nil
}
conversationParams.Cursor = messages.ResponseMetaData.NextCursor
}
return reactionMessages, nil
}