Как интегрировать Discord.js и твитнуть друг с другом для прямой трансляции в Твиттере на указанном канале - PullRequest
0 голосов
/ 12 октября 2019

Можно ли создать сканер с Twit и можно ли выводить полученные данные в канал Discord? В настоящее время я сделал скрипт с обоими модулями, и он работает нормально. Консольный вывод работает для Discord.js и Twit одновременно. Я ввел токен для Discord и несколько ключей для API Twitter. Но моя цель немного сложнее. С помощью twit мне нужно создать сканер, который сканирует твиты из учетных записей Twitter в режиме реального времени, а Discord.js должен выводить эти данные в канале Discord. У кого-нибудь есть идеи, как это сделать? Я пытался поэкспериментировать с потоковой функцией Twit, но не смог понять, как она работает. Он сканировал случайные твиты с любого промежутка времени. Я не уверен, как это настроить. И даже если бы я понял это, мне все равно нужно интегрировать его с Discord.js

Ответы [ 2 ]

1 голос
/ 14 октября 2019

Самый простой способ заключается в следующем:

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 минуты, что былохорошо для моего тестирования.

0 голосов
/ 12 октября 2019

Я бы сделал это следующим образом:

  1. Создайте поток для каждого пользователя, которого вы хотите отслеживать. ( это может помочь вам настроить таргетинг на пользователя )
  2. Затем свяжите каждый stream.on('tweet' с ответом вашего бота разногласия.
...