nyxx_commands is a framework for easily creating slash commands and text commands for Discord using the nyxx library.
Inspired by discord.py's commands extension.
Need help with nyxx_commands? Join our Discord server and ask in the #nyxx_commands
channel.
- Easy command creation
- Automatic compatibility with Discord slash commands
- Compatibility with the nyxx library
- Argument parsing
If you compile a bot using nyxx_commands with dart compile exe
, you might get an error you hadn't seen during development:
Error: Function data was not correctly loaded. Did you compile the wrong file?
Stack trace:
#0 loadFunctionData (package:nyxx_commands/src/mirror_utils/compiled.dart:10)
#1 ChatCommand._loadArguments (package:nyxx_commands/src/commands/chat_command.dart:354)
...
This is because nyxx_commands uses dart:mirrors
to load the arguments for your commands. During development this is fine but this functionality breaks when compiled because dart:mirrors
cannot be used in compiled Dart programs.
To mitigate this, nyxx_commands provides a script that compiles your code for you and loads this information for nyxx_commands to use. To use it, you must first wrap all your command callbacks in id
and give each function a unique id.
For example, this chat command:
final ping = ChatCommand(
'ping',
'Ping the bot',
(IChatContext context) => context.respond(MessageBuilder.content('Pong!')),
);
must have its callback wrapped with id
like so:
final ping = ChatCommand(
'ping',
'Ping the bot',
id('ping', (IChatContext context) => context.respond(MessageBuilder.content('Pong!'))),
);
If you forget to add the id
to a function, you'll get an error similar to this one:
Error: Command Exception: Couldn't load function data for function Closure: (IChatContext) => Null
Stack trace:
#0 loadFunctionData (package:nyxx_commands/src/mirror_utils/compiled.dart:18)
#1 ChatCommand._loadArguments (package:nyxx_commands/src/commands/chat_command.dart:354)
...
Once you've added id
to all your commands, use the nyxx_commands:compile
script to compile your program. See dart run nyxx_commands:compile --help
for a list of options.
If you use the --no-compile
flag, make sure that you run/compile the generated file and not your own main file.