-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathlander_handler.go
93 lines (75 loc) · 2.94 KB
/
lander_handler.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
package main
import (
"github.com/bwmarrin/discordgo"
//"time"
"fmt"
"time"
)
type LanderHandler struct {
configdb *ConfigDB
user *UserHandler
}
// Read function
// This handler will wait when a new user joins, and automatically assign roles to users who have not yet authenticated properly
// After a 2 minute period.
func (h *LanderHandler) Read(s *discordgo.Session, m *discordgo.GuildMemberAdd) {
unlandedRoleID, err := getRoleIDByName(s, s.State.Guilds[0].ID, "Unlanded")
if err != nil {
return
}
s.GuildMemberRoleAdd(s.State.Guilds[0].ID, m.User.ID, unlandedRoleID)
landingZoneID, err := getChannelIDByName(s, s.State.Guilds[0].ID, "landing_pad")
serverinfoID, err := getChannelIDByName(s, s.State.Guilds[0].ID, "server-information")
s.ChannelMessageSend(landingZoneID, "Welcome to the Official **Dual Universe** Discord Server "+
m.User.Mention()+":bulb: Please take a moment to read <#"+serverinfoID+">. You will be granted access automatically"+
" to the rest of the Discord Server in approximately 2 minutes (This is just the lobby, there are other channels here).")
h.user.CheckUser(m.User.ID)
autoland, err := h.configdb.CheckEnabled("autoland")
if err != nil {
fmt.Print(err.Error())
return
}
if autoland {
landedRoleID, err := getRoleIDByName(s, s.State.Guilds[0].ID, "Landed")
if err != nil {
return
}
spectatorRoleID, err := getRoleIDByName(s, s.State.Guilds[0].ID, "Guest")
if err != nil {
return
}
time.Sleep(time.Duration(time.Minute * 2))
s.GuildMemberRoleRemove(s.State.Guilds[0].ID, m.User.ID, unlandedRoleID)
time.Sleep(time.Duration(time.Second * 1))
err = s.GuildMemberRoleAdd(s.State.Guilds[0].ID, m.User.ID, landedRoleID)
if err == nil {
s.ChannelMessageSend(landingZoneID, m.User.Username+" has been added to the Landed role")
}
time.Sleep(time.Duration(time.Second * 1))
s.GuildMemberRoleAdd(s.State.Guilds[0].ID, m.User.ID, spectatorRoleID)
time.Sleep(time.Duration(time.Second * 1))
newcomersChannelID, err := getChannelIDByName(s, s.State.Guilds[0].ID, "newcomers")
s.ChannelMessageSend(newcomersChannelID, m.User.Mention()+" has landed")
}
member, err := s.GuildMember(s.State.Guilds[0].ID, m.User.ID)
if err != nil {
return
}
s.State.MemberAdd(member)
return
}
func (h *LanderHandler) ReadRemove(s *discordgo.Session, m *discordgo.GuildMemberRemove) {
//fmt.Println("Remove event caught")
// Don't use this as it will malloc panic
//member, _ := s.GuildMember(s.State.Guilds[0].ID, m.User.ID)
//s.State.MemberRemove(member)
// Wipe our autoroles so that when the user rejoins they start at Guest again
userrecord, _ := h.user.GetUser(m.User.ID)
userrecord.LatestRoleTimeout = 0
//userrecord.RabbitCount = 0
userrecord.HistoricalAutoRoles = []string{""}
h.user.UpdateUserRecord(userrecord)
//generalChannelID, _ := getChannelIDByName(s, s.State.Guilds[0].ID, "general")
//s.ChannelMessageSend(generalChannelID, "<@"+m.User.ID+"> has left the server.")
return
}