You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在discord.js中手动触发presenceUpdate事件?

手动触发discord.js的presenceUpdate事件

当然可以手动触发presenceUpdate事件,核心就是用Client实例的emit()方法,关键是要传对事件要求的参数——旧的Presence实例和新的Presence实例。

具体操作步骤

  1. 明确事件参数要求:presenceUpdate事件的回调会接收两个参数,第一个是用户变更前的Presence对象,第二个是变更后的Presence对象。手动触发时必须按这个顺序传入。
  2. 获取或构造两个Presence实例:
    • 如果是基于真实用户的状态变更,可以直接获取用户当前的presence作为旧实例。
    • 新实例可以通过Presence类构造,需要传入关联的用户对象,以及包含状态、活动的配置对象。
  3. 调用emit()触发事件。

代码示例

// 假设你已经有初始化好的Client实例client,以及目标用户对象user
const oldPresence = user.presence;

// 构造新的Presence实例,模拟用户状态变为"请勿打扰",并开始"测试手动触发"的活动
const newPresence = new client.constructor.Presence(user, {
  status: 'dnd',
  activities: [{ name: '测试手动触发', type: 'PLAYING' }]
});

// 手动触发presenceUpdate事件
client.emit('presenceUpdate', oldPresence, newPresence);

注意事项

  • 必须确保传入的两个参数都是有效的Presence实例,否则监听该事件的回调可能会抛出错误。
  • 手动触发的事件和Discord官方推送的真实事件行为完全一致,所有监听presenceUpdate的回调函数都会被执行。
  • 如果只是做测试,也可以直接构造两个模拟的Presence实例,但要保证参数格式符合Discord.js的要求。

内容的提问来源于stack exchange,提问作者xHaruke

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 03:33:28