javascript Discord.js On message命令不起作用

ctehm74n  于 2023-03-28  发布在  Java
关注(0)|答案(4)|浏览(117)

Discord.js问题我应该指出我没有discord.js的经验。我有下面的代码,应该将用户请求的总和或表达式更改为实际的答案和消息。我的其他命令正在工作,但不是其他这里的代码:

client.once("message", msg => {
    if(msg.content.includes("!simple")){
       math = Number(msg.content.slice(msg.content.search("e")))
msg.reply(guild.username + "The answer is " + math )

    }
})

我基本上是通过slice方法删除命令部分,然后使用Number函数计算它的值,随后返回它,但我没有得到机器人的响应。

d8tt03nd

d8tt03nd1#

同时,Discord更改了他们的API。client.on("message")现在已被弃用。2021年的工作示例如下所示:

const { Client, Intents } = require('discord.js');
const client = new Client({ intents: [Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_MESSAGES] });

client.on("messageCreate", (message) => {
  if (message.author.bot) return false; 
  
  console.log(`Message from ${message.author.username}: ${message.content}`);
});

client.login(process.env.BOT_TOKEN);

Boot 需要明确的权限来读取消息。如果bot没有该权限,则不会触发on messageCreate事件。

bxfogqkk

bxfogqkk2#

我不太清楚你说“请求金额或表达”是什么意思,类似这样的?

client.on('message', msg => {
  if (msg.content.startsWith('!simple')) {
    var tocalc = msg.content.substr(8);
    if (!tocalc.match(/^[\d\(\)\+\-\/\*e\.%=!\s]+$/)) { // allowed = ['number', '(', ')', '+', '-', '*', '/', 'e', '.', '%', '=', '!', ' ']
        msg.reply('no valid expression or calculation');
        return;
    }
    var result;
    try {
        result = Function('return ' + tocalc)();
    } catch(e) {
        console.error(`tried to exploit! ban user ${msg.author.id}!`);
        return;
    }
    if (isNaN(result)) {
        console.error(`tried to exploit! ban user ${msg.author.id}!`);
        return;
    }
    msg.reply(result);
  }
});

!simple 1 + 8 - (4 * .25) // 8
!simple 1 == 1 // true
!simple 9 % 2 != 8 % 2 // true
brgchamk

brgchamk3#

我会这么做

client.on("message",message=>{

  if(!message.content.startsWith("!simple") return ;//if the message does not start with simple return
  const args=message.content.slice(6).trim().split(/ +/);//splits the command into an array separated by spaces
  const command=args.shift().toLowerCase();//removes the command (!simple in this case)
//now you can acces your arguments args[0]..args[1]..args[n]
  });
pb3skfrl

pb3skfrl4#

if(message.author.bot)return false;

相关问题