有可能制作一个 reddit postlogger 机器人吗?

时间:2021-01-04 15:13:41

标签: discord discord.js reddit

好的,所以我正在使用 discord.js,并希望创建一个机器人,它在发布帖子时将帖子记录到 subreddit 以及所有这些,可能有 30 秒 - 1 米的延迟,具体取决于 API 的速度去。当前的日志系统每 15 分钟发送一次新帖子 iirc,那么是否可以像在 subreddit 上发布帖子一样,通过机器人将其发送到 Discord 服务器上的选择频道?

1 个答案:

答案 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