/
config.go
130 lines (114 loc) 路 2.83 KB
/
config.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
122
123
124
125
126
127
128
129
130
package gitcord
import (
"log"
"github.com/diamondburned/arikawa/v3/discord"
"golang.org/x/oauth2"
)
// Config is the configuration for the Client
type Config struct {
// GitHubOAuth is the GitHub OAuth token
GitHubOAuth oauth2.TokenSource
// DiscordToken is the Discord bot token
DiscordToken string
// DiscordChannelID is the ID of the parent channel in which all threads
// will be created under
DiscordChannelID discord.ChannelID
// ColorScheme is the color scheme for use in embeds. Refer to ColorScheme
// for more information.
ColorScheme ColorScheme
// ForceOpen will force create a new thread even if one already exists
ForceOpen bool
// Logger is the logger to use. If nil, the default logger will be used
Logger *log.Logger
}
type StatusColors struct {
Success discord.Color
Error discord.Color
}
var DefaultStatusColors = StatusColors{
Success: 0x00FF00,
Error: 0xFF0000,
}
// ColorSchemeKey is the key for a color within a color scheme.
type ColorSchemeKey uint
const (
UnknownColorSchemeKey ColorSchemeKey = iota
IssueOpened
IssueClosed
IssueReopened
IssueLabeled
IssueUnlabeled
IssueAssigned
IssueUnassigned
IssueMilestoned
IssueDemilestoned
IssueDeleted
IssueLocked
IssueUnlocked
IssueTransferred
IssueCommented
IssueCommentDeleted
PROpened
PRReopened
PRCommented
PRClosed
PRAssigned
PRUnassigned
PRDeleted
PRTransferred
PRLabeled
PRUnlabeled
PRMilestoned
PRDemilestoned
PRLocked
PRUnlocked
PRReviewRequested
PRReviewRequestRemoved
PRReadyForReview
Reviewed
ReviewDismissed
ReviewCommented
ReviewCommentDeleted
ReviewThreaded
ReviewThreadResolved
ReviewThreadUnresolved
maxColorSchemeKey // internal use only
)
// ColorScheme describes the color scheme for all embed colors made by gitcord.
// It maps each color scheme key to a status color struct, which has two
// possible colors for two cases.
//
// By default, all color scheme keys ap to DefaultStatusColors.
type ColorScheme map[ColorSchemeKey]StatusColors
// DefaultColorScheme is the default color scheme.
var DefaultColorScheme = ColorScheme{}
func init() {
for i := 0; i < int(maxColorSchemeKey); i++ {
DefaultColorScheme[ColorSchemeKey(i)] = DefaultStatusColors
}
}
// Override creates a new ColorScheme that overrides all color keys inside s
// with the provided ones in with.
func (s ColorScheme) Override(with ColorScheme) ColorScheme {
newScheme := make(ColorScheme, len(s))
for k, v := range s {
newScheme[k] = v
}
for k, v := range with {
newScheme[k] = v
}
return newScheme
}
// Color gets the color corresponding to the given key. If success is true, then
// the Success color is used, else Error is used.
func (s ColorScheme) Color(k ColorSchemeKey, success bool) discord.Color {
colors, ok := s[k]
if !ok {
colors = DefaultStatusColors
}
if success {
return colors.Success
} else {
return colors.Error
}
}