📜  discord.js 等待消息 - Javascript (1)

📅  最后修改于: 2023-12-03 15:00:25.732000             🧑  作者: Mango

Discord.js 等待消息 - JavaScript

在 Discord.js 中,可以使用 client.on('message', callback) 方法来监听消息事件。但是,有些时候我们需要等待用户的回复或者其他消息,此时就需要使用 awaitMessages() 方法。本文将介绍如何使用 Discord.js 等待消息。

准备工作

首先,我们需要安装 Discord.js。

npm install discord.js

然后,在代码中引入 Discord.js。

const Discord = require('discord.js');
const client = new Discord.Client();
等待消息

使用 awaitMessages() 方法可以等待用户回复或其他消息。此方法需要传入一个 Filter 函数用于过滤特定消息,以及 Options 配置对象。

这里我们以等待特定用户的回复为例子。用户回复时,将消息发送到一个指定的频道中。

client.on('message', async message => {
  if (message.author.bot) return; // 不处理机器人发送的消息
  if (message.content === '!hello') {
    // 发送问候消息,并等待回复
    message.channel.send('请选择 A 或 B:');
    const filter = response => response.author.id === message.author.id;
    const options = { max: 1, time: 30000 };
    const collected = await message.channel.awaitMessages(filter, options);
    const reply = collected.first().content;
    // 将回复发送到指定频道
    const channel = client.channels.cache.get('CHANNEL_ID');
    channel.send(`用户回复:${reply}`);
  }
});

在上面的例子中,我们定义了一个 filter 函数,用于过滤特定用户的消息,options 对象定义了最多收集一条回复,等待时间为30秒。

awaitMessages() 方法返回一个 Promise 对象,如果等待超时会抛出 PromiseTimeoutError 异常。

完整代码

下面是完整的代码片段,记得将 TOKEN 替换为你自己的 Bot Token,CHANNEL_ID 替换为你需要发送回复的频道 ID。

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

client.on('ready', () => {
  console.log(`Logged in as ${client.user.tag}!`);
});

client.on('message', async message => {
  if (message.author.bot) return;
  if (message.content === '!hello') {
    message.channel.send('请选择 A 或 B:');
    const filter = response => response.author.id === message.author.id;
    const options = { max: 1, time: 30000 };
    try {
      const collected = await message.channel.awaitMessages(filter, options);
      const reply = collected.first().content;
      const channel = client.channels.cache.get('CHANNEL_ID');
      channel.send(`用户回复:${reply}`);
    } catch (error) {
      console.error(error);
      message.reply('等待回复超时。');
    }
  }
});

client.login('TOKEN');

以上就是 Discord.js 等待消息的详细介绍。对于需要等待用户回复的情况, awaitMessages() 方法是一个非常实用且方便的解决方案。