Розробка Twitter/X-бота для крипто-проекту

Проєктуємо та розробляємо блокчейн-рішення повного циклу: від архітектури смарт-контрактів до запуску DeFi-протоколів, NFT-маркетплейсів та криптобірж. Аудит безпеки, токеноміка, інтеграція з наявною інфраструктурою.
Показано 1 з 1Усі 1306 послуг
Розробка Twitter/X-бота для крипто-проекту
Простий
~3-5 днів
Часті запитання

Напрямки блокчейн-розробки

Етапи блокчейн-розробки

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1307
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1219
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    920
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1148
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    611
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    886

Розробка Twitter/X-бота для крипто-проекту

Twitter/X залишається основною площадкою крипто-коммьюніті — альфа розповсюджується тут швидше ніж де-небудь. Боти потрібні для конкретних завдань: автоматичні анонси on-chain подій (крупні переводи, liquidations, governance голосування), моніторинг упоминань, публікація метрик протоколу за розпорядженням. Telegram-боти простіші у реалізації, але Twitter/X — це публічна видимість і нарратив.

Twitter API v2: поточний стан

З 2023 року Twitter/X різко змінив умови API. Важливо розуміти поточну ситуацію перед початком роботи:

Free tier — тільки читання (1500 твітів на місяць на запис, надзвичайно обмежено). По суті непридатний для активного бота.

Basic tier ($100/місяць) — 3000 твітів на місяць на запис, 10K читати. Достатньо для ботів з помірною активністю.

Pro tier ($5000/місяць) — 300K твітів. Для високочастотних alert-ботів.

Для більшості крипто-проектів хватає Basic. При плануванні бота потрібно одразу розрахувати monthly tweet volume — якщо планується твітити при кожній крупній транзакції на популярному протоколі, це може бути сотні твітів на день.

Архітектура бота

Компонент 1: on-chain монітор

Джерело даних — завжди blockchain события, а не сторонні агрегатори (вони додають затримку). Використовуємо WebSocket підписку для real-time:

const { ethers } = require('ethers')
const provider = new ethers.WebSocketProvider(process.env.WSS_RPC_URL)

const AAVE_POOL = '0x87870Bca3F3fD6335C3F4ce8392D69350B4fA4E2'
const LIQUIDATION_TOPIC = ethers.id('LiquidationCall(address,address,address,uint256,uint256,address,bool)')

provider.on({ address: AAVE_POOL, topics: [LIQUIDATION_TOPIC] }, async (log) => {
  const iface = new ethers.Interface(AAVE_POOL_ABI)
  const decoded = iface.parseLog(log)
  
  const collateralAsset = decoded.args.collateralAsset
  const debtAsset = decoded.args.debtAsset
  const liquidatedCollateralAmount = decoded.args.liquidatedCollateralAmount
  
  // Отримуємо USD вартість через Chainlink або Coingecko
  const usdValue = await getUSDValue(collateralAsset, liquidatedCollateralAmount)
  
  if (usdValue > MINIMUM_NOTABLE_USD) {
    await postLiquidationTweet({ collateralAsset, debtAsset, usdValue, txHash: log.transactionHash })
  }
})

Компонент 2: форматування і публікація

const { TwitterApi } = require('twitter-api-v2')

const client = new TwitterApi({
  appKey: process.env.TWITTER_APP_KEY,
  appSecret: process.env.TWITTER_APP_SECRET,
  accessToken: process.env.TWITTER_ACCESS_TOKEN,
  accessSecret: process.env.TWITTER_ACCESS_SECRET,
})

const rwClient = client.readWrite

async function postLiquidationTweet({ collateralAsset, debtAsset, usdValue, txHash }) {
  const collSymbol = await getTokenSymbol(collateralAsset)
  const debtSymbol = await getTokenSymbol(debtAsset)
  
  const text = [
    `🔴 AAVE Liquidation`,
    ``,
    `Collateral: ${collSymbol}`,
    `Debt: ${debtSymbol}`,
    `Value: $${formatUSD(usdValue)}`,
    ``,
    `Tx: https://etherscan.io/tx/${txHash}`,
    ``,
    `#DeFi #AAVE #Liquidation`
  ].join('\n')
  
  try {
    await rwClient.v2.tweet(text)
  } catch (error) {
    if (error.code === 403) {
      // Duplicate tweet — додаємо timestamp або пропускаємо
      logger.warn('Duplicate tweet prevented', { txHash })
    } else {
      throw error
    }
  }
}

Rate limiting і anti-ban

Twitter/X активно детектує аномальну поведінку. Рекомендації:

  • Дедупліокація: зберігати txHash опублікованих подій (Redis з TTL 24h) — ніколи не твітити одну подію двічі
  • Cooldown між твітами: мінімум 30 секунд між публікаціями при серії подій
  • Queue з пріоритетами: якщо подій багато — твітимо найбільші, дрібні агрегуємо в один дайджест-твіт
  • Graceful reconnect: WebSocket з'єднання рвуться, потрібен exponential backoff при переподключенні
// Очередь з дебаунсом для batch подій
class TweetQueue {
  constructor(client, maxPerHour = 20) {
    this.queue = []
    this.maxPerHour = maxPerHour
    this.published = []
    
    // Публикуємо кожні 3 хвилини (максимум 20 на годину)
    setInterval(() => this.flush(), 3 * 60 * 1000)
  }
  
  async add(event) {
    // Дедупліокація по txHash
    if (this.queue.some(e => e.txHash === event.txHash)) return
    
    this.queue.push({ ...event, addedAt: Date.now() })
    
    // Сортуємо по usdValue — публикуємо найбільші спочатку
    this.queue.sort((a, b) => b.usdValue - a.usdValue)
  }
  
  async flush() {
    if (this.queue.length === 0) return
    
    const toPublish = this.queue.shift()
    await this.client.v2.tweet(formatTweet(toPublish))
    
    // Throttle: не публикуємо частіше за maxPerHour
    const lastHour = this.published.filter(t => Date.now() - t < 3600000)
    if (lastHour.length >= this.maxPerHour) {
      logger.info('Rate limit self-imposed, queuing')
      return
    }
    
    this.published.push(Date.now())
  }
}

Scheduled tweets: метрики протоколу

Крім event-driven публікацій — періодичні дайджести:

const cron = require('node-cron')

// Щоденна статистика в 12:00 UTC
cron.schedule('0 12 * * *', async () => {
  const stats = await fetchProtocolStats()
  
  await rwClient.v2.tweet(
    `📊 Daily Stats — ${new Date().toLocaleDateString('en-US', { month: 'short', day: 'numeric' })}\n\n` +
    `TVL: $${formatBigNumber(stats.tvl)}\n` +
    `24h Volume: $${formatBigNumber(stats.volume24h)}\n` +
    `Active Users: ${stats.activeUsers.toLocaleString()}\n\n` +
    `#DeFi`
  )
})

Розгортання

Мінімальна інфраструктура — Docker контейнер на VPS з постійним WebSocket з'єднанням. PM2 або systemd для автоперезапуску. Логування через Winston в файл + опціонально Telegram-алерти на помилки самого бота.

Змінні оточення ніколи не в коді — .env файл, у production — secrets manager або змінні оточення хостингу.

Що входить в роботу

  • Настройка Twitter Developer App і OAuth 2.0 аутентифікації
  • On-chain монітор з WebSocket підпискою на потрібні подій
  • Форматування твітів з реальними даними з блокчейну
  • Дедупліокація, rate limiting, queue менеджмент
  • Scheduled публікації за розпорядженням (дайджести, метрики)
  • Розгортання на VPS з моніторингом процесу