diff --git a/src/bot/helpers/checkFilter.ts b/src/bot/helpers/checkFilter.ts index c292361a6e5..9877881e3dd 100644 --- a/src/bot/helpers/checkFilter.ts +++ b/src/bot/helpers/checkFilter.ts @@ -46,7 +46,8 @@ export const checkFilter = async (opts: CommandOptions | ParserOptions, filter: $sender: opts.sender.username, $is, $rank, - $haveParam: opts.parameters.length > 0, + $haveParam: opts.parameters?.length > 0, + $param: opts.parameters, // add global variables $game: api.stats.currentGame || 'n/a', $language: api.stats.language || 'en', diff --git a/src/panel/views/managers/commands.vue b/src/panel/views/managers/commands.vue index fd06fe7ca09..ef58f5d7d48 100644 --- a/src/panel/views/managers/commands.vue +++ b/src/panel/views/managers/commands.vue @@ -146,7 +146,7 @@ :value.sync="response.filter" v-bind:placeholder="translate('systems.customcommands.filter.placeholder')" v-on:update="response.filter = $event" - v-bind:filters="['sender', 'source', 'haveParam', 'is.moderator', 'is.subscriber', 'is.vip', 'is.follower', 'is.broadcaster', 'is.bot', 'is.owner', 'rank', 'game', 'language', 'title', 'views', 'followers', 'hosts', 'subscribers', 'isBotSubscriber']" + v-bind:filters="['sender', 'source', 'param', 'haveParam', 'is.moderator', 'is.subscriber', 'is.vip', 'is.follower', 'is.broadcaster', 'is.bot', 'is.owner', 'rank', 'game', 'language', 'title', 'views', 'followers', 'hosts', 'subscribers', 'isBotSubscriber']" :state="true" > diff --git a/test/tests/commands/discord#794732878595752016_param_should_be_properly_filtered.js.js b/test/tests/commands/discord#794732878595752016_param_should_be_properly_filtered.js.js new file mode 100644 index 00000000000..e77b621bf8c --- /dev/null +++ b/test/tests/commands/discord#794732878595752016_param_should_be_properly_filtered.js.js @@ -0,0 +1,65 @@ +/* global describe it beforeEach */ +require('../../general.js'); + +const db = require('../../general.js').db; +const time = require('../../general.js').time; +const assert = require('assert'); +const message = require('../../general.js').message; +const user = require('../../general.js').user; + +const { getRepository } = require('typeorm'); +const { User } = require('../../../dest/database/entity/user'); +const { Commands } = require('../../../dest/database/entity/commands'); + +const customcommands = (require('../../../dest/systems/customcommands')).default; +const { permission } = (require('../../../dest/helpers/permissions')); + +describe('Custom Commands - https://discord.com/channels/317348946144002050/317349069024395264/794732878595752016 - Custom command $param filter should be properly evaluated', () => { + before(async () => { + await db.cleanup(); + await message.prepare(); + await user.prepare(); + + const command = await getRepository(Commands).save({ + command: '!test', + enabled: true, + visible: true, + responses: [ + { + order: 0, + response: '1', + permission: permission.VIEWERS, + stopIfExecuted: true, + filter: '$param === "1"' + }, + { + order: 1, + response: '2', + permission: permission.VIEWERS, + stopIfExecuted: true, + filter: '$param === "2"' + } + ] + }) + }); + + it('Run custom command !test 1', async () => { + await message.prepare(); + await customcommands.run({ sender: user.owner, message: '!test 1', parameters: '1' }); + }); + + it('Expect response 1', async() => { + await message.isSentRaw('1', user.owner); + await message.isNotSentRaw('2', user.owner); + }); + + it('Run custom command !test 2', async () => { + await message.prepare(); + await customcommands.run({ sender: user.owner, message: '!test 2', parameters: '2' }); + }); + + it('Expect response 2', async() => { + await message.isSentRaw('2', user.owner); + await message.isNotSentRaw('1', user.owner); + }); +});