Skip to content
Snippets Groups Projects
Select Git revision
  • 223bd88f077a3ffc8037d2e33773905649549a09
  • main default protected
2 results

command.go

Blame
  • command.go 3.96 KiB
    package main
    
    import (
    	"git.randomchars.net/freenitori/log"
    	"git.randomchars.net/freenitori/multiplexer"
    	"github.com/bwmarrin/discordgo"
    	"strconv"
    	"strings"
    )
    
    func init() {
    	m.Route(&multiplexer.Route{
    		Pattern:       "ceiling",
    		AliasPatterns: []string{"lim", "userlimit", "limit"},
    		Description:   "Configure user limit of a channel.",
    		Category:      system,
    		Handler: func(context *multiplexer.Context) {
    			var limit uint8
    			if len(context.Fields) != 2 {
    				// Return if unexpected amount of arguments.
    				context.SendMessage("Expecting new channel user limit.")
    				return
    			} else if lim, err := strconv.Atoi(context.Fields[1]); err != nil {
    				// Return if not numeric.
    				context.SendMessage("Invalid argument.")
    				return
    			} else {
    				if lim > 0 && lim <= 99 {
    					limit = uint8(lim)
    				} else {
    					// Return if out of range
    					context.SendMessage("Limit out of range.")
    					return
    				}
    			}
    
    			// Get instance
    			instance, ok := instancesUser[context.User.ID]
    			if !ok {
    				context.SendMessage("You do not own any volatile channel.")
    				return
    			}
    
    			// Perform action
    			if !instance.actionPerform("ceiling",
    				func() bool {
    					// Check if payload is the same as current state
    					if instance.Channel.UserLimit == int(limit) {
    						context.SendMessage("User limit was not changed.")
    						return false
    					}
    
    					// Perform change
    					if channel, err := context.Session.ChannelEditComplex(instance.Channel.ID,
    						&discordgo.ChannelEdit{UserLimit: int(limit), Position: instance.Channel.Position}); !context.HandleError(err) {
    						return false
    					} else {
    						instance.Channel = channel
    					}
    					return true
    				}, context.SendMessage) {
    				return
    			}
    
    			log.Infof("Set user limit of volatile channel #%s (%s) to %v on behalf of %s#%s (%s).",
    				instance.Channel.Name,
    				instance.Channel.ID,
    				limit,
    				instance.Initiator.User.Username,
    				instance.Initiator.User.Discriminator,