From dbd2fc12d35f6c2975b8931f69dd66b85b1d4cc9 Mon Sep 17 00:00:00 2001 From: Matthieu Lalonde Date: Thu, 28 Jan 2021 18:29:06 +0000 Subject: [PATCH] Added random message mode, closes #24 --- pkg/bot/bot.go | 14 +++++++----- pkg/bot/handlers.go | 52 +++++++++++++++++++++++++++++++++++++++++++++ pkg/bot/msgs.go | 19 ++++++++++------- 3 files changed, 72 insertions(+), 13 deletions(-) diff --git a/pkg/bot/bot.go b/pkg/bot/bot.go index 43d99b2..271aa5d 100644 --- a/pkg/bot/bot.go +++ b/pkg/bot/bot.go @@ -8,6 +8,7 @@ import ( "fmt" "log" "os" + "strings" "time" "git.lalonde.me/matth/AltVRBot/pkg/altvr" @@ -99,18 +100,21 @@ func (b *Type) setFlags() { flag.StringVar(&b.AltVRPassword, "p", "", "AltVR Password") } var mode string - flag.StringVar(&mode, "m", "", "Select the reply message mode <"+msgModeNormalString+"|"+msgModeRudeString+"|"+msgModeFlirtyString+">") + ms := fmt.Sprintf("%s|%s|%s|%s", msgModeNormal, msgModeRude, msgModeFlirty, msgModeRandom) + flag.StringVar(&mode, "m", "", "Select the reply message mode <"+ms+">") if mode == "" { if value, ok := os.LookupEnv("DG_MSG_MODE"); ok { mode = value } } - switch mode { - case msgModeFlirtyString: + switch strings.ToLower(mode) { + case msgModeRandom.String(): + b.msgMode = msgModeRandom + case msgModeFlirty.String(): b.msgMode = msgModeFlirty - case msgModeRudeString: + case msgModeRude.String(): b.msgMode = msgModeRude - case msgModeNormalString: + case msgModeNormal.String(): b.msgMode = msgModeNormal default: if mode != "" { diff --git a/pkg/bot/handlers.go b/pkg/bot/handlers.go index 3cea4ff..0118037 100644 --- a/pkg/bot/handlers.go +++ b/pkg/bot/handlers.go @@ -11,6 +11,21 @@ import ( "github.com/bwmarrin/discordgo" ) +var ( + commandFormats = map[string]string{ + // Moderator commands + "auser": " [Discord Emoji]", + "aemoji": " ", + "accept": "(As reply) [Discord Emoji]", + "deny": "(As reply)", + + // User commands + "msg": " ...", + "status": "[Discord Mention...]", + "privacy": "", + } +) + func (b *Type) loadDiscordHandlers() { // Admin commands // XXX: Promote @@ -25,6 +40,7 @@ func (b *Type) loadDiscordHandlers() { // User commands b.dg.Router.Route("msg", "Message an AltVR user", b.handleSendMessage) b.dg.Router.Route("status", "Show the current AltVR user status", b.handleStatusCheck) + b.dg.Router.Route("privacy", "Enable or disable user priacy modes", b.handleUserPrivacy) b.dg.Router.Default, _ = b.dg.Router.Route("default", "", b.handleDefault) b.dg.Session.AddHandler(b.handleMessageReplies) @@ -222,6 +238,9 @@ func (b *Type) handleStatusCheck(ds *discordgo.Session, dm *discordgo.Message, c if err != nil { continue } + if upHas(du.Privacy, userPrivacyStatus) { + continue + } e := du.GetDiscordEmoji() if e != "" { msg += e + " " @@ -252,6 +271,37 @@ func (b *Type) handleStatusCheck(ds *discordgo.Session, dm *discordgo.Message, c } } +func (b *Type) handleUserPrivacy(ds *discordgo.Session, dm *discordgo.Message, ctx *mux.Context) { + //fmt.Printf("dm:\t%+v\nctv:\t%+v\n", dm, ctx) + if !b.checkUserRole(dm.Author.ID, RoleUser) { + b.replyPermissionDenied(ds, dm, ctx) + return + } + uu, _ := b.getUserByDiscordID(dm.Author.ID) + c := strings.TrimSpace(ctx.Content) + p := strings.Split(c, " ") + if len(p) != 2 { + b.replyInvalidCommandFormat(ds, dm, ctx, "privacy") + return + } + pp := p[1:][0] + if !utils.SliceContainsString([]string{"none", "join", "part", "status", "all"}, pp) { + b.replyInvalidCommandFormat(ds, dm, ctx, "privacy") + return + } + uu.Privacy = userPrivacyFromString(pp) + b.dg.Session.ChannelMessageSendReply(dm.ChannelID, + b.getMessageString("all_done", uu), + &discordgo.MessageReference{ + MessageID: dm.ID, + ChannelID: dm.ChannelID, + GuildID: dm.GuildID, + }) + if err := b.saveUserFile(); err != nil { + log.Printf("Error while saving user file: %+v\n", err) + } +} + /* ** Moderator commands */ @@ -309,6 +359,7 @@ func (b *Type) handleAssociateUser(ds *discordgo.Session, dm *discordgo.Message, DiscordEmoji: e, Role: role, MsgMode: b.msgMode, + Privacy: userPrivacyDefault, }) b.dg.Session.ChannelMessageSendReply(dm.ChannelID, b.getMessageString("all_done", uu), @@ -427,6 +478,7 @@ func (b *Type) handleAcceptFriendship(ds *discordgo.Session, dm *discordgo.Messa DiscordEmoji: e, Role: role, MsgMode: b.msgMode, + Privacy: userPrivacyDefault, }) b.avr.AcceptFriendshipRequest(req.Friendship.FriendshipID) for k, fr := range b.frPending { diff --git a/pkg/bot/msgs.go b/pkg/bot/msgs.go index 1f57225..eba7a78 100644 --- a/pkg/bot/msgs.go +++ b/pkg/bot/msgs.go @@ -9,22 +9,21 @@ import ( "git.lalonde.me/matth/AltVRBot/pkg/utils" ) -type msgMode uint +type msgMode int const ( - msgModeNone = iota + msgModeRandom msgMode = -1 + iota + msgModeNone msgModeNormal msgModeRude msgModeFlirty ) -const ( - msgModeNormalString = "normal" - msgModeRudeString = "rude" - msgModeFlirtyString = "flirty" -) +func (mm msgMode) String() string { + return [...]string{"random", "none", "normal", "rude", "flirty"}[int(mm)+1] +} -type msgMap map[string]string +const msgModeLast = msgModeFlirty var ( commandFormats = map[string]string{ @@ -111,6 +110,10 @@ func (b *Type) getMessageString(msgID string, params ...interface{}) string { p = p[1:] } } + if mode == msgModeRandom { + im := utils.RandIdx(int(msgModeFlirty)-1) + 1 + mode = msgMode(im) + } if mode == msgModeNone { mode = msgModeNormal }