Доброго времени суток, я уже как 2 день мучаюсь с кодом, и я решил обратится сюда за помощью.
Давайте немножко о боте, в нем есть уже 100% рабочие команды /bug и /edit, первая создаёт сообщение и отправляет в канал, куда другим доступ запрещён, но если кто-то сделал ошибки, нужно же как-то исправить? Для этого есть команда /edit, суть вы поняли. Хочу сказать что для работы команды /edit я сохраняю данные в локальный файл.
Я начал работать над командой /repeatto, её суть: отправить копию сообщения в другой канал. Тут и начинается интересный момент, вот вам код команды /repeatto для примерного понимания того что я делаю:
if(message.content.startsWith("/repeatto")) {
deleteLastM();
if (!message.mentions.channels.first()) return message.author.send("Укажите один канал");
if (message.mentions.channels.size == 1){
if (!message.member.hasPermission("MANAGE_MESSAGES")) return message.author.send("У вас недостаточно прав"), deleteLastM();
const textrepeat = TRepeat();
const repeatname = TRepeatName();
var ID = GetNewID();
const Mchannel = message.mentions.channels.first().id;
var embed = new Discord.MessageEmbed()
.setColor('#000000')
.setFooter(`#${ID}`)
.setTitle(`${repeatname}`)
.addField("\u200B", `${textrepeat}`)
client.channels.cache.get(Mchannel)
.send(embed).then( repeat =>
db.set(`${ID}`, {realid: `${repeat.id}`, type: "repeated", channelid:`${Mchannel}`, rname:`${repeatname}`, rtext: `${textrepeat}`})
);
}
}
Так выглядит мой код, достаточно просто, но все же объясню: В команде первым делом идёт проверка на упомянутые каналы, если таких нет выдаётся ошибка, если есть упомянутый канал, я получаю его ID и сохраняю вместе с сообщением, после чего отправка.
Наконец наступила очередь самой ошибки. Конечно же я сделал так чтоб текст можно было изменять, тут где-то и заключается моя ошибка:
if(server = '686225794766209088' && message.content.startsWith("/edit")) {
deleteLastM();
var tokens = message.content.split(" ");
const MTid = tokens[1];
if (MTid == null || MTid == undefined) return message.author.send("Будте добры указать ID сообщения, которого вы пытаетесь изменить.");
else if (db.has(MTid)) {
const Msg = db.get(MTid);
const RID = parseInt(MTid, 10);
async function EditMessage() {
let someserver = client.guilds.cache.get('686225794766209088');
let somechannel = someserver.channels.cache.get(Msg.channelid);
let somemessage = await somechannel.messages.fetch(Msg.realid);
if (Msg.type == "repeated"){
const ETrepeatname = Msg.rname
const ETrepeat = Msg.rtext
Erepeatname = function() {
if (message.content.includes("-n")) return TRepeatName()
else return ETrepeatname
}
Erepeattext = function() {
if (message.content.includes("-r")) return TRepeat()
else return ETrepeat
}
const dbErepeatname = Erepeatname();
const dbErepeat = Erepeattext();
var repeatedembed = new Discord.MessageEmbed()
.setColor('#000000')
.setFooter(`#${RID}`)
.setTitle(`${dbErepeatname}`)
.addField("\u200B", `${dbErepeat}`)
db.set(`${RID}`, {realid: `${Msg.realid}`, type: "repeated", channelid:`${Msg.chennelid}`, rname: `${dbErepeatname}`, rtext: `${dbErepeat}`});
somemessage.edit(repeatedembed);
message.channel.send("Изменения успешны!").then(msg => {
msg.delete({timeout: 10000})
});
}
}
EditMessage();
}
}
Давайте немножко расскажу в чем ошибка. Прописывая команду /repeatto в первый раз все происходит как надо, если я что то хочу изменить, я пишу команду /edit , все тоже проходит гладко, но как только я повторяю команду /edit, здесь есть два варианта событий:
Выходит ошибка здесь:
let someserver = client.guilds.cache.get('686225794766209088');
let somechannel = someserver.channels.cache.get(Msg.channelid);
let somemessage = await somechannel.messages.fetch(Msg.realid);
// < TypeError: Cannot read property 'messages' of undefined
А так же есть исход где упоминается Discord API error.
Можете указать на мои ошибки в коде?