Fan Token transferleri için Telegram bildirimleri nasıl oluşturulur

Chiliz Chain üzerinde gerçekleşen Fan Token™ transferlerini izlemek, yüksek değerli hareketlerden haberdar olmak ve topluluğunuzu bilgilendirmek için harika bir yoldur.

Biraz yapılandırma ve kod ile, bir Fan Token™ transferi belirli bir eşiği aştığında bir grubu bilgilendiren bir Telegram botu kurabilirsiniz.

Envio kullanarak nasıl yapılır?

Envio geliştiricilerin Chiliz üzerinde akıllı sözleşme olaylarını dinlemelerine ve olaya dayalı bir işlem gerçekleştirmelerine olanak tanıyan güçlü bir indeksleme aracıdır.

Bu nasıl yapılır rehberinde, botu nasıl yapılandıracağınızı, ilgili olayları nasıl yakalayacağınızı ve Telegram uyarılarını otomatik olarak nasıl tetikleyeceğinizi göreceksiniz; böylece kurulumunuzu büyük transferler için bir “balina izleyici”ye dönüştüreceksiniz.

Adım 1: Ön Gereksinimleri Kurun

Başlamadan önce şu araçlara sahip olduğunuzdan emin olun: gerekli araçlar kurulu:

Tam proje şu adreste bulunabilir bu GitHub deposunda.

Adım 2: Envio İndexer'ı Başlatın

Bir Envio indexer başlatmak için aşağıdaki komutu çalıştırın ve Chiliz Chain üzerinde bir ERC20 şablonu oluşturmak için istemleri takip edin (Chiliz, EVM uyumlu bir blokzincirdir):

pnpx envio init

İstendiğinde yapmanız gereken çeşitli seçimler şunlardır:

Adım 3: Yapılandırma config.yaml

şunu değiştirin config.yaml dosyayı, FC Barcelona Fan Token™ (veya takip etmek istediğiniz herhangi bir diğer Fan Token™) sözleşme adresini belirtmek için:

# yaml-language-server: $schema=./node_modules/envio/evm.schema.json
name: fan-token-watcher
description: Büyük transferlerde Telegram'a bildirim gönderan basit bir Fan Token indexer'ı
networks:
  - id: 8888 # Chiliz
    start_block: 0
    contracts:
      - name: ERC20
        address: "0xFD3C73b3B09D418841dd6Aff341b2d6e3abA433b" # FC Barcelona
        handler: src/EventHandlers.ts
        events:          
          - event: "Transfer(address indexed from, address indexed to, uint256 value)"
field_selection:
  transaction_fields:
    - "hash"

Not: Şunu kaldırıyoruz approval olayı çünkü sadece transferlerle ilgileniyoruz.

Adım 4: GraphQL Şemasını Basitleştirin

şunu değiştirin schema.graphql dosyayı yalnızca hesap bakiyelerini izlemek için:

type Account {
  id: ID!   # Hesabın adresi
  balance: BigInt! # Hesabın token bakiyesi
}

Bu noktada, olayları dinleyen bir ERC20 indexer'ımız var.

Şimdi Telegram bildirimleri göndermek için mantık ekleyelim.

Adım 5: Telegram Bildirim Mantığını Uygulayın

şunu değiştirin /src/EventHandlers.ts dosyası, büyük transferleri tespit etme ve Telegram uyarıları gönderme mantığını içerecek şekilde düzenlenmelidir.

import { ERC20 } from "generated";
import { isIndexingAtHead, indexBalances } from "./libs/helpers";
import { fetchEnsHandle } from "./libs/ens";
import { sendMessageToTelegram } from "./libs/telegram";
import { WHALE_THRESHOLD, explorerUrlAddress, explorerUrlTx } from "./constants";

