discord.js - 使用 presentUpdate 侦听器选择退出 Discord.JS 机器人的问候的命令
问题描述
我有一个 Discord.js 机器人,它被编程为在用户状态变为在线时发送问候消息。一些用户不喜欢这个功能,我没有删除这个功能,而是发出一个命令来选择退出它。
client.on('presenceUpdate', (oldPresence, newPresence) => {
let member = newPresence.member;
Object.assign(member, {"ignoreStatuses": false})
console.log(member)
let guild = newPresence.guild;
const newGame = newPresence.member.presence.activities.find(activity => activity.type)
console.log(newGame)
let channelId = "884295684814151680"
let greetChannel = client.channels.cache.get(channelId)
});
client.on('message', async message => {
if (message.content.startsWith(`!greetings`)) {
var args = message.content.split(' ').slice(1).join(' ');
if (args === "on") {
member.ignoreStatuses = false
};
if (args === "off") {
member.ignoreStatuses = true
};
}
});
问题是,每当用户执行 !greetings on/off 时,程序member
都会抛出一个错误,说未定义。不过,成员是在 presentUpdate 侦听器中定义的。我确信问题在于它们是两个不同的侦听器,并且对象在它们之间并没有完全转移。有谁知道对此有任何聪明的解决方案?
解决方案
是的!您对问题的见解是绝对正确的,变量成员不可访问,因为它是您的presenceUpdate
侦听器的参数,而您尝试在事件侦听器中使用它,您可以通过在其中任何一个message
之外定义它来简单地克服这个问题和每次使用它时重新分配它的值,如下所示:
let member;
client.on('presenceUpdate', (oldPresence, newPresence) => {
member = newPresence.member;
if(member.ignoreStatuses) {
let guild = newPresence.guild;
const newGame = newPresence.member.presence.activities.find(activity => activity.type)
console.log(newGame)
let channelId = "884295684814151680"
let greetChannel = client.channels.cache.get(channelId)
}
});
client.on('message', async message => {
if (message.content.startsWith(`!greetings`)) {
var args = message.content.split(' ').slice(1).join(' ');
if (args === "on") {
member.ignoreStatuses = false
};
if (args === "off") {
member.ignoreStatuses = true
};
}
});
推荐阅读
- typescript - 在 VS Code 中对 AWS SAM 无服务器应用程序进行 TypeScript 调试
- docker - Traefik 将 SSL 转发到 php-nginx docker 映像(到 Laravel 的 https 流量)
- python - 基于多个用户输入值过滤 Pandas 数据帧
- html - div后动态添加div
- sql - 在表中的每条记录中创建数据验证的最简单方法是什么?
- python - 运行 TensorFlow 操作时的内存使用情况
- vba - 抓取元数据属性
- css - 如何在 VS Code 中折叠或折叠多个 CSS 规则?
- javascript - 如果数组包含具有给定条件的对象,则通过检查其对象数组来查找对象数组中的对象
- r - R: adaboost (JOUSBoost package) giving 'Not compatible with requested type'