Удаление сообщений со временем

#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");