Red-DiscordBot icon indicating copy to clipboard operation
Red-DiscordBot copied to clipboard

[V3 Alias] Parameterized and fixed-argument command aliases

Open calebj opened this issue 6 years ago • 7 comments

Feature request

Select the type of feature you are requesting:

  • [x] Command

Describe your requested feature

I've been in the situation where I or other users want to create shortcuts for long commands with parameters in the middle of those commands, instead of at the end. On the other hand, I've also wanted to prevent any parameters from being added to the end of the aliased command. The Alias cog is the right place to add both.

I wouldn't mind doing this, but it should be fairly simple to put together. I also don't want to start another thing unless it's wanted in core.

What it would probably involve:

  • Switch to using discord.py's view machinery for argument parsing parity
  • Add syntax for designating defaults or required arguments to aliases
  • More things I haven't thought of yet

Update At the current moment, it seems as though some of what was requested by this issue has been addressed in #2455. However, Alias still does not support adding defaults to custom parameters.

calebj avatar Aug 13 '18 04:08 calebj

I like the suggestion, I've always wanted to write this cog, and have never got around to it. However, I want us to be careful, since as it stands alias is quite a simple cog and I'd like to keep it that way on the front-end - adding these extra features should aim to avoid overwhelming the user with lots of options. Perhaps adding an extra [p]advalias (short for advanced alias) will help to separate the two, so the simplicity of the [p]alias command is retained?

Tobotimus avatar Aug 13 '18 05:08 Tobotimus

Though it would have to have a per-alias toggle to prevent potentially changing behavior on old aliases, I'm opposed in principle to mixing command groups and normal commands. I would keep it under [p]alias but keep the idea by making it a subcommand named advanced that toggles the aforementioned setting. An example of this kind of convention is trigger's regex toggle.

Perhaps a toggle is all that would be needed, if the syntax can be self-describing. Consider:

!aliased {0:foo} "{*2:baz=default value 2}" {1:bar=default value 1}

The first alias parameter is required, since it has no default. The second alias parameter (bar) will be placed last in the substitution, but will be without quotes to allow a *consume_rest mode of operation. And the third alias parameter (baz) will be placed in quotes, but will do its own *consume_rest due to the asterisk on it. Both default values contain spaces. Not everyone will use these modes of operation, of course, but they're fairly close to the way you'd write the command in Python.

calebj avatar Aug 13 '18 05:08 calebj

wew, this one fell threw the cracks. Merged a long time ago

mikeshardmind avatar Jan 04 '20 04:01 mikeshardmind

Or I can misread this, sorry that was CC which fully handles this already.

mikeshardmind avatar Jan 04 '20 04:01 mikeshardmind

Didn't #2455 add this functionality?

Zephyrkul avatar Jan 04 '20 05:01 Zephyrkul

I thought that didn't handle default values for alias, but I'm not the largest alias user, did I miss something with that?

mikeshardmind avatar Jan 04 '20 05:01 mikeshardmind

Ah, sorry, no it doesn't. I didn't see that comment further down. Worth noting that CC doesn't handle default arguments either.

Zephyrkul avatar Jan 04 '20 05:01 Zephyrkul