diff --git a/README.md b/README.md index 474cfad..73b6e5f 100644 --- a/README.md +++ b/README.md @@ -207,6 +207,25 @@ The `auto-tk-warn` plugin will automatically warn players in game to apologise f +### chat-commands +The `chat-command` plugin will automatically broadcast messages when a player types the corresponding command into any chat. + +##### Options + + + + + + + + + + + + + +
OptionTypeRequiredDefaultDescription
commandsArray of command configsfalse[{"command":"!squadjs","type":"warn","response":"This server is powered by SquadJS.","ignoreChats":[]}]See the default value as an example of how to configure commands. Type can either be `warn` or `broadcast`
+ ### discord-admin-broadcast The `discord-admin-broadcast` plugin will send a copy of admin broadcasts made in game to a Discord channel. diff --git a/config.json b/config.json index 9f39b2c..6a02afd 100644 --- a/config.json +++ b/config.json @@ -66,6 +66,18 @@ "enabled": true, "message": "Please apologise for ALL TKs in ALL chat!" }, + { + "plugin": "chat-commands", + "enabled": false, + "commands": [ + { + "command": "!squadjs", + "type": "warn", + "response": "This server is powered by SquadJS.", + "ignoreChats": [] + } + ] + }, { "plugin": "discord-admin-broadcast", "enabled": true, diff --git a/plugins/chat-commands/index.js b/plugins/chat-commands/index.js new file mode 100644 index 0000000..07ae609 --- /dev/null +++ b/plugins/chat-commands/index.js @@ -0,0 +1,43 @@ +import { CHAT_MESSAGE } from 'squad-server/events'; + +export default { + name: 'chat-commands', + description: + 'The `chat-command` plugin will automatically broadcast messages when a player types the corresponding command into any chat.', + + defaultEnabled: false, + optionsSpec: { + commands: { + type: 'Array of command configs', + required: false, + default: [ + { + command: '!squadjs', + type: 'warn', + response: 'This server is powered by SquadJS.', + ignoreChats: [] + } + ], + description: + 'See the default value as an example of how to configure commands. Type can either be `warn` or `broadcast`' + } + }, + + init: async (server, options) => { + server.on(CHAT_MESSAGE, (info) => { + // loop through all possibilities + for (const command of options.commands) { + // check if message is a command + if (!info.message.startsWith(command.command)) continue; + // check if ignored channel + if (command.ignoreChats.includes(info.chat)) continue; + // React to command with either a broadcast or a warning + if (command.type === 'broadcast') { + server.rcon.broadcast(command.response); + } else if (command.type === 'warn') { + server.rcon.warn(info.steamID, command.response); + } + } + }); + } +}; diff --git a/plugins/index.js b/plugins/index.js index fcf6a72..bbb9996 100644 --- a/plugins/index.js +++ b/plugins/index.js @@ -12,9 +12,11 @@ import mapvoteDidYouMean from './mapvote/mapvote-did-you-mean.js'; import mysqlLog from './mysql-log/index.js'; import seedingMessage from './seeding-message/index.js'; import teamRandomizer from './team-randomizer/index.js'; +import chatCommands from './chat-commands/index.js'; export { autoTKWarn, + chatCommands, discordAdminBroadcast, discordAdminCamLogs, discordChat, @@ -32,6 +34,7 @@ export { const plugins = [ autoTKWarn, + chatCommands, discordAdminBroadcast, discordAdminCamLogs, discordChat,