revise command rework

This commit is contained in:
wish
2022-09-30 02:54:37 +10:00
parent 2f123d96df
commit 9b1f3f8012
3 changed files with 53 additions and 99 deletions

View File

@@ -30,31 +30,25 @@
"bottoken": "",
"realtimeChannelID": ""
},
"ServerCommands": {
"enabled": true,
"Commands": [
{
"name": "Rights",
"enabled": true,
"prefix": "!rights"
},
{
"name": "Ravi",
}, {
"name": "Raviente",
"enabled": true,
"prefix": "!ravi"
},
{
"name": "Tele",
}, {
"name": "Teleport",
"enabled": true,
"prefix": "!tele"
},
{
}, {
"name": "Reload",
"enabled": true,
"prefix": "!reload"
}
]
},
],
"database": {
"host": "localhost",
"port": 5432,

View File

@@ -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 {

View File

@@ -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")
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(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.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"])
}
}
}