#javascript #node.js #json #discord.js
#javascript #node.js #json #discord.js
Вопрос:
Поэтому я хочу, чтобы он удалял некоторые конкретные сообщения, если дата / Минуты равны 55, а месяц — этому месяцу! Хотя я получил некоторые ошибки Discord API, как указано ниже! Я пытался сделать задержку и убедиться, что сообщение об ошибке вообще существует, но не повезло, оно выдало мне ту же ошибку!
const ytdl = require('ytdl-core');
const editJsonFile = require("edit-json-file");
var fs = require('file-system');
var path = require('path');
const prefix = "v_";
let count;
exports.run = async (client, message, args, ops) => {
const channel = client.channels.cache.get("813794049445462036");
const channel2 = client.channels.cache.get("813801699469819984");
const channelog = client.channels.cache.get("814561365510586400");
const monthlog = client.channels.cache.get("814758448700719155");
let number = editJsonFile(`premium/premium.json`);
let endDate = editJsonFile(`premium/endate.json`);
let count = editJsonFile(`premium/count.json`);
let month = editJsonFile(`premium/month.json`);
month.save();
number.save();
endDate.save();
count.save();
count.set(`p`, 0);
count.set(`p1`, 0);
count.save();
let p = count.get(`p`);
let p1 = count.get(`p1`);
//Reset
setTimeout(async function() {
channel2.messages.fetch({ limit: 100 }).then(messages => {
messages.forEach(async message => {
p = count.get(`p`);
p1 = count.get(`p1`);
var today = new Date();
var date = today.getMinutes()
var montht = new Date();
var monthcheck = montht.getMonth();
if (date == 55) {
setTimeout(async function() {
monthlog.messages.fetch({ limit: 100 }).then(messages => {
messages.forEach(message3 => {
p = count.get(`p`);
p1 = count.get(`p1`);
console.log(monthcheck);
if (message3.content == 2) {
let number = editJsonFile(`premium/premium.json`);
number.save();
const userid2 = number.get(`${p1}`);
setTimeout(async function() {
if (message != undefined){
await message.delete({ timeout: 250 });
}
}, 0)
setTimeout(async function() {
if (message3 != undefined){
await message3.delete({ timeout: 500 });
}
}, 1000)
setTimeout(async function() {
channel.messages.fetch({ limit: 100 }).then(messages => {
messages.forEach(message2 => {
p = count.get(`p`);
p1 = count.get(`p1`);
console.log(userid2);
console.log(`${message2.content}`);
console.log(`${p1}`)
if(userid2 == message2.content) {
setTimeout(async function() {
await message2.delete({ timeout: 100 });
}, 0)
number = editJsonFile(`premium/premium.json`);
number.unset(`${p1}`)
number.save();
}
endDate.unset(`${p1}`);
endDate.save();
month.unset(`${p1}`);
month.save();
setTimeout(async function() {
channelog.send(`💿 <@${userid2}>'s premium has expired from partnering!'`)
}, 500)
message.delete();
})
})
}, 5000)
}
else {
p = count.get(`p`);
p1 = count.get(`p1`);
pf = count.get(`pf`);
pf1 = count.get(`pf1`);
if (p == p1) {
endDate.set(`${p1}`, message.content)
endDate.save();
month.set(`${p1}`, message3.content)
month.save();
}
else {
endDate.set(`${p1}`, message.content)
endDate.save();
month.set(`${p1}`, message3.content)
month.save();
count.set(`p1`, p1 1);
count.save();
}
}
})
})
}, 3000);
}
})
})
}, 5000)
setTimeout(function() {
channel.messages.fetch({ limit: 100 }).then(messages => {
messages.forEach(message => {
p = count.get(`p`);
p1 = count.get(`p1`);
number = editJsonFile(`premium/premium.json`);
number.set(`${p}`, message.content)
number.save();
count = editJsonFile(`premium/count.json`);
count.set(`p`, p 1);
count.save();
})
})
}, 1000)
count = editJsonFile(`premium/count.json`);
count.set(`p`, 0);
count.set(`p1`, 0);
count.save();
number.save();
}
Это ошибка, которую я получал в оба раза, когда тестировал свой код:
C:UserscedriDesktopvibe-mainnode_modulesdiscord.jssrcrestRequestHandler.js:154
throw new DiscordAPIError(request.path, data, request.method, res.status);
^
DiscordAPIError: Unknown Message
at RequestHandler.execute (C:UserscedriDesktopvibe-mainnode_modulesdiscord.jssrcrestRequestHandler.js:154:13)
at processTicksAndRejections (node:internal/process/task_queues:93:5)
at async RequestHandler.push (C:UserscedriDesktopvibe-mainnode_modulesdiscord.jssrcrestRequestHandler.js:39:14)
at async MessageManager.delete (C:UserscedriDesktopvibe-mainnode_modulesdiscord.jssrcmanagersMessageManager.js:126:5)
at async Timeout._onTimeout (C:UserscedriDesktopvibe-maineventspremium.js:60:23) {
method: 'delete',
path: '/channels/813801699469819984/messages/814796597518139413',
code: 10008,
httpStatus: 404
}
Ответ №1:
Unknown Message
чаще всего это происходит, когда вы пытаетесь удалить несуществующее сообщение.
Это происходит потому, что вы используете ненадежный синтаксис для поиска каналов. #get
был изменен в V12, я бы использовал #find
.
Чтобы бороться с этим, вы должны использовать
await message.guild.channels.fetch(); //fetches all channels
const channel = client.channels.cache.find(channel => channel.id === "<id here>");
Чтобы убедиться, что вы выполняете поиск по всем каналам, используйте await message.guild.channels.fetch()
Вот список изменений для версии 12
Комментарии:
1. Я пытаюсь заставить это работать, но он продолжает говорить, что guild не определен. Что бы я поставил, чтобы убедиться, что гильдия определена для определенного сервера?
2. Гильдия всегда должна быть определена, если вы правильно создали свои аргументы. Где в вашем обработчике вы определили аргументы своего сообщения?
3. что вы подразумеваете под аргументами сообщения?
4. Если вы правильно создали свой обработчик,
guild
, который является частьюmessage
объекта, будет определен. Причина, по которой он сказалguild
бы, не определена, заключается в том, что вы неправильно настроилиmessage
свой обработчик5. Я попытался выполнить следующее, но даже там все равно написано «Гильдия не определена»:
const guild = client.guilds.cache.get("809466736491233290");