@ -8,6 +8,7 @@ import (
"os/signal"
"syscall"
"regexp"
"log"
"github.com/bwmarrin/discordgo"
)
@ -42,8 +43,6 @@ func readConfig() Config {
return conf
}
func main ( ) {
dg , err := discordgo . New ( "Bot " + config . Token )
if err != nil {
@ -59,6 +58,13 @@ func main() {
return
}
f , err := os . OpenFile ( "selphybot.log" , os . O_RDWR | os . O_CREATE | os . O_APPEND , 0666 )
if err != nil {
fmt . Println ( "error opening log file: %v" , err )
}
defer f . Close ( )
log . SetOutput ( f )
fmt . Println ( "bot running. selphyWoo" )
sc := make ( chan os . Signal , 1 )
signal . Notify ( sc , syscall . SIGINT , syscall . SIGTERM , os . Interrupt , os . Kill )
@ -71,12 +77,42 @@ func onJoin(s *discordgo.Session, member *discordgo.GuildMemberAdd) {
if ! member . User . Bot {
s . GuildMemberRoleAdd ( config . ServerID , member . User . ID , config . LockedRoleID )
}
log . Printf ( "User joined: %s" , userToString ( member . User ) )
}
func unlockUser ( s * discordgo . Session , id string ) {
s . GuildMemberRoleRemove ( config . ServerID , id , config . LockedRoleID )
log . Printf ( "Removed lock from user: %s" , userToString ( getUser ( s , id ) ) )
}
func userToString ( u * discordgo . User ) string {
return fmt . Sprintf ( "%s#%s (ID: %s)" , u . Username , u . Discriminator , u . ID )
}
func channelToString ( c * discordgo . Channel ) string {
return fmt . Sprintf ( "%s (ID: %s) on %s" , c . Name , c . ID , c . GuildID )
}
func messageToString ( m * discordgo . Message ) string {
return fmt . Sprintf ( "<%s#%s>: %s" , m . Author . Username , m . Author . Discriminator , m . Content )
}
func getChannel ( s * discordgo . State , cid string ) * discordgo . Channel {
channel , _ := s . Channel ( cid )
return channel
}
func getUser ( s * discordgo . Session , uid string ) * discordgo . User {
user , _ := s . User ( uid )
return user
}
/ * func undelete ( s * discordgo . Session , m * discordgo . MessageDelete ) {
channel , _ := s . State . Channel ( m . ChannelID )
message , _ := s . State . Message ( m . ChannelID , m . ID )
log . Println ( fmt . Sprintf ( "Someone deleted a message in %s: “%s”" , channel . Name , messageToString ( message ) ) )
} * /
func genericReply ( s * discordgo . Session , m * discordgo . MessageCreate ) {
if m . Author . ID == s . State . User . ID {
return
@ -97,14 +133,18 @@ func genericReply(s *discordgo.Session, m *discordgo.MessageCreate) {
if winks {
s . ChannelMessageSend ( m . ChannelID , fmt . Sprintf ( "<@%s> faggot" , m . Author . ID ) )
s . ChannelMessageDelete ( m . ChannelID , m . ID )
channel := getChannel ( s . State , m . ChannelID )
log . Printf ( "Deleted message by %s in %s. Content: “%s”" , userToString ( m . Author ) , channelToString ( channel ) , m . Content )
return
}
// As per our majesty’ s command:
if m . Content == "\\o" {
s . ChannelMessageSend ( m . ChannelID , "o/" )
log . Printf ( "o/ at %s" , userToString ( m . Author ) )
} else if m . Content == "o/" {
s . ChannelMessageSend ( m . ChannelID , "\\o" )
log . Printf ( "\\o at %s" , userToString ( m . Author ) )
}
}
@ -113,6 +153,8 @@ func genericReply(s *discordgo.Session, m *discordgo.MessageCreate) {
func replyGodmode ( s * discordgo . Session , m * discordgo . MessageCreate ) {
if m . Content == "print_rules()" {
channel := getChannel ( s . State , m . ChannelID )
log . Printf ( "print_rules() triggered by %s in %s." , userToString ( m . Author ) , channelToString ( channel ) )
embedColor := 0xffb90f // kageru gold
embed := & discordgo . MessageEmbed {
Author : & discordgo . MessageEmbedAuthor { } ,