首页 > 解决方案 > 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`);
    };
});

标签: javascriptnode.jsdiscorddiscord.js

解决方案


下面代码中的基本思想是,它将首先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');
    }
});

推荐阅读