【问题标题】:would it be possible to make a reddit postlogger bot?有可能制作一个reddit postlogger bot吗?
【发布时间】:2021-04-10 09:16:13
【问题描述】:

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

【问题讨论】:

    标签: discord discord.js reddit


    【解决方案1】:

    我正在使用什么

    在我的示例中,我将是一个简单的 discord.js(v12) 机器人,并且我也在使用 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

    【讨论】:

    • 抱歉,我不太了解时间戳。我将如何获取和检查它?
    • 现在编辑 :) 它有什么帮助。
    • 好的,所以我收到以下错误?不知道具体在说什么,之前没用过axios
    • (node:24) UnhandledPromiseRejectionWarning: Error: Request failed with status code 403 at createError (/home/container/node_modules/axios/lib/core/createError.js:16:15) at settle (/home/container/node_modules/axios/lib/core/settle.js:17:12) at IncomingMessage.handleStreamEnd (/home/container/node_modules/axios/lib/adapters/http.js:260:11) at IncomingMessage.emit (events.js:326:22) at endReadableNT (_stream_readable.js:1223:12) at processTicksAndRejections (internal/process/task_queues.js:84:21)
    • 试试got,阅读:npmjs.com/package/got
    猜你喜欢
    • 2021-03-29
    • 2017-04-14
    • 1970-01-01
    • 2020-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多