-
Notifications
You must be signed in to change notification settings - Fork 0
/
channel.go
121 lines (105 loc) · 3.09 KB
/
channel.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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
package discord
import (
"encoding/json"
"io/ioutil"
"net/http"
"os"
"strings"
"time"
)
const base_url = "https://discord.com/api"
const api_resource = "/channels"
type ChannelAPI struct {
BotToken string
ChannelEndpoint string
}
func NewChannelAPI() ChannelAPI {
bot_token := os.Getenv("DISCORD_BOT_TOKEN")
channel_id := os.Getenv("DISCORD_CHANNEL_ID")
return ChannelAPI{
BotToken: strings.Join([]string{"Bot ", bot_token}, ""),
ChannelEndpoint: strings.Join([]string{base_url, api_resource, "/", channel_id}, ""),
}
}
type ChannelMessage struct {
Attachments []struct {
ContentType string `json:"content_type"`
Filename string `json:"filename"`
Height int `json:"height"`
ID string `json:"id"`
ProxyURL string `json:"proxy_url"`
Size int `json:"size"`
URL string `json:"url"`
Width int `json:"width"`
} `json:"attachments"`
Author struct {
Avatar string `json:"avatar"`
AvatarDecoration interface{} `json:"avatar_decoration"`
Discriminator string `json:"discriminator"`
ID string `json:"id"`
PublicFlags int `json:"public_flags"`
Username string `json:"username"`
} `json:"author"`
ChannelID string `json:"channel_id"`
Components []interface{} `json:"components"`
Content string `json:"content"`
EditedTimestamp interface{} `json:"edited_timestamp"`
Embeds []interface{} `json:"embeds"`
Flags int `json:"flags"`
ID string `json:"id"`
MentionEveryone bool `json:"mention_everyone"`
MentionRoles []interface{} `json:"mention_roles"`
Mentions []interface{} `json:"mentions"`
Pinned bool `json:"pinned"`
Timestamp time.Time `json:"timestamp"`
Tts bool `json:"tts"`
Type int `json:"type"`
}
func (ca *ChannelAPI) getChannelMessage(query map[string]string) ([]ChannelMessage, error) {
req, err := http.NewRequest("GET", strings.Join([]string{ca.ChannelEndpoint, "/messages"}, ""), nil)
if err != nil {
return nil, err
}
req.Header.Set("Authorization", ca.BotToken)
params := req.URL.Query()
for key, value := range query {
params.Add(key, value)
}
req.URL.RawQuery = params.Encode()
client := new(http.Client)
resp, err := client.Do(req)
if err != nil {
return nil, err
}
defer resp.Body.Close()
bytes, err := ioutil.ReadAll(resp.Body)
if err != nil {
return nil, err
}
var channelMessages []ChannelMessage
err = json.Unmarshal(bytes, &channelMessages)
if err != nil {
return nil, err
}
return channelMessages, nil
}
func (ca *ChannelAPI) GetChannelMessageAll() ([]ChannelMessage, error) {
cm, err := ca.getChannelMessage(
map[string]string{
"limit": "100",
})
if err != nil {
return nil, err
}
return cm, nil
}
func (ca *ChannelAPI) GetChannelMessagesNewer(message_id string) ([]ChannelMessage, error) {
cm, err := ca.getChannelMessage(
map[string]string{
"after": message_id,
})
if err != nil {
return nil, err
}
return cm, nil
}