为了账号安全,请及时绑定邮箱和手机立即绑定

如何将 Discord.js 和 twit 相互集成以在指定频道上实时 Twitter 提要

如何将 Discord.js 和 twit 相互集成以在指定频道上实时 Twitter 提要

梦里花落0921 2021-11-18 16:28:15
是否可以用Twit做一个爬虫,是否也可以在Discord频道中输出接收到的数据?目前我已经用两个模块制作了一个脚本,它运行良好。控制台输出同时适用于 Discord.js 和 Twit。我已经输入了 Discord 的令牌和 Twitter API 的几个键。但我的目标有点复杂。使用 twit,我需要制作一个爬虫来实时从 twitter 帐户中爬取推文,而 Discord.js 应该在 Discord 频道中输出这些数据。有谁知道如何做到这一点?我尝试尝试使用 Twit 的流函数,但无法弄清楚它究竟是如何工作的。它从任何时间跨度抓取随机推文。我不确定如何配置它。即使我发现我仍然需要将它与 Discord.js 集成
查看完整描述

2 回答

?
幕布斯7119047

TA贡献1794条经验 获得超8个赞

最简单的方法如下:


const Discord = require('discord.js');

const Twitter = require('twit');

const twitterConf = {

    consumer_key: process.env.TWITTER_CONSUMER_KEY,

    consumer_secret: process.env.TWITTER_CONSUMER_SECRET,

    access_token: process.env.TWITTER_ACCESS_TOKEN_KEY,

    access_token_secret: process.env.TWITTER_ACCESS_TOKEN_SECRET,

  }

const client = new Discord.Client();

const twitterClient = new Twitter(twitterConf);

// Specify destination channel ID below

const dest = '11111111111111111111'; 


// Create a stream to follow tweets

const stream = twitterClient.stream('statuses/filter', {

  follow: '2899773086', // @Every3Minutes, specify whichever Twitter ID you want to follow

});


stream.on('tweet', tweet => {

  const twitterMessage = `${tweet.user.name} (@${tweet.user.screen_name}) tweeted this: https://twitter.com/${tweet.user.screen_name}/status/${tweet.id_str}`

  client.channels.get(dest).send(twitterMessage);

  return false;

});


client.on('ready', () => {

  console.log(`I'm in`);

});


client.login(process.env.DISCORD_TOKEN);

当然,以下假设您在适当的环境变量中指定了 Discord 和 Twitter 密钥。


注意:默认情况下,流将包含的不仅仅是用户自己的推文:转发、回复。您可以使用以下功能轻松过滤它们(不是我的,来源指出):


// SOURCE:

// https://github.com/ttezel/twit/issues/286#issuecomment-236315960

function isReply(tweet) {

  if (tweet.retweeted_status

    || tweet.in_reply_to_status_id

    || 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;

  return false;

}

出于测试目的,我在这里使用了@Every3Minutes,因为它每 3 分钟发送一次推文,这对我的测试非常有用。


查看完整回答
反对 回复 2021-11-18
?
慕村9548890

TA贡献1884条经验 获得超4个赞

我会这样做:

  1. 为您要跟踪的每个用户创建一个流。(这可以帮助您定位用户

  2. 然后将每个链接stream.on('tweet'到您的不和谐机器人的响应。


查看完整回答
反对 回复 2021-11-18
  • 2 回答
  • 0 关注
  • 239 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信