diff --git a/config.json b/config.json index 8d500907c..5f04778c1 100644 --- a/config.json +++ b/config.json @@ -30,31 +30,25 @@ "bottoken": "", "realtimeChannelID": "" }, - "ServerCommands": { - "enabled": true, - "Commands": [ - { - "name": "Rights", - "enabled": true, - "prefix": "!rights" - }, - { - "name": "Ravi", - "enabled": true, - "prefix": "!ravi" - }, - { - "name": "Tele", - "enabled": true, - "prefix": "!tele" - }, - { - "name": "Reload", - "enabled": true, - "prefix": "!reload" - } - ] - }, + "Commands": [ + { + "name": "Rights", + "enabled": true, + "prefix": "!rights" + }, { + "name": "Raviente", + "enabled": true, + "prefix": "!ravi" + }, { + "name": "Teleport", + "enabled": true, + "prefix": "!tele" + }, { + "name": "Reload", + "enabled": true, + "prefix": "!reload" + } + ], "database": { "host": "localhost", "port": 5432, diff --git a/config/config.go b/config/config.go index 27bcff6f0..5355b6e42 100644 --- a/config/config.go +++ b/config/config.go @@ -19,7 +19,7 @@ type Config struct { DevModeOptions DevModeOptions Discord Discord - ServerCommands ServerCommands + Commands []Command Database Database Launcher Launcher Sign Sign @@ -64,13 +64,8 @@ type Discord struct { DevMode bool } -// Server commands -type ServerCommands struct { - Enabled bool - Commands []ServerCommand -} - -type ServerCommand struct { +// Command is a channelserver chat command +type Command struct { Name string Enabled bool Prefix string @@ -142,17 +137,6 @@ func init() { } -func GetServerCommandByName(cmdName string) ServerCommand { - var val ServerCommand - for _, c := range ErupeConfig.ServerCommands.Commands { - if c.Name == cmdName { - return c - } - } - - return val -} - // getOutboundIP4 gets the preferred outbound ip4 of this machine // From https://stackoverflow.com/a/37382208 func getOutboundIP4() net.IP { diff --git a/server/channelserver/handlers_cast_binary.go b/server/channelserver/handlers_cast_binary.go index 35c9adf0c..6910a01ae 100644 --- a/server/channelserver/handlers_cast_binary.go +++ b/server/channelserver/handlers_cast_binary.go @@ -32,45 +32,26 @@ const ( BroadcastTypeWorld = 0x0a ) -var raviCmd config.ServerCommand -var rightsCmd config.ServerCommand -var teleCmd config.ServerCommand -var reloadCmd config.ServerCommand -var logger *zap.Logger +var commands map[string]config.Command func init() { + commands = make(map[string]config.Command) zapLogger, _ := zap.NewDevelopment() defer zapLogger.Sync() - logger = zapLogger.Named("channelserver") - - raviCmd = config.GetServerCommandByName("Ravi") - if raviCmd.Enabled { - logger.Info(raviCmd.Name + " command is enabled") - } else { - logger.Info(raviCmd.Name + " command is disabled") - } - - rightsCmd = config.GetServerCommandByName("Rights") - if rightsCmd.Enabled { - logger.Info(rightsCmd.Name + " command is enabled") - } else { - logger.Info(rightsCmd.Name + " command is disabled") - } - - teleCmd = config.GetServerCommandByName("Tele") - if teleCmd.Enabled { - logger.Info(teleCmd.Name + " command is enabled") - } else { - logger.Info(teleCmd.Name + " command is disabled") - } - - reloadCmd = config.GetServerCommandByName("Reload") - if reloadCmd.Enabled { - logger.Info(reloadCmd.Name + " command is enabled") - } else { - logger.Info(reloadCmd.Name + " command is disabled") + logger := zapLogger.Named("commands") + cmds := config.ErupeConfig.Commands + for _, cmd := range cmds { + commands[cmd.Name] = cmd + if cmd.Enabled { + logger.Info(fmt.Sprintf("%s command is enabled, prefix: %s", cmd.Name, cmd.Prefix)) + } else { + logger.Info(fmt.Sprintf("%s command is disabled", cmd.Name)) + } } +} +func sendDisabledCommandMessage(s *Session, cmd config.Command) { + sendServerChatMessage(s, fmt.Sprintf("%s command is disabled", cmd.Name)) } func sendServerChatMessage(s *Session, message string) { @@ -209,9 +190,14 @@ func handleMsgSysCastBinary(s *Session, p mhfpacket.MHFPacket) { fmt.Printf("Got chat message: %+v\n", chatMessage) - if strings.HasPrefix(chatMessage.Message, reloadCmd.Prefix) { + // Discord integration + if (pkt.BroadcastType == BroadcastTypeStage && s.stage.id == "sl1Ns200p0a0u0") || pkt.BroadcastType == BroadcastTypeWorld { + s.server.DiscordChannelSend(chatMessage.SenderName, chatMessage.Message) + } + + if strings.HasPrefix(chatMessage.Message, commands["Reload"].Prefix) { // Flush all objects and users and reload - if reloadCmd.Enabled { + if commands["Reload"].Enabled { sendServerChatMessage(s, "Reloading players...") var temp mhfpacket.MHFPacket deleteNotif := byteframe.NewByteFrame() @@ -269,14 +255,13 @@ func handleMsgSysCastBinary(s *Session, p mhfpacket.MHFPacket) { reloadNotif.WriteUint16(0x0010) s.QueueSend(reloadNotif.Data()) } else { - sendServerChatMessage(s, reloadCmd.Name+" command is disabled") + sendDisabledCommandMessage(s, commands["Reload"]) } - } - if strings.HasPrefix(chatMessage.Message, rightsCmd.Prefix) { + if strings.HasPrefix(chatMessage.Message, commands["Rights"].Prefix) { // Set account rights - if rightsCmd.Enabled { + if commands["Rights"].Enabled { var v uint32 n, err := fmt.Sscanf(chatMessage.Message, "!rights %d", &v) if err != nil || n != 1 { @@ -288,19 +273,12 @@ func handleMsgSysCastBinary(s *Session, p mhfpacket.MHFPacket) { } } } else { - sendServerChatMessage(s, rightsCmd.Name+" command is disabled") + sendDisabledCommandMessage(s, commands["Rights"]) } - } - // Discord integration - if (pkt.BroadcastType == BroadcastTypeStage && s.stage.id == "sl1Ns200p0a0u0") || pkt.BroadcastType == BroadcastTypeWorld { - s.server.DiscordChannelSend(chatMessage.SenderName, chatMessage.Message) - } - - if strings.HasPrefix(chatMessage.Message, raviCmd.Prefix) { - // RAVI COMMANDS V2 - if raviCmd.Enabled { + if strings.HasPrefix(chatMessage.Message, commands["Raviente"].Prefix) { + if commands["Raviente"].Enabled { if getRaviSemaphore(s) != "" { s.server.raviente.Lock() if !strings.HasPrefix(chatMessage.Message, "!ravi ") { @@ -358,14 +336,12 @@ func handleMsgSysCastBinary(s *Session, p mhfpacket.MHFPacket) { sendServerChatMessage(s, "No one has joined the Great Slaying!") } } else { - sendServerChatMessage(s, raviCmd.Name+" command is disabled") + sendDisabledCommandMessage(s, commands["Raviente"]) } } - // END RAVI COMMANDS V2 - - if strings.HasPrefix(chatMessage.Message, teleCmd.Prefix) { - if teleCmd.Enabled { + if strings.HasPrefix(chatMessage.Message, commands["Teleport"].Prefix) { + if commands["Teleport"].Enabled { var x, y int16 n, err := fmt.Sscanf(chatMessage.Message, "!tele %d %d", &x, &y) if err != nil || n != 2 { @@ -388,7 +364,7 @@ func handleMsgSysCastBinary(s *Session, p mhfpacket.MHFPacket) { }) } } else { - sendServerChatMessage(s, teleCmd.Name+" command is disabled") + sendDisabledCommandMessage(s, commands["Teleport"]) } } }