好的,所以我正在使用 discord.js,并希望创建一个机器人,它在发布帖子时将帖子记录到 subreddit 以及所有这些,可能有 30 秒 - 1 米的延迟,具体取决于 API 的速度去。当前的日志系统每 15 分钟发送一次新帖子 iirc,那么是否可以像在 subreddit 上发布帖子一样,通过机器人将其发送到 Discord 服务器上的选择频道?
答案 0 :(得分:0)
我在用什么
在我的例子中,我将是一个简单的 discord.js(v12) bot,我也使用 Axios(v0.21.1)。
起始代码
这是我开始这个项目的代码:
const { Client } = require('discord.js');
const bot = new Client();
const axios = require('axios').default;
et lastTimestamp = new Date() / 1000;
let latestPosts = [];
////////////////////////////////////////
// THE CODE FROM BELOW WILL BE HERE //
///////////////////////////////////////
bot.on('message', msg => {
if(msg.content === '!test') {
msg.channel.send(latestPosts.map(arr => arr.name).join('\n'));
}
});
bot.login('TOKEN');
您可以轻松获取数据,为此我将使用 Axios,代码如下:
const axios = require('axios').default;
axios.get('https://www.reddit.com/r/AskReddit/new.json?limit=25')
一旦 get 命令完成,我们就想做某事,这是一个承诺,所以我们可以使用 .then
.then(res => {
for (const post of res.data.data.children.reverse()) {
该代码看起来很复杂,但我会解释一下,基本上您正在为从 axios.get
获得的每个条目创建一个名为 post 的变量,将其反转的原因是您按顺序获取帖子他们被张贴在。
检查帖子是新的:
if(new Date(post.data.created_utc * 1000) > lastTimestamp)
现在,我们将在上述陈述成立后推送所有信息和时间。
latestPosts.push({ name: post.data.title, url: post.data.permalink});
lastTimestamp = new Date(post.data.created_utc * 1000);
如果上面的例子没有帮助,这里是完整的代码。
https://gist.github.com/LiamTownsley/3444e48e79a0bb14f3339941e8e5d839