javascript - Discord bot 识别是否有人 ping 帐户并回复
问题描述
当有人 ping 我的帐户时,我一直在开发一个基本的不和谐机器人来回复。到目前为止,它仅适用于直接 ping,不适用于您 ping 我的角色。任何帮助,将不胜感激。
const Discord = require('discord.js');
const client = new Discord.Client();
client.on('ready', () => {
console.log(`Logged in as ${client.user.tag}!`);
});
const ownerId = "";
client.on("message", async message => {
if (message.author.bot) return false;
if (message.mentions.has(ownerId)) {
message.reply(`reply`);
};
});
解决方案
下面代码中的基本思想是,它将首先GuildMember
从公会中的用户那里获取发送消息的对象。然后,它将检查消息中是否有任何提及,并将所有角色 ID 放入messageRoles
. 它还将所有用户的成员角色放入另一个名为memberRoles
. 然后,它将两个数组与some
(非常方便的方法)进行比较,如果为真,那么它会回复。
代码:
const Discord = require('discord.js');
const client = new Discord.Client();
client.on('ready', () => {
console.log(`Logged in as ${client.user.tag}!`);
});
const ownerId = "";
client.on("message", async message => {
if (message.author.bot) return false;
if (message.mentions.has(ownerId)) {
message.reply(`reply`);
}
let user = client.users.cache.get(ownerId);
let currentGuild = message.guild;
let currentMember = currentGuild.members.cache.get(user.id);
let memberRoles = [];
currentMember.roles.cache.each(role => {
memberRoles.push(role.id);
});
let messageRoles = [];
console.log(message.mentions.roles);
message.mentions.roles.each(role => {
messageRoles.push(role.id);
})
let containsMention = messageRoles.some(x => memberRoles.includes(x));
if (containsMention) {
message.reply('reply');
}
});
推荐阅读
- notepad++ - 如何使用正则表达式替换字符串
- angular - 如何在单元格值更改时更改后续单元格的背景颜色?
- javascript - 使用 Vue 和 Ant Design Table 显示来自 Ajax 的数据
- python - 如何提出回溯问题的时间复杂度?
- php - 如何通过cron php在API中插入数据
- java - 如何获取特定数据并将其用作从 firebase 中另一个表中获取另一个数据的键
- python-3.x - 如何解决virtualenv中的“没有名为'cPickle'的模块”异常
- python - Python Plotting API:如何通过烧瓶 API 公开您的科学 Python 图?
- swift - 如何根据用户给出的数量使用循环显示AZ字符?
- javascript - 将 pug 编译的内容附加到 pug 模板