首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Discord.js:为什么"awaitMessages“在事件:"ready”中不起作用?

awaitMessages 是 Discord.js 中的一个功能,它允许你在指定的时间内等待用户的消息,并对这些消息进行响应。然而,这个功能在 "ready" 事件中不起作用的原因是因为 "ready" 事件是在 bot 加载并准备好与 Discord 服务器交互时触发的,而不是在用户发送消息时触发。

awaitMessages 需要在用户交互的上下文中使用,例如在监听 "message" 事件或在命令处理函数中。这是因为 awaitMessages 需要一个消息收集器(MessageCollector)来监听和收集用户的输入。

如果你想在 bot 准备好后立即等待用户的消息,你应该在 "ready" 事件处理器中设置一个监听器来等待 "message" 事件,然后在 "message" 事件处理器中使用 awaitMessages

以下是一个简单的示例代码,展示了如何在 "ready" 事件后等待用户的消息:

代码语言:txt
复制
const { Client, Intents } = require('discord.js');
const client = new Client({ intents: [Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_MESSAGES] });

client.once('ready', () => {
    console.log(`Logged in as ${client.user.tag}!`);
    // 设置一个监听器来等待用户的消息
    client.on('messageCreate', async message => {
        if (message.author.bot) return; // 忽略其他 bot 的消息

        // 创建一个消息收集器
        const collector = message.channel.createMessageCollector({ time: 15000 });

        // 等待用户的消息
        collector.on('collect', collectedMessage => {
            console.log(`Collected ${collectedMessage.content}`);
            // 在这里处理用户的消息
        });

        // 当收集时间结束时
        collector.on('end', collected => {
            console.log(`Collected ${collected.size} items`);
            // 在这里处理收集结束后的逻辑
        });
    });
});

client.login('your-token-goes-here');

在这个示例中,当 bot 准备好后,它会监听 "messageCreate" 事件,并在收到用户的消息时创建一个消息收集器。这个收集器会等待用户在 15 秒内发送的消息,并对这些消息进行处理。

如果你在使用 awaitMessages 时遇到问题,可能是因为以下原因:

  1. 你没有正确地设置消息收集器的时间限制或过滤器。
  2. 你的 bot 没有正确的权限来读取消息或发送消息。
  3. 你的 bot 没有启用必要的 intents(如 GUILD_MESSAGES)。

确保你的 bot 有正确的权限,并且你已经启用了必要的 intents,这样 awaitMessages 才能正常工作。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Flink中的事件时间和处理时间有什么区别?为什么事件时间在流计算中很重要?

Flink中的事件时间和处理时间有什么区别?为什么事件时间在流计算中很重要?...在Flink中,可以通过指定时间戳和水位线来处理事件时间。时间戳用于为每个事件分配一个时间戳,而水位线用于表示事件时间的进展。Flink使用水位线来处理延迟数据和乱序数据,以确保结果的准确性。...在Flink中,默认使用处理时间进行处理,即使用数据到达流处理引擎的时间作为事件的时间戳。...在一些应用场景中,数据的时间戳非常重要,例如金融交易、日志分析等。使用事件时间可以确保结果的准确性,避免数据乱序和延迟带来的问题。...在UserVisitEventTimestampExtractor中,设置了最大延迟时间为10秒,并从事件中提取时间戳。接下来,使用事件时间进行窗口操作,计算每分钟的访问量。最后,将结果输出。