ERC20.Transfer.handler(async ({ event, context }) => {
  if (isIndexingAtHead(event.block.timestamp) && event.params.value >= BigInt(WHALE_THRESHOLD)) {
    const ensHandleOrFromAddress = await fetchEnsHandle(event.params.from); 
    const ensHandleOrToAddress = await fetchEnsHandle(event.params.to);
    const msg = `FC Barcelona WHALE ALERT 🐋: A new transfer has been made by <a href="${explorerUrlAddress(
      event.params.from
    )}">${ensHandleOrFromAddress}</a> to <a href="${explorerUrlAddress(
      event.params.to
    )}">${ensHandleOrToAddress}</a> for ${event.params.value} FC Barcelona! 🔥 - <a href="${explorerUrlTx(
      event.transaction.hash
    )}">transaction</a>`;

    await sendMessageToTelegram(msg);
  }

  await indexBalances(context, event);
});

Adım 6: Sabitleri Yapılandırın

Oluştur constants.ts dosyası ortam değişkenlerini saklamak için:

export const EXPLORER_URL_MONAD = process.env.ENVIO_EXPLORER_URL_MONAD;
export const WHALE_THRESHOLD: string = process.env.ENVIO_WHALE_THRESHOLD ?? "1000";
export const BOT_TOKEN = process.env.ENVIO_BOT_TOKEN;
export const CHANNEL_ID = process.env.ENVIO_TELEGRAM_CHANNEL_ID;
export const MESSAGE_THREAD_ID = process.env.ENVIO_TELEGRAM_MESSAGE_THREAD_ID;

export const explorerUrlAddress = (address: string) =>
  EXPLORER_URL_MONAD + "address/" + address;
export const explorerUrlTx = (txHash: string) =>
  EXPLORER_URL_MONAD + "tx/" + txHash;

Adım 7: Telegram Mesajları Göndermek

Şunu yükleyin Axios HTTP istemcisi:

pnpm i axios

Helpers/yardımcı fonksiyon oluşturun içinde libs/telegram.ts Axios kullanarak mesaj göndermek için:

import axios from "axios";
import { CHANNEL_ID, MESSAGE_THREAD_ID, BOT_TOKEN } from "../constants";

export const sendMessageToTelegram = async (message: string): Promise<void> => {
  try {
    const apiUrl = `https://api.telegram.org/bot${BOT_TOKEN}/sendMessage`;
    await axios.post(apiUrl, {
      chat_id: CHANNEL_ID,
      text: message,
      parse_mode: "HTML",
    });
  } catch (error) {
    console.error("Error sending message:", error);
  }
};

Adım 8: Son Yapılandırma ve Indexer'ı Çalıştırma

Şunu yapılandırın dosyası oluşturur; bu, gizli değerleri saklamak için gereklidir: Dosya

cp .env.example .env

Düzenleyin dosyası oluşturur; bu, gizli değerleri saklamak için gereklidir: Telegram bot kimlik bilgilerinizle:

ENVIO_BOT_TOKEN=
ENVIO_TELEGRAM_CHANNEL_ID=
ENVIO_TELEGRAM_MESSAGE_THREAD_ID=
ENVIO_EXPLORER_URL="https://chiliscan.com/"
ENVIO_WHALE_THRESHOLD=1000

Bir Telegram Botu Oluşturun

  1. Mesaj @BotFather Telegram'da ve şunu çalıştırın:

    /newbot
  2. Bot token'ınızı almak için istemleri takip edin.

  3. Botu Telegram grubunuza ekleyin ve çalıştırın /start.

  4. Ziyaret edin https://api.telegram.org/bot<YourBOTToken>/getUpdates grup sohbet kimliğini bulmak için.

Son olarak, bağımlılıkları yükleyin ve indexer'ı başlatın

pnpm i
pnpm envio dev

Bu kurulum ile artık Fan Token transferlerini dinleyen ve balina uyarılarını Telegram'a gönderen Envio destekli bir indexer'ınız var.

Daha ileri gitmek için indexer'ı kendi sunucunuzda barındırabilir veya Envio'nun barındırılan servisine dağıtabilirsiniz.

Ve bakiyeleri kaydettiğimiz için, aynı zamanda bir GraphQL bakiye API'si olarak da kullanılabilir.

Last updated

Was this helpful?