如何在discord bot中显示用户自己对其他人推文的转发?

How to show user's own retweet of other people's tweet in discord bot?

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

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

现在,它是这样的(整个源代码的一个片段):

// 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}!`);
});

免责声明:我绝不是美国公民。使用的用户名纯粹是为了举例,而不是美国选举宣传。

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

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

要检查推文是否为转推,请改用 tweet.retweeted_status 作为您的 if 语句。始终为转推提供此值,但对于 non-retweets.

始终为 null
// ...
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}!`,因为转推用户在技术上没有 post 推文。