我一直在开发一个基本的不和谐机器人,以便在有人 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`);
};
});
答案 0 :(得分:0)
下面代码的基本思想是,它首先从发送消息的 Guild 中的用户那里获取 GuildMember
对象。然后,它会检查消息是否有任何提及和位置messageRoles
中的所有角色 ID。它还将用户的所有成员角色放入另一个名为 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');
}
});