如何让我的机器人在特定频道中发送消息,然后在一段时间后将其删除

Posted

技术标签:

【中文标题】如何让我的机器人在特定频道中发送消息,然后在一段时间后将其删除【英文标题】:How do I make my bot send a message in a specific channel then delete it after a period of time 【发布时间】:2020-03-14 17:46:24 【问题描述】:

我正在重新开始使用 javascript 和编码之类的东西,因为我有一个充满激情的项目,我想在我玩的游戏中为一个公会工作。所以我想弄清楚如何让我的机器人在每天的特定时间发送一条消息,然后在 5 小时后将其删除。我尝试了多种方法,其中两种方法不能很好地协同工作,或者不能完全正常工作。

【问题讨论】:

Send message and shortly delete it的可能重复 标记为与***.com/questions/46907207/… 重复。该问题的答案是在超时后返回“then”承诺。 message.channel.send("Your message").then(m => m.delete(time in milliseconds)) 嗨,欢迎来到 SO。请在提问时确保提供您已经尝试过的任何解决方案。如需更多参考,请查看minimal reproducible example。 【参考方案1】:

设置时间间隔,在合适的时候发送消息

设置一个定时器来定期调用一个函数。我们还会设置一个变量来存储日期,这是为了避免在同一天发送第二条消息

var day = 0;
setInterval(tick, 30000);

function tick() ;

该函数将获取今天的日期(和时间)并比较它以查看它是否与所需时间匹配,如果匹配,它将发送消息并在 5 小时后将其删除。它还将日期存储到我们的day 变量中,以防止它在同一天再次发送它。

function tick() 
  let now = new Date();
  if (day === now.getDate()) return;

  if (now.toISOString().slice(11,16) === "14:30")  // 2:30PM UTC
    day = now.getDate();

    channel.send("This message will self-destruct in 5 hours.")
    .then(msg => msg.delete(1000*60*60*5));
    .catch(e => /* handle error */);
  

注意事项:

我使用now.toISOString().slice(11,16) 来获取时间,这相当于只使用now.getHours() + ":" + now.getMinutes()。 (取自this answer) 发送后使用Promises获取消息,并调用.delete(),告知删除前等待的毫秒数,如.delete(1000*60*60*5)。 (取自this answer) 如果您不想使用 UTC,您可能想要使用 moment-timezone 之类的东西,但您可能还想要使用 moment.js 对象而不是 vanilla JS 日期对象

【讨论】:

谢谢!我非常感谢您的帮助!也没有 UTC 能很好地工作,因为我使用它来运行 UTC 的游戏。 但我还有一个问题,我该如何输入 id 以使其在特定频道中运行? 我可以把channel.send改成client.channel.get("Channels id").send("我要发送的消息") 也许我只是忘记了一些我过去经常编码但每次我尝试插入该代码时得到的东西:[90m at Module._compile (internal/modules/cjs /loader.js:718:23)[39m [90m 在 Object.Module._extensions..js (internal/modules/cjs/loader.js:785:10)[39m [90m 在 Module.load (internal/modules/ cjs/loader.js:641:32)[39m [90m 在 Function.Module._load (internal/modules/cjs/loader.js:556:12)[39m [90m 在 Function.Module.runMain (internal/modules/ cjs/loader.js:837:10)[39m [90m at internal/main/run_main_module.js:17:11[39m

以上是关于如何让我的机器人在特定频道中发送消息,然后在一段时间后将其删除的主要内容,如果未能解决你的问题,请参考以下文章

如何向特定频道发送加入/离开消息

定时消息发送到特定频道

如何让我的机器人获取已经从频道中的用户发送的随机消息,并在触发自动响应时发送该随机消息

如何删除我的不和谐机器人在特定频道中发送的先前消息?

Discord.js 机器人无法向特定频道发送消息

有没有办法让我的机器人检查 DM 并将它们发布到我服务器的频道中?