12610
  • 也谈 setTimeout

    这些问题概括来讲是这样:动态往 dom 树中插入元素, 然后立刻、马上操作这个元素(比如选择文本框的文本,改变 select 的 index 等), 普通方式写代码通常不起作用,但是放入 setTimeout...setTimeout 进一步理解 可以更深入的思考: setTimeout( func, 0 ) 是延迟 0ms 执行,也就是立刻执行,但为什么还是在重绘之后呢? 重绘肯定会超过 0ms 啊!...接下来就好理解了—— 开始,在第一个 js 块中,两个延迟 10ms 的 timer 被初始化,注意这个 10ms ,不保证 10ms 后一定执行,两个 timer 必然会是在第一个 js block...另外,在第一个 js 块中,鼠标点击了,但是事件处理函数不会立刻执行,和 timer 一样,也要等到一个 js block 执行完后才执行。 终于,第一个 js 块执行完。...事件处理函数和 timer 都在等待,于是事件处理函数执行, timer 继续等待。 在事件处理函数执行过程中,10ms 的 interval 触发了,毫无疑问不会立刻执行,进入队列等待。

    1.3K10

    也谈 setTimeout

    这些问题概括来讲是这样:动态往 dom 树中插入元素, 然后立刻、马上操作这个元素(比如选择文本框的文本,改变 select 的 index 等), 普通方式写代码通常不起作用,但是放入 setTimeout...setTimeout 进一步理解 可以更深入的思考: setTimeout( func, 0 ) 是延迟 0ms 执行,也就是立刻执行,但为什么还是在重绘之后呢? 重绘肯定会超过 0ms 啊!...接下来就好理解了—— 开始,在第一个 js 块中,两个延迟 10ms 的 timer 被初始化,注意这个 10ms ,不保证 10ms 后一定执行,两个 timer 必然会是在第一个 js block...另外,在第一个 js 块中,鼠标点击了,但是事件处理函数不会立刻执行,和 timer 一样,也要等到一个 js block 执行完后才执行。 终于,第一个 js 块执行完。...事件处理函数和 timer 都在等待,于是事件处理函数执行, timer 继续等待。 在事件处理函数执行过程中,10ms 的 interval 触发了,毫无疑问不会立刻执行,进入队列等待。

    1.5K100

    可以但没必要?分享 20 个 JavaScript 库,打开视野👀

    Redux.js Redux 并非 React 人专用,它借用函数式编程思想,旨在提供可预测的状态管理; 具体的,在 Redux 中的 state 没有 setter 方法,取而代之的是:state 经过一个接一个的...reducer 函数计算后得值,state 只读,不可修改; 这正是 FP 中 把原始不可变的数据放入不同函数组合成的管道进行计算 的思想!...;不过在移动端,则需 clip: rect(0 auto auto 0) 额外处理; 10....Hammer.JS Hammer 是一个开源库,可以识别由触摸、鼠标和指针事件做出的手势。它没有任何依赖关系,而且很小,只有 7.34 kB!...Discord.js discord.js 是一个强大的 Node.js 模块,可让您轻松与 Discord API 交互; Discord 是一款专为社群设计的免费网路即时通话软体与数位发行平台,拥有

    2.3K20

    window的onload事件和domcontentloaded执行顺序

    可以在jQuery中使用查看此事件$( window ).on( "load", handler )。如果代码依赖于加载的资源(例如,如果需要图像的尺寸),则应将代码放在load事件的处理程序中。...注意,尽管DOM总是在页面完全加载之前就绪,但是在 .ready()处理程序期间执行的代码中附加加载事件侦听器通常不安全。...尽管由 .ready() 添加的处理程序总是在动态加载的脚本中执行,但是窗口的加载事件已经发生,并且这些侦听器永远不会运行。...在jq官方文档中也说明了: $( handler ) $( document ).ready( handler ) $( "document" ).ready( handler ) $().ready(...所以jq的ready事件执行结束时间和DOMContentLoaded结束时间并不是完全相同的,所以在使用过程中应当进行一些注意。

    3.7K10

    JQuery 对控件的事件操作

    .click(function() { alert("I'm Test Button"); }); 就这样我们在testButton这个按钮上绑定了onclick事件,执行alert语句。...为什么有这个取消特定函数的方法呢,我们来看下例子,我们会发现,javascript的事件,跟C#的事件如出一辙,事件的绑定是叠加(+=) 而不是覆盖。...我们修改下ready的方法: jQuery(document).ready(function() { $("#testButton").click(Eat)...我这里取消了绑定,又删除了特定的绑定,为什么还会执行Eat呢? 其中的原由要看jQuery的类库了,我估计它只删除了通过JQuery绑定的那些事件了,呵呵。 那这时候我们该如何呢?...其实jQuery在绑定事件上还存在很多bug,大家可以稍微修改下上面的效果就会知道了,比如自动执行,绑定失败等,呵呵。 http:/inday.cnblogs.com

    1.8K60

    MQ消费失败怎么办

    滴滴滴,就在本周遇见一个kafka下游消费失败,但是下游持久化失败,兜底任务不起作用。笔者对RabbitMQ了解和实战比较多。...3.程序断开于rabbitmq的链接后,unacked的消息状态会重新变为ready 等待消费。重新发版,server应用连接rabbitmq 就会重新消费掉消息。...4.为什么会出现unack 消息, 还是手动模式代码没有处理好。 如果针对kafka怎么去做处理呢?...反观 Kafka,由于它是基于日志结构(log-based)的消息引擎,消费者在消费消息时,仅仅是从磁盘文件上读取数据而已,是只读的操作,因此消费者不会删除消息数据。...如果在你的场景中,消息处理逻辑非常复杂,处理代价很高,同时你又不关心消息之间的顺序,那么传统的消息中间件是比较合适的;反之,如果你的场景需要较高的吞吐量,但每条消息的处理时间很短,同时你又很在意消息的顺序

    1.4K10

    Java NIO 系列学习 07 - Selector

    为什么使用 Selector 只使用一个线程去处理多个channel, 相较于使用多个线程来处理是有优势的。事实上,我们可以只使用一个线程去处理所有的channels。...在操作系统中,切换线程的开销是昂贵的,且每一个线程都会占用操作系统的资源(内存等)。因此使用更少的线程性能也就更好。...需要注意下register()方法的第二个参数,需要声明这个channel的事件,总共有四个不同的事件可供选择: 1....每一个事件都相当于是ready状态, 一些解释如下: 1. 当channel准备好读数据时,状态是read ready 2. 当channel准备好写数据时,状态是write ready 3....如果在两次调用之间没有对ready的channel执行任何操作,现在就有两个channel是ready的,但是只有一个channel变为ready在两次调用select()之间。

    64420

    【Java SE】Java NIO系列教程(六) Selector

    Selector(选择器)是Java NIO中能够检测一到多个NIO通道,并能够知晓通道是否为诸如读写事件做好准备的组件。这样,一个单独的线程可以管理多个channel,从而管理多个网络连接。...下面是本文所涉及到的主题列表: 为什么使用Selector?...这是一个“interest集合”,意思是在通过Selector监听Channel时对什么事件感兴趣。...ready集合 ready 集合是通道已经准备就绪的操作的集合。在一次选择(Selection)之后,你会首先访问这个ready set。Selection将在下一小节进行解释。...可以这样访问ready集合: 1 int readySet = selectionKey.readyOps(); 可以用像检测interest集合那样的方法,来检测channel中什么事件或操作已经就绪

    64650

    从@PostConstruct重新认识初始化

    方法中实现,@PostConstruct在initializeBean方法中实现。...前边preInstantiateSingletons方法执行逻辑是拿到BeanDefination列表后循环执行的,在我们代码中定义用@Service、@Component和@Repository定义的类在启动阶段定义成...也就验证了为什么@Autowired注入失败@PostConstruct还会继续执行的问题。 2.既然@PostConstruct执行了,为什么会报错?...3.为什么进程在,端口监听失败? 其实这个问题可以拆解一些,springboot启动卡住了没有启动成功也没有关机。 没有启动成功的原因是容器上下文刷新失败,正常情况下不会去监听端口,也不会启动成功。...", (listener) -> listener.ready(context, timeTaken)); } 接着调用EventPublishingRunListener的ready方法发送事件通知:

    47840
    领券