syntax.js 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. const commands = require('./commands.json');
  2. function minecraft_syntax(lang, msg, befehl, args, title, cmd, querystring, fragment, reaction, spoiler) {
  3. befehl = befehl.toLowerCase();
  4. var aliasCmd = ( commands.aliases[befehl] || befehl );
  5. if ( aliasCmd in commands.list ) {
  6. var cmdSyntaxMap = commands.list[aliasCmd].map( command => {
  7. var cmdargs = command.split(' ');
  8. if ( cmdargs[0].startsWith( '/' ) ) cmdargs = cmdargs.slice(1);
  9. var argmatches = cmdargs.map( (arg, i) => {
  10. if ( arg === args[i] ) return true;
  11. } );
  12. var matchCount = 0;
  13. argmatches.forEach( match => {
  14. if ( match ) matchCount++;
  15. } );
  16. return [argmatches.lastIndexOf(true),matchCount];
  17. } );
  18. var lastIndex = Math.max(...cmdSyntaxMap.map( command => command[0] ));
  19. var matchCount = Math.max(...cmdSyntaxMap.filter( command => command[0] === lastIndex ).map( command => command[1] ));
  20. var regex = new RegExp('/' + aliasCmd, 'g');
  21. var cmdSyntax = commands.list[aliasCmd].filter( (command, i) => ( lastIndex === -1 || cmdSyntaxMap[i][0] === lastIndex ) && cmdSyntaxMap[i][1] === matchCount ).join('\n').replaceSave( regex, '/' + befehl );
  22. msg.sendChannel( spoiler + '```md\n' + cmdSyntax + '```<' + lang.get('minecraft.link') + lang.get('minecraft.cmdpage') + aliasCmd + '>' + spoiler, {split:{maxLength:2000,prepend:spoiler + '```md\n',append:'```' + spoiler}} );
  23. if ( reaction ) reaction.removeEmoji();
  24. }
  25. else {
  26. msg.reactEmoji('❓');
  27. msg.notMinecraft = true;
  28. this.WIKI.gamepedia(lang, msg, title, lang.get('minecraft.link'), cmd, reaction, spoiler, querystring, fragment);
  29. }
  30. }
  31. module.exports = {
  32. name: 'SYNTAX',
  33. run: minecraft_syntax
  34. };