forked from diamondburned/gtkcord3
-
Notifications
You must be signed in to change notification settings - Fork 0
/
ningen.go
87 lines (69 loc) · 1.87 KB
/
ningen.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
package ningen
import (
"time"
"github.com/diamondburned/arikawa/discord"
"github.com/diamondburned/arikawa/gateway"
"github.com/diamondburned/arikawa/state"
"github.com/diamondburned/arikawa/utils/httputil/httpdriver"
"github.com/diamondburned/arikawa/utils/wsutil"
"github.com/TheBlueOompaLoompa/gtkcord3/internal/log"
"github.com/diamondburned/ningen"
"github.com/pkg/errors"
)
func init() {
gateway.Presence = &gateway.UpdateStatusData{
Status: discord.OnlineStatus,
}
wsutil.WSTimeout = 5 * time.Second
wsutil.WSDebug = func(v ...interface{}) {
log.Debugln(v...)
}
}
type State = ningen.State
func Connect(token string, onReady func(s *State)) (*State, error) {
store := state.NewDefaultStore(&state.DefaultStoreOptions{
MaxMessages: 50,
})
s, err := state.NewWithStore(token, store)
if err != nil {
return nil, errors.Wrap(err, "Failed to create a new Discord session")
}
s.OnRequest = append(s.OnRequest, func(r httpdriver.Request) error {
log.Debugln("Request:", r.GetPath())
return nil
})
// Disable retries:
s.Retries = 1
n, err := ningen.FromState(s)
if err != nil {
return nil, errors.Wrap(err, "Faield to create ningen")
}
n.AddHandler(func(r *gateway.ReadyEvent) {
onReady(n)
})
n.AddHandler(func(r *gateway.ResumedEvent) {
onReady(n)
})
if err := n.Open(); err != nil {
return nil, errors.Wrap(err, "Failed to connect to Discord")
}
return n, nil
}
type Presencer interface {
Presence(guild discord.GuildID, user discord.UserID) (*discord.Presence, error)
}
var _ Presencer = (*State)(nil)
type GuildRequester interface {
RequestGuildMembers(gateway.RequestGuildMembersData) error
GuildSubscribe(gateway.GuildSubscribeData) error
}
func EmojiString(e *discord.Emoji) string {
if e == nil {
return ""
}
var emoji = e.Name
if e.ID.IsValid() { // if the emoji is custom:
emoji = ":" + emoji + ":"
}
return emoji
}