У меня есть такие команды как /question; /suggestion; /bug; Все эти команды отправляют сообщения в такие же каналы, как и их название. Думаю это мы прояснили. Сами команды работают прекрасно, но у меня также существует команда /edit, как вы поняли она изменяет сообщение.
Разберём команды /question и /edit,
все команды кроме /edit создают себе ID, а я по этому айди их записываю обратно в локальный файл.
Синтаксис:
/question -q Текст
/edit ID -q Текст
Теперь сам код:
if(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.get(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 == "question") {
const Color = Msg.color;
const questions = message.content.split("-q");
var questionembed = new Discord.MessageEmbed()
.setTitle("Вопрос")
.setAuthor(Author, MyAvatar)
.setColor(`${Color}`)
.setFooter(`#${RID}`)
.addFields(
{name: "\u200B", value: `${questions[1]}`}
)
db.set(`${RID}`, {realid: `${Msg.realid}`, type: "question", channelid: `${Msg.channelid}`, color: `${Color}`, text: `${questions[1]}`,
userpostid: `${Msg.userpostid}`, author: `${Msg.author}`, authoravatar: `${Msg.authoravatar}`});
somemessage.edit(questionembed);
message.channel.send("Изменения успешны!").then(msg => {
msg.delete({timeout: 10000})
});
}
EditMessage();
}
}
Теперь, разберём некоторые моменты:
deleteLastM() - сразу после того как команда была замечена, я удаляю сообщение автора;
MTid - после первого пробела, по синтаксису, должен идти ID сообщения;
db.get(MTid) - достаю из локального файла сообщение по айди, перед этим проверив могу ли я его достать.
RID - превращаю MTid в число, ибо оно сохранено в локальном файле как string
Также, если вас интересует вот код самой команды:
if (server = '686225794766209088' && message.content.startsWith("/question"))
{
var GetLastMID = GetNewID();
const Color = RColor();
const text = message.content.split("-q");
deleteLastM();
var embed = new Discord.MessageEmbed()
.setTitle("Вопрос")
.setAuthor(Author, MyAvatar)
.setColor(`${Color}`)
.setFooter(`#${GetLastMID}`)
.addFields(
{name: "\u200B", value: `${text[1]}`}
)
message.channel.send(embed).then(msg => {
msg.delete({timeout: 60000})
}
);
client.channels.cache.find(e=>e.name == "questions")
.send(embed).then( question =>
db.set(`${GetLastMID}`, {realid: `${question.id}`, type: "question", channelid:`${message.channel.id}`, color: `${Color}`, text: `${text[1]}`,
userpostid: `${user_id}`, author: `${Author}`, authoravatar: `${MyAvatar}`})
);
Кратко говоря, здесь я сохраняю написанное, отправляю embed в этот же канал, после чего удаляю через минуту, а также отправляю это же сообщение в канал с названием "bugs".
Главный вопрос:
Где ошибка? Почему код не работает?
Если вас интересует ошибка, то консоль пишет DiscordAPI: Unknown Message
А сам код останавливается на этом моменте:
let somemessage = await somechannel.messages.fetch(Msg.realid);
Можете указать на мою ошибку?