【问题标题】:Trying to make a Discord bot write a msg when someone joins the server当有人加入服务器时,试图让 Discord 机器人写一条消息
【发布时间】:2020-10-09 19:46:25
【问题描述】:

标题几乎概括了它,但我会添加更多信息。我正在尝试制作一个在有人加入时发送消息的机器人。该消息将嵌入新帐户的一些信息。 msg 需要在 2 个不同的频道上写入,并且还需要向新用户发送 PM。

我试过这样做,但我不知道为什么它不发送消息:

module.exports = (client) => {

const Discord = require("discord.js")
const moment = require("moment");
require('moment-duration-format');
moment.locale('es');

client.on("guildMemberAdd", (member) => {

const embedGMA = new Discord.MessageEmbed()
.setTitle("???? **NEW MEMBER**")
.setDescription('▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬')
.setThumbnail(member.avatarURL())
.addField('USER:',member.tag, true)
.addField('MEMBER:', member.user, true)
.addField('ID:', member.id, true)
.addField('ACCOUNT CREATED:', member.createdAt.toDateString(), true)
.setColor("GREEN")
.addField('NOW WE ARE ' + member.guild.memberCount + ' MEMBERS.', true )
.setTimestamp()
.setFooter(server.name, server.iconURL()) 

member.send("HERE GOES THE PM")
let channel1 = client.channels.cache.get('CHANNEL ID');
let channel2 = client.channels.cache.get('CHANNEL ID');

channel1.send({ embed : embedGMA})
channel2.send({ embed : embedGMA})
});
}

【问题讨论】:

  • 你从哪里得到这个 sn-p / 你读了哪些文档来编写代码?
  • 您是否遇到任何错误?
  • @Spangle 我是在阅读了一些关于 discordjs v12 的指南后完成的
  • @Lioness100 不,机器人仍然可以正常工作,但它不发送消息
  • 请尝试使用client.channels.cache.get() 而不是client.channels.get("<Channel ID>")。消息是发送到用户的 DM 还是不起作用?

标签: javascript discord discord.js


【解决方案1】:

据我所知,您正在尝试在 Embed 中发送 Embed,因为您在此处声明了 Embed:“const embedGMA = new Discord.MessageEmbed()”,然后尝试在此处再次将其作为 Embed 发送:“ channel1.send({ embed : embedGMA})"。请参阅here 以供参考。 要修复它,试试这个

编辑:您需要将下面的代码放入您的 index.js 文件(或任何您命名的文件以启动机器人)

            const Discord = require("discord.js");
            /* We can ignore this for the most part as this has nothing to do with the code below
            const moment = require("moment");
            require('moment-duration-format');
            moment.locale('es'); */

            client.on("guildMemberAdd", (member) => {
                //here we declare a new Embed
                const embedGMA = new Discord.MessageEmbed()
                    .setTitle("? **NEW MEMBER**")
                    .setDescription('▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬')
                    .setThumbnail(member.user.displayAvatarURL()) //**
                    .addField('USER:', member.displayName, true) //**
                    .addField('MEMBER:', member.user, true)
                    .addField('ID:', member.id, true)
                    .addField('ACCOUNT CREATED:', member.createdAt.toDateString(), true) // This might give you trouble if you don't have this function defined somewhere
                    .setColor("GREEN")
                    .addField('NOW WE ARE ' + member.guild.memberCount + ' MEMBERS.', `\u200b`, true) //**
                    .setTimestamp()
                    .setFooter(server.name, server.iconURL()); // You need to define server somewhere

                member.send("HERE GOES THE PM")
                let channel1 = client.channels.cache.get('CHANNEL ID');
                let channel2 = client.channels.cache.get('CHANNEL ID');
                
                //here we just send the Embed
                channel1.send(embedGMA);
                channel2.send(embedGMA);
            });

ps。我还更正了您的一些嵌入设置,我用 //**

标记了它们

【讨论】:

  • 感谢您的更正。它仍然没有将嵌入发送到频道和 PM。它会受到在服务器中执行相同操作的其他机器人的影响吗? Bcs 执行相同 GuildMemberAdd 的其他机器人发送重复的消息。
  • 您确定没有收到任何类型的错误消息吗?在我的脑海中,还有一些可能会影响这一点的事情。您的机器人是否有权向频道发送消息?当新成员加入服务器时,该函数是否实际调用?您可以检查的最后一件事是您的机器人是否有一些错误安装。创建一个新项目并尝试在那里运行您的代码。关于影响你的其他机器人,我怀疑这个问题是由这个引起的,但是我不能肯定地说,不知道究竟是什么导致了消息的重复。
  • 不,该机器人在所有其他命令上都可以正常工作,当有人离开服务器时,它也会正确显示另一个嵌入该人信息的内容。该机器人有权访问所有其他频道。我会尝试将机器人加入没有任何机器人的新服务器,看看它是否有效。
  • 让我知道这是怎么回事。您是否检查过有人加入服务器时是否实际调用了该函数?我可以确认client.on('guildMemberAdd', 部分有效。这明确地将嵌入发送到指定的频道,所以我现在唯一能想到的是当有人加入时不会调用该函数。
  • 好吧,这可能是问题所在,bcs idk 如何调用函数:/
猜你喜欢
  • 2020-12-30
  • 2018-07-27
  • 2020-01-22
  • 2020-10-16
  • 1970-01-01
  • 2019-09-16
  • 2020-12-24
  • 2020-08-24
  • 2020-07-04
相关资源
最近更新 更多