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
+
+
+
+ Option |
+ Type |
+ Required |
+ Default |
+ Description |
+
+
+
+ commands | Array of command configs | false | [{"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,