如何在不和谐机器人中显示用户自己对他人推文的转发?
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 机器人