在给定的不和谐频道中搜索满足条件的所有消息并删除 [英] Search a given discord channel for all messages that satisfies the condition and delete

查看:22
本文介绍了在给定的不和谐频道中搜索满足条件的所有消息并删除的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试编写一个代码,该代码将检查频道中的所有消息以查找包含某些单词的消息,如果确实包含这些单词,则将其删除.所以像:

I was trying to make a code that will check all messages in a channel for messages that contain certain words, and delete them if it does contain them. So something like:

if(msg.content.startsWith(prefix+'clean') {
  let check = msg.content.split(prefix+'clean')[1]; // Condition, in this case if it containts a certain string
  msg.channel.fetchMessages().then(msgs => { // Get messages to check
    let msglog = msgs.array() // Make an array with all the messages fetched
    for(var i = 0; i < msglog.size; i++) { // Loop to check all messages in array
      if (check in msglog[i]) {
        // Code to delete that message
      };
    };
  });
};

我知道这不会检查整个频道,它只会检查最后 50 条消息,但我不知道如何让它检查整个频道,所以在我找到方法之前会这样做.

I am aware that this will not check the entire channel and it will only check the last 50 messages, but I do not know how to make it check the whole channel so this will do until I find out how to do that.

但是什么代码会删除通过检查的消息?或者我可以用什么不同的方法来解决这个问题?

But what code would delete the message that passes the check? Or any different way I could approach this?

我好像还不够清楚,假设一个频道有以下对话:

It seems I was not clear enough, so let's say a channel has the following conversation:

A:伙计们!

B 人:嗨

C 人:再见

假设我想通过我的机器人删除所有带有Hi"的消息,我应该怎么做?注意:我不会在消息发送后立即删除它,我只想在我想删除它时删除它.

Let's say I want to delete all the messages with "Hi" in it through my bot, how should I do this? Note: I do not with to delete a message right after it has been sent, I only want to delete it when I want to do so.

推荐答案

bulkDelete 功能删除给定的新消息超过两周.

The bulkDelete function delete given messages that are newer than two weeks.

if(msg.content.startsWith(prefix+'clean') {
  let check = msg.content.split(prefix+'clean')[1]; // Condition, in this case if it containts a certain string
  msg.channel.fetchMessages().then(msgs => { // Get messages to check
    let msgDel = msgs.filter(msgss => msgss.content.includes(check)) // Finds all messages with 'check'
    msg.channel.bulkDelete(msgDel) // Deletes all messages that got found
  });
};

要删除超过 2 周的消息,您必须手动遍历消息以删除它们:

To delete the messages older than 2 weeks, you have to iterate through the messages manually to delete them:

async function deleteReturnLast(chan, option, prevMsg, cond) {
  return chan.fetchMessages(option)
    .then(async msgs => {
      if (msgs.size === 0){
    if (cond(prevMsg)) {
      prevMsg.delete()
        .then(d => console.log('last message deleted: ' + d.content))
        .catch(err => console.log('ERR>>', err, prevMsg.content, option.before));   }
    return prevMsg;
      };
      let last = msgs.last();
      for (const[id, msg] of msgs) {
    let tmp = (id === last.id) ? prevMsg : msg;
    if (cond(tmp)) {
      tmp.delete()
        .then(d => console.log('Message deleted: ' + d.content))
        .catch(err => console.log('ERR>>', err));
    }
      };
      return last;
    })
    .catch(err => console.log('ERR>>', err));
}

function cond(msg) {
  return !msg.content.includes('a');
}

client.on('message', async function(msg) {
  let chan = msg.channel;
  let last = chan.lastMessage;
  while (last !== (last = await deleteReturnLast(chan, {limit: 2, before: last.id}, last, cond))){
  };
});

这篇关于在给定的不和谐频道中搜索满足条件的所有消息并删除的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