新的 Discord 斜线命令

时间:2020-12-22 01:35:24

标签: javascript discord discord.js

最近,discord 为您自己的应用程序添加了对斜杠命令的支持。我通读了它的文档,并尝试搜索了一些视频(但是该功能刚刚发布),但我不明白我实际上必须做什么才能使其正常工作。我正在使用 WebStorm(js、node.js)。有没有人成功制作过斜线命令,如果有,如何制作?

Documentation

2 个答案:

答案 0 :(得分:23)

您可以使用常规的 discord.js,现在它是 v12.5.1

这只是一个示例,但对我有用。 (目前我正在尝试改进这一点)

const Discord = require('discord.js');
const client = new Discord.Client();

client.on('ready', () => {
    client.api.applications(client.user.id).guilds(YOUR_GUILD_ID_HERE).commands.post({
        data: {
            name: "hello",
            description: "hello world command"
            // possible options here e.g. options: [{...}]
        }
    });


    client.ws.on('INTERACTION_CREATE', async interaction => {
        const command = interaction.data.name.toLowerCase();
        const args = interaction.data.options;

        if (command === 'hello'){ 
            // here you could do anything. in this sample
            // i reply with an api interaction
            client.api.interactions(interaction.id, interaction.token).callback.post({
                data: {
                    type: 4,
                    data: {
                        content: "hello world!!!"
                    }
                }
            })
        }
    });
});

client.login(token);

当然你可以有选择,看文档...

IDE 不会注册新代码...至少我的 php 风暴目前没有:)

但是,给机器人正确的权限来使用这种类型的命令很重要!

因此转到 Discord.com/developers,选择您的应用程序,转到 OAuth2 并选择

<块引用>

应用程序命令

来自范围部分。这应该在中间列的底部。您还应该选择 bot,并在 Bot Permissions 下设置一些其他特定权限。然后使用新的邀请链接重新邀请机器人。

如果没有 application.commands 权限,该命令将无法工作,并且您会收到类似 Missing Access 之类的错误。

重要事项

  1. 使用 .guilds('11231...').comma 测试这些命令。不使用时,大约需要 1 小时才能激活。使用它会立即激活它。

  2. 授予机器人正确的权限。 application.commands

答案 1 :(得分:4)

嗨,我通常不使用 discord.js,但我能够找到一些关于此的很好的文档。您应该可以在定义了“客户端”的情况下做到这一点。

const interactions = require("discord-slash-commands-client");

const client = new interactions.Client(
  "you unique bot token",
  "your bots user id"
);

如果客户端的定义如图所示,那么 /command 应该可以这样定义。

// will create a new command and log its data. 
//If a command with this name already exist will that be overwritten.
client.createCommand({
    name: "your command name",
    description: "description for this command",
  })
  .catch(console.error)
  .then(console.log);