我正在尝试向我的不和谐机器人添加转推功能,以便它可以显示用户转推的帖子。我试图做这样的事情,但是当我运行代码时,它仍然只发布新的推文。谁能帮助解决问题?
让我尝试简化场景提示,我想说我实际上想要实现的目标可能有点困难。
现在,它是这样的(完整的源代码片段):
// 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}!`);
});
免责声明:无论如何,我不是美国公民。所使用的用户名仅是示例,而不是美国的选举宣传。
答案 0 :(得分:0)
根据Twitter documentation(此链接用于GET statuses/show/:id
,但所有Tweet对象仍然遵循相同的格式),只有在进行身份验证的用户({{1} })转推了该推文。由于Tweet对象是在发布Tweet之后直接提供的,因此验证用户几乎已经转发了Tweet几乎是不可能的。
如果要解析转发,则必须从大current_user_retweet
语句中删除@hojitea
。这还会显示该人的推文的所有转发,因此要过滤其他用户的推文,只需检查您订阅的用户的ID是否等于该推文对象中的用户ID({{1} })。您希望将其放在处理任何推文之前,因此将其放在上述tweet.retweeted_status
语句之前。
要检查Tweet是否为Retweet,请使用if
作为if语句。始终为转推提供此值,但对于非转推始终提供空值。
tweet.user.id
P.S .:如果我有点挑剔,那么该消息应该改为if
,因为转发用户在技术上没有发布该推文。