forked from kageru/discord-selphybot
added welcome DMs and roles for new members
This commit is contained in:
parent
dadda68ace
commit
799fb9a901
|
@ -14,9 +14,6 @@ import (
|
||||||
|
|
||||||
type Embed struct {
|
type Embed struct {
|
||||||
Message string
|
Message string
|
||||||
RulesTitle string
|
|
||||||
RulesText string
|
|
||||||
RulesText2 string
|
|
||||||
QuestionsTitle string
|
QuestionsTitle string
|
||||||
QuestionsText string
|
QuestionsText string
|
||||||
BugsTitle string
|
BugsTitle string
|
||||||
|
@ -30,13 +27,16 @@ type Config struct {
|
||||||
LockedRoleID string
|
LockedRoleID string
|
||||||
Token string
|
Token string
|
||||||
WelcomeChannel string
|
WelcomeChannel string
|
||||||
|
SendWelcomeDM bool
|
||||||
|
RequireAccept bool
|
||||||
WelcomeEmbed Embed
|
WelcomeEmbed Embed
|
||||||
|
RoleCommands map[string]string
|
||||||
}
|
}
|
||||||
|
|
||||||
var config = readConfig()
|
var config = readConfig()
|
||||||
|
|
||||||
func readConfig() Config {
|
func readConfig() Config {
|
||||||
file, _ := os.Open("config.json")
|
file, _ := os.Open("config2.json")
|
||||||
conf := Config{}
|
conf := Config{}
|
||||||
_ = json.NewDecoder(file).Decode(&conf)
|
_ = json.NewDecoder(file).Decode(&conf)
|
||||||
file.Close()
|
file.Close()
|
||||||
|
@ -74,9 +74,37 @@ func main() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func onJoin(s *discordgo.Session, member *discordgo.GuildMemberAdd) {
|
func onJoin(s *discordgo.Session, member *discordgo.GuildMemberAdd) {
|
||||||
if !member.User.Bot {
|
if !member.User.Bot && config.RequireAccept {
|
||||||
s.GuildMemberRoleAdd(config.ServerID, member.User.ID, config.LockedRoleID)
|
s.GuildMemberRoleAdd(config.ServerID, member.User.ID, config.LockedRoleID)
|
||||||
}
|
}
|
||||||
|
if !member.User.Bot && config.SendWelcomeDM {
|
||||||
|
dm, err := s.UserChannelCreate(member.User.ID)
|
||||||
|
if err != nil {
|
||||||
|
// todo: @mention or something
|
||||||
|
} else {
|
||||||
|
embed := &discordgo.MessageEmbed {
|
||||||
|
Author: &discordgo.MessageEmbedAuthor{},
|
||||||
|
Color: 0xffb90f,
|
||||||
|
Description: config.WelcomeEmbed.Message,
|
||||||
|
Fields: []*discordgo.MessageEmbedField {
|
||||||
|
&discordgo.MessageEmbedField {
|
||||||
|
Name: config.WelcomeEmbed.QuestionsTitle,
|
||||||
|
Value: config.WelcomeEmbed.QuestionsText,
|
||||||
|
Inline: true,
|
||||||
|
},
|
||||||
|
&discordgo.MessageEmbedField {
|
||||||
|
Name: config.WelcomeEmbed.BugsTitle,
|
||||||
|
Value: fmt.Sprintf(config.WelcomeEmbed.BugsText, config.AdminID),
|
||||||
|
Inline: true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Thumbnail: &discordgo.MessageEmbedThumbnail{
|
||||||
|
URL: config.WelcomeEmbed.Image,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
s.ChannelMessageSendEmbed(dm.ID, embed)
|
||||||
|
}
|
||||||
|
}
|
||||||
log.Printf("User joined: %s", userToString(member.User))
|
log.Printf("User joined: %s", userToString(member.User))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -89,6 +117,11 @@ func userToString(u *discordgo.User) string {
|
||||||
return fmt.Sprintf("%s#%s (ID: %s)", u.Username, u.Discriminator, u.ID)
|
return fmt.Sprintf("%s#%s (ID: %s)", u.Username, u.Discriminator, u.ID)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func roleName(s *discordgo.State, rid string) string {
|
||||||
|
role, _ := s.Role(config.ServerID, rid)
|
||||||
|
return role.Name
|
||||||
|
}
|
||||||
|
|
||||||
func channelToString(c *discordgo.Channel) string {
|
func channelToString(c *discordgo.Channel) string {
|
||||||
return fmt.Sprintf("%s (ID: %s) on %s", c.Name, c.ID, c.GuildID)
|
return fmt.Sprintf("%s (ID: %s) on %s", c.Name, c.ID, c.GuildID)
|
||||||
}
|
}
|
||||||
|
@ -118,6 +151,29 @@ func genericReply(s *discordgo.Session, m *discordgo.MessageCreate) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if getChannel(s.State, m.ChannelID).Type == discordgo.ChannelTypeDM {
|
||||||
|
log.Printf("Received DM from %s with content: “%s”", userToString(m.Author), m.Content)
|
||||||
|
fmt.Sprintf("Received DM from %s with content: “%s”", userToString(m.Author), m.Content)
|
||||||
|
Member, _ := s.GuildMember(config.ServerID, m.Author.ID)
|
||||||
|
for comm, role := range config.RoleCommands {
|
||||||
|
if m.Content == comm {
|
||||||
|
dm, _ := s.UserChannelCreate(Member.User.ID)
|
||||||
|
for _, irole := range config.RoleCommands {
|
||||||
|
for _, mrole := range Member.Roles {
|
||||||
|
if irole == mrole {
|
||||||
|
s.ChannelMessageSend(dm.ID, "Baka, du kannst nur eine der Rollen haben.")
|
||||||
|
log.Printf("Denied Role %s to %s. User already has %s", roleName(s.State, irole), userToString(m.Author), roleName(s.State, irole))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
log.Printf("Giving Role %s to %s", roleName(s.State, role), userToString(m.Author))
|
||||||
|
s.ChannelMessageSend(dm.ID, "Haaai, Ryoukai desu~")
|
||||||
|
s.GuildMemberRoleAdd(config.ServerID, m.Author.ID, role)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if m.Author.ID == config.AdminID {
|
if m.Author.ID == config.AdminID {
|
||||||
replyGodmode(s, m)
|
replyGodmode(s, m)
|
||||||
} else if m.ChannelID == config.WelcomeChannel {
|
} else if m.ChannelID == config.WelcomeChannel {
|
||||||
|
@ -131,7 +187,7 @@ func genericReply(s *discordgo.Session, m *discordgo.MessageCreate) {
|
||||||
// In case this doesn’t work with your font: the last character is a winking emoji.
|
// In case this doesn’t work with your font: the last character is a winking emoji.
|
||||||
winks, _ := regexp.MatchString("([()|DoO];|;[()|DoOpP]|:wink:|😉)", m.Content)
|
winks, _ := regexp.MatchString("([()|DoO];|;[()|DoOpP]|:wink:|😉)", m.Content)
|
||||||
if winks {
|
if winks {
|
||||||
s.ChannelMessageSend(m.ChannelID, fmt.Sprintf("<@%s> faggot", m.Author.ID))
|
s.ChannelMessageSend(m.ChannelID, fmt.Sprintf("<@%s> Oboe!", m.Author.ID))
|
||||||
s.ChannelMessageDelete(m.ChannelID, m.ID)
|
s.ChannelMessageDelete(m.ChannelID, m.ID)
|
||||||
channel := getChannel(s.State, m.ChannelID)
|
channel := getChannel(s.State, m.ChannelID)
|
||||||
log.Printf("Deleted message by %s in %s. Content: “%s”", userToString(m.Author), channelToString(channel), m.Content)
|
log.Printf("Deleted message by %s in %s. Content: “%s”", userToString(m.Author), channelToString(channel), m.Content)
|
||||||
|
@ -145,6 +201,9 @@ func genericReply(s *discordgo.Session, m *discordgo.MessageCreate) {
|
||||||
} else if m.Content == "o/" {
|
} else if m.Content == "o/" {
|
||||||
s.ChannelMessageSend(m.ChannelID, "\\o")
|
s.ChannelMessageSend(m.ChannelID, "\\o")
|
||||||
log.Printf("\\o at %s", userToString(m.Author))
|
log.Printf("\\o at %s", userToString(m.Author))
|
||||||
|
} else if m.Content == "ayy" {
|
||||||
|
s.ChannelMessageSend(m.ChannelID, "lmao")
|
||||||
|
log.Printf("ayy lmao at %s", userToString(m.Author))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -152,6 +211,7 @@ func genericReply(s *discordgo.Session, m *discordgo.MessageCreate) {
|
||||||
// Admin stuff down here. This is very server-specific
|
// Admin stuff down here. This is very server-specific
|
||||||
|
|
||||||
func replyGodmode(s *discordgo.Session, m *discordgo.MessageCreate) {
|
func replyGodmode(s *discordgo.Session, m *discordgo.MessageCreate) {
|
||||||
|
/*
|
||||||
if m.Content == "print_rules()" {
|
if m.Content == "print_rules()" {
|
||||||
channel := getChannel(s.State, m.ChannelID)
|
channel := getChannel(s.State, m.ChannelID)
|
||||||
log.Printf("print_rules() triggered by %s in %s.", userToString(m.Author), channelToString(channel))
|
log.Printf("print_rules() triggered by %s in %s.", userToString(m.Author), channelToString(channel))
|
||||||
|
@ -202,5 +262,6 @@ func replyGodmode(s *discordgo.Session, m *discordgo.MessageCreate) {
|
||||||
}
|
}
|
||||||
s.ChannelMessageSendEmbed(m.ChannelID, embed)
|
s.ChannelMessageSendEmbed(m.ChannelID, embed)
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user