如何在不和谐机器人中显示用户自己对他人推文的转发?

Posted

技术标签:

【中文标题】如何在不和谐机器人中显示用户自己对他人推文的转发?【英文标题】:How to show user's own retweet of other people's tweet in discord bot? 【发布时间】:2021-02-01 06:07:11 【问题描述】:

我正在尝试向我的不和谐机器人添加转发功能,以便它可以显示用户转发的帖子。我试图做这样的事情,但是当我运行我的代码时,它仍然只发布新的推文。谁能帮忙解决问题?

让我尝试简化场景,因为我认为可能很难说出我真正想要实现的目标。

想象一下,如果我是一个名为@hojitea 的推特用户(只是一个例子)。我在 Twitter 上关注了一个名为 @readDonaldTrump 的用户。 我希望我的不和谐机器人做的不仅是获取@realDonaldTrump 发布的新推文,还获取他所做的转发。 喜欢这张图片(我想在我的不和谐机器人中转发这条推文): 请注意,在图像中,它表示“Donald J. Trump Retweeted”,这是我希望我的不和谐机器人也显示的内容,而不是任何其他用户。根据我当前的代码,这是无法实现的。

现在,这就是它的样子(整个源代码的sn-p):

// setting up necessary libraries
require('dotenv').config();
const Discord = require('discord.js');
const bot = new Discord.Client();
bot.commands = new Discord.Collection();
const botCommands = require('./commands');
const Twitter = require('twit')

//Set up discord and twitter token blah blah blah...

const twitterClient = new Twitter(twitterConf);

// create a stream to follow tweets
const stream = twitterClient.stream('statuses/filter', 
    follow: '25073877', //donaldtrump twt id
);

const dest = '765217504305872896' //streaming twts to #twitter channel

// TWITTER MAIN PROCESS
// stream directly to that channel
stream.on('tweet', tweet => 
    if (tweet.retweeted_status  //to prevent other user tweets and only get specifically from the user
        || tweet.in_reply_to_status_id_str 
        || tweet.in_reply_to_user_id
        || tweet.in_reply_to_user_id_str
        || tweet.in_reply_to_screen_name) return true;
      
    if (tweet.current_user_retweet)  //to show the retweeted message by the user
        const twitterRetweetMessage = `**$tweet.user.name (@$tweet.user.screen_name) new retweet!**\n https://twitter.com/$tweet.user.screen_name/status/$tweet.id_str`
        bot.channels.cache.get(dest).send(twitterRetweetMessage);
        console.log(`A new retweet has been posted by @$tweet.user.screen_name!`)
        return false;
    
    const twitterMessage = `**$tweet.user.name (@$tweet.user.screen_name) new tweet!**\n https://twitter.com/$tweet.user.screen_name/status/$tweet.id_str`
    bot.channels.cache.get(dest).send(twitterMessage);
    console.log(`A new tweet has been posted by @$tweet.user.screen_name!`)
    return false;
);

// acknowledge bot has connected
bot.on('ready', () => 
    console.log(`Logged in as $bot.user.tag!`);
);

免责声明:我绝对不是美国公民。使用的用户名仅作为示例,而不是美国选举宣传。

【问题讨论】:

【参考方案1】:

根据Twitter documentation(此链接适用于GET statuses/show/:id,但所有推文对象都遵循相同的格式),current_user_retweet 仅在身份验证用户 (@hojitea) 转发推文时提供。由于 Tweet 对象是在发布推文后直接提供的,因此验证用户几乎不可能已经转发了推文。

如果要解析转推,则必须从 if 大语句中删除 tweet.retweeted_status。这还将显示该人推文的所有转推,因此要过滤掉其他用户的推文,只需检查您订阅的用户的 ID 是否等于推文对象中用户的 ID (tweet.user.id) .你会想在处理任何推文之前把它放在前面,所以你应该把它放在前面提到的if 声明之前。

要检查推文是否为转推,请使用tweet.retweeted_status 作为 if 语句。该值始终为转推提供,但对于非转推始终为空。

// ...
if (tweet.retweeted_status)  // true if the tweet was a retweet.
    const twitterRetweetMessage = `**$tweet.user.name ...`
// ...

P.S.:如果我有点挑剔,消息应该是`A new Tweet has been retweeted by @$tweet.user.screen_name!`,因为转发用户在技术上没有发布推文。

【讨论】:

那么它看起来会像this吗?你介意帮我查一下吗?

以上是关于如何在不和谐机器人中显示用户自己对他人推文的转发?的主要内容,如果未能解决你的问题,请参考以下文章

Python 脚本,用于转发特定推文的 twitter 机器人

检查用户是不是在不和谐的 vc 中进行流式传输

从特定用户那里获取对特定推文的推文回复

如何确定推文的位置(坐标)

如何使用 node.js 请求主题标签顶部推文的 url? [关闭]

如何在不和谐中制作乒乓球机器人