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