Как заставить бота упоминать новых пользователей в приветственном сообщении, хранящемся в MongoDB, а также читать escape-последовательности?

#node.js #mongodb #discord.js

Вопрос:

Я хочу, чтобы мой бот упомянул нового пользователя в приветственном сообщении, если модераторы настроят его на это. Однако я не знаю, как заставить моего бота прочитать ${member} приветственное сообщение и знать, что в нем должен быть упомянут пользователь.

Ниже показано, что происходит, когда член присоединяется к моей гильдии.

 client.on('guildMemberAdd', async (member) => {
  if (member.bot) {
    return
  } else {

  const welcome = require('./models/welcomeSchema');

  const welcomeSchema = await welcome.findOne({
    GuildID: member.guild.id
  })

  if (welcomeSchema) {
    const mssg = welcomeSchema.Message;
    const chan = welcomeSchema.ChannelID;
  member.guild.channels.resolve(chan).send(mssg);
  } else if (!welcomeSchema) return
}
});
 

Это моя схема для Монго.

 const mongoose = require ('mongoose');

const welcomeSchema = new mongoose.Schema({
ChannelID: {
    type: String,
    required: true
},
Message: {
    type: String,
    required: true
},
GuildID: {
    type: String,
    required: true
}
});

module.exports = mongoose.model(`welcomes`, welcomeSchema);
 

И это команда, которая используется для установки приветственного сообщения.

 const welcomeSchema = require('../models/welcomeSchema');

module.exports.run = async (bot, message, args) => {

const mssg = args.slice(2).join(" ")

if (!message.member.hasPermission("ADMINISTRATOR")) {
return message.reply("you lack sufficiant permissions to execute this command.");
}

if (!mssg) {
return message.reply("please state what message you want to welcome new members with.");
} else if (!args[1]) {
return message.reply("please state the channel ID of which you want this message to be sent in.");
}

const data = await welcomeSchema.findOne({
GuildID: message.guild.id
});

if (!data) {

message.channel.send("Welcome message set.");

const newData = new welcomeSchema({
    GuildID: message.guild.id,
    Message: mssg,
    ChannelID: args[1]
})
newData.save();
} else if (data) {

await welcomeSchema.findOneAndRemove({
    GuildID: message.guild.id
})

message.channel.send("Welcome message set.");

const newData = new welcomeSchema({
    GuildID: message.guild.id,
    Message: mssg,
    ChannelID: args[1]
})
newData.save();
}
}

module.exports.config = {
name: "setWelcome",
aliases: []
}
 

Должен ли я заставить своего бота взять данные из базы данных и перевести их на Javascript, а затем отправить сообщение? Если да, то как мне это сделать?

Пожалуйста, дайте мне знать, если мне понадобится предоставить более подробную информацию. Я точно не знаю, как это четко сформулировать.

Ответ №1:

Заменить member.guild.channels.resolve(chan).send(mssg); на client.channels.channels.cache.get(chan).send(mssg);