Discord.js - 在前缀和命令之后获取信息

时间:2017-11-22 11:05:37

标签: arrays discord.js

我现在正在使用一个新命令,一个poll命令。 为此,我需要一种在前缀和命令本身之后获取参数的方法。

示例:+民意调查你喜欢小狗吗?

并且,它会忽略“+民意调查”,只获得问题本身,然后创建民意调查。

要获得参数,我正在使用:

var Args = message.content.split(/\s+/g)

1 个答案:

答案 0 :(得分:1)

您可能希望尝试使用命令创建轮询,将问题存储在数据库中,然后使用单独的命令显示打开的当前轮询。然后用户将通过命令选择轮询,机器人将等待对问题的响应。

我不会详细介绍如何将问题存储在数据库中,因为这是一个完全不同的问题。如果您需要帮助设置本地数据库并存储民意调查,请链接到另一个问题,我很乐意提供更多示例。

为了解决您的问题,我建议使用subStr将命令后的每个单词保存在数组中,以便稍后在代码中使用这些部分。像这样的东西将存储在变量poll之后的所有内容:

if (message.content.startsWith("!poll ")) {
    var poll = message.content.substr("!poll ".length);
    // Do something with poll variable //
    message.channel.send('Your poll question is: ' + poll);
});

对于回答民意调查的用户,您可以尝试使用awaitMessage提出问题,并提供一定数量的回复。您可能希望将此包装在一个命令中,该命令首先在数据库中查询可用的轮询,并使用该标识符实际获得正确的问题和可能的响应。下面的示例只是回显了收集的响应,但您希望将响应存储在数据库中,而不是在消息中发送它。

if (message.content === '!poll') {
    message.channel.send(`please say yes or no`).then(() => {
            message.channel.awaitMessages(response => response.content === `yes` || response.content === 'no',  {
                max: 1, // number of responses to collect
                time: 10000, //time that bot waits for answer in ms
                errors: ['time'],
            })
                .then((collected) => {
                    var pollRes = collected.first().content; //this is the first response collected
                    message.channel.send('You said ' + pollRes);
                    // Do something else here (save response in database)
                })
                .catch(() => { // if no message is collected
                    message.channel.send('I didnt catch that, Try again.');
                });
        });
};