This repository has been archived by the owner on Apr 18, 2021. It is now read-only.
/
initialization.go
78 lines (68 loc) · 2.99 KB
/
initialization.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
package features
import (
"time"
"github.com/Lukaesebrot/asterisk/embeds"
"github.com/Lukaesebrot/asterisk/middlewares"
"github.com/Lukaesebrot/asterisk/static"
"github.com/Lukaesebrot/asterisk/users"
"github.com/Lukaesebrot/dgc"
"github.com/bwmarrin/discordgo"
)
// Initialize initializes all features
func Initialize(session *discordgo.Session) {
// Define and initialize the router
router := dgc.Create(&dgc.Router{
Prefixes: []string{
"$",
"<@!" + static.Self.ID + ">",
"<@" + static.Self.ID + ">",
"as!",
"你",
},
IgnorePrefixCase: true,
BotsAllowed: false,
PingHandler: infoCommand,
})
router.Initialize(session)
// Create the general rate limiter
generalRateLimiter := dgc.NewRateLimiter(5*time.Second, 1*time.Second, func(ctx *dgc.Ctx) {
ctx.RespondEmbed(embeds.Error("Hey! Don't spam!"))
})
// Create the hashing rate limiter
hashingRateLimiter := dgc.NewRateLimiter(1*time.Minute, 5*time.Second, func(ctx *dgc.Ctx) {
ctx.RespondEmbed(embeds.Error("You may only create a hash once a minute."))
})
// Create the bug report rate limiter
bugReportRateLimiter := dgc.NewRateLimiter(10*time.Minute, 10*time.Second, func(ctx *dgc.Ctx) {
ctx.RespondEmbed(embeds.Error("Please wait at least 10 minutes between two bug reports."))
})
// Create the feature request rate limiter
featureRequestRateLimiter := dgc.NewRateLimiter(10*time.Minute, 10*time.Second, func(ctx *dgc.Ctx) {
ctx.RespondEmbed(embeds.Error("Please wait at least 10 minutes between two feature requests."))
})
// Initialize the default help command
router.RegisterDefaultHelpCommand(session, generalRateLimiter)
// Initialize all the features
initializeSettingsFeature(router, generalRateLimiter)
initializeInfoFeature(router, generalRateLimiter)
initializeReminderFeature(router, generalRateLimiter)
initializeRandomFeature(router, generalRateLimiter)
initializeMathFeature(router, generalRateLimiter)
initializeLaTeXFeature(router, generalRateLimiter)
initializeHashFeature(router, hashingRateLimiter)
initializeUserFeature(router, generalRateLimiter)
initializeGoogleFeature(router, hashingRateLimiter)
initializeBugFeature(router, bugReportRateLimiter, session)
initializeRequestFeature(router, featureRequestRateLimiter, session)
initializeCreditsFeature(router, generalRateLimiter)
initializeDebugFeature(router)
initializeSayFeature(router)
initializeStarboardFeature(session)
// Register all the middlewares
router.RegisterMiddleware(middlewares.CheckGuildPermissions("guild_admin", "ADMINISTRATOR", discordgo.PermissionAdministrator))
router.RegisterMiddleware(middlewares.CheckInternalPermissions("bot_mod", "BOT_MODERATOR", users.PermissionModerator, users.PermissionAdministrator))
router.RegisterMiddleware(middlewares.CheckInternalPermissions("bot_admin", "BOT_ADMINISTRATOR", users.PermissionAdministrator))
router.RegisterMiddleware(middlewares.InjectUserObject)
router.RegisterMiddleware(middlewares.CheckCommandChannel)
router.RegisterMiddleware(middlewares.InjectGuildObject)
}