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

Mur*_*ran 2 javascript twitter node.js discord discord.js

是否可以用Twit制作一个爬虫,是否也可以在Discord频道中输出接收到的数据?目前我已经用这两个模块制作了一个脚本,并且运行良好。控制台输出同时适用于 Discord.js 和 Twit。我已经输入了 Discord 的令牌和 Twitter API 的几个密钥。但我的目标有点复杂。使用 twit,我需要制作一个爬虫,实时从 twitter 帐户爬取推文,Discord.js 应该在 Discord 通道中输出这些数据。有谁知道如何做到这一点?我尝试尝试 Twit 的流功能,但无法弄清楚它到底是如何工作的。它抓取任何时间跨度的随机推文。我不知道如何配置它。即使我发现了这一点,我仍然需要将它与 Discord.js 集成

rob*_*bdy 5

最简单的方法如下:

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);
Run Code Online (Sandbox Code Playgroud)

当然,以下假设您已在适当的环境变量中指定了 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;
}
Run Code Online (Sandbox Code Playgroud)

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