如何在discord bot中显示用户自己对其他人推文的转发?
How to show user's own retweet of other people's tweet in discord bot?
我正在尝试向我的 discord 机器人添加转推功能,以便它可以显示用户已转推 post。我曾尝试做这样的事情,但是当我 运行 我的代码时它仍然只有 post 新推文。谁能帮忙解决问题?
让我尝试简化场景,因为我认为可能很难说出我真正想要实现的目标。
- 想象一下,如果我是一个叫@hojitea 的 Twitter 用户(仅举个例子)。我在推特上关注了一个名为@readDonaldTrump 的用户。
- 我希望我的 discord 机器人不仅能获得@realDonaldTrump 已经post编辑的新推文,还能获得他所做的转发。
- 喜欢这张图片(我想在我的 discord 机器人中得到这个转推):
- 请注意,在图像中,它表示 'Donald J. Trump Retweeted',这是我希望我的 discord 机器人也显示的内容,而不是任何其他用户。根据我当前的代码,这是无法实现的。
现在,它是这样的(整个源代码的一个片段):
// 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 推文。
我正在尝试向我的 discord 机器人添加转推功能,以便它可以显示用户已转推 post。我曾尝试做这样的事情,但是当我 运行 我的代码时它仍然只有 post 新推文。谁能帮忙解决问题?
让我尝试简化场景,因为我认为可能很难说出我真正想要实现的目标。
- 想象一下,如果我是一个叫@hojitea 的 Twitter 用户(仅举个例子)。我在推特上关注了一个名为@readDonaldTrump 的用户。
- 我希望我的 discord 机器人不仅能获得@realDonaldTrump 已经post编辑的新推文,还能获得他所做的转发。
- 喜欢这张图片(我想在我的 discord 机器人中得到这个转推):
- 请注意,在图像中,它表示 'Donald J. Trump Retweeted',这是我希望我的 discord 机器人也显示的内容,而不是任何其他用户。根据我当前的代码,这是无法实现的。
现在,它是这样的(整个源代码的一个片段):
// 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.
// ...
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 推文。