# Fan Token transferleri için Telegram bildirimleri alın

Chiliz Zinciri üzerinde gerçekleşen Fan Token™ transferlerini izlemek, yüksek değerli hareketlerden haberdar olmanın ve topluluğunuzu bilgilendirmenin harika bir yoludur.&#x20;

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

## Envio kullanarak nasıl yaparsınız?

[Envio](https://envio.dev/) geliştiricilerin Chiliz üzerinde akıllı sözleşme etkinliklerini dinlemesine ve olaya bağlı olarak bir işlem gerçekleştirmesine olanak tanıyan güçlü bir indeksleme aracıdır.

Bu nasıl yapılır kılavuzunda, 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 izleyicisine” dönüştürmüş olacaksınız.

### Adım 1: Önkoşulları Yükleyin

Başlamadan önce, sahip olduğunuzdan emin olun [gerekli araçlar](https://docs.envio.dev/docs/HyperIndex/getting-started#prerequisites) yüklü:

* [pnpm](https://pnpm.io/)
* [Node.js](https://nodejs.org/en)
* [Docker](https://www.docker.com/)

{% hint style="info" %}
Tam proje şurada bulunabilir [bu GitHub deposunda](https://github.com/DenhamPreen/fc-barce-fan-token-indexer/tree/main).
{% endhint %}

### Adım 2: Envio İndeksleyicisini Başlatın

Aşağıdaki komutu çalıştırarak bir Envio indeksleyicisi başlatın ve Chiliz Zinciri üzerinde bir ERC20 şablonu oluşturmak için istemleri izleyin (Chiliz, EVM uyumlu bir blokzinciridir):

```bash
pnpx envio init
```

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

<figure><img src="https://2155691341-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F4L7rBH2rmyoBTn93MSdx%2Fuploads%2FMfIuODmwdOu9mMJ7yovi%2Fimage.png?alt=media&#x26;token=6d2237d3-4452-4e88-93c1-b27a09ec77da" alt=""><figcaption></figcaption></figure>

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

sözleşme adresini belirtmek için `config.yaml` dosyasını değiştirin: FC Barcelona Fan Token™ (veya izlemek istediğiniz başka bir Fan Token™):

{% code overflow="wrap" lineNumbers="true" %}

```yaml
# yaml-language-server: $schema=./node_modules/envio/evm.schema.json
name: fan-token-watcher
description: Büyük transferlerde Telegram'a bildirim gönderen basit bir Fan Token indeksleyicisi
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"
```

{% endcode %}

**Not:** Sadece transferlerle ilgilendiğimiz için `onay (approval)` etkinliğini kaldırıyoruz.

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

sözleşme adresini belirtmek için `schema.graphql` yalnızca hesap bakiyelerini takip etmek için dosyasını:

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

Bu noktada, olayları dinleyen bir ERC20 indeksleyicimiz var.&#x20;

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

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

sözleşme adresini belirtmek için `/src/EventHandlers.ts` büyük transferleri tespit etme ve Telegram uyarıları gönderme mantığını içerecek dosya.

{% code overflow="wrap" lineNumbers="true" %}

```typescript
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 BALİNA UYARISI 🐋: <a href="${explorerUrlAddress(
      event.params.from
    )}">${ensHandleOrFromAddress}</a> adresinden <a href="${explorerUrlAddress(
      event.params.to
    )}">${ensHandleOrToAddress}</a> adresine ${event.params.value} FC Barcelona tutarında yeni bir transfer gerçekleştirildi! 🔥 - <a href="${explorerUrlTx(
      event.transaction.hash
    )}">işlem</a>`;

    await sendMessageToTelegram(msg);
  }

  await indexBalances(context, event);
});
```

{% endcode %}

{% hint style="success" %}
Örnek `/libs/` klasörü şurada bulunabilir [tam olarak burada GitHub'da](https://github.com/DenhamPreen/fc-barce-fan-token-indexer/tree/main/src/libs), içinde ayrıca `helpers.ts` ve `ens.ts` dosyaları bulunmaktadır.
{% endhint %}

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

ortam değişkenlerini depolamak için bir `constants.ts` dosyası oluşturun:

{% code overflow="wrap" lineNumbers="true" %}

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

{% endcode %}

### Adım 7: Telegram Mesajları Gönderme

Yükleyin [Axios HTTP istemcisi](https://axios-http.com/):

```bash
pnpm i axios
```

Axios kullanarak mesaj göndermek için `libs/telegram.ts` dosyasında bir yardımcı fonksiyon oluşturun:

{% code overflow="wrap" lineNumbers="true" %}

```typescript
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("Mesaj gönderme hatası:", error);
  }
};
```

{% endcode %}

### Adım 8: Son Yapılandırma ve İndeksleyiciyi Çalıştırma

#### Yapılandırın `.env` Dosyasını

```sh
cp .env.example .env
```

Düzenleyin `.env` Telegram bot bilgilerinizi kullanarak:

```sh
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 çalıştırın:

   ```
   /newbot
   ```
2. İstemleri izleyerek bot token'ınızı alın.
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.

{% hint style="success" %}
Botu kullanarak yeni grubu oluşturduysanız ve yalnızca `{"ok":true,"result":[]}`dönüyorsa, botu gruptan kaldırıp tekrar ekleyin.
{% endhint %}

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

```sh
pnpm i
pnpm envio dev
```

Bu kurulumla artık Fan Token transferlerini dinleyen ve balina uyarılarını Telegram'a gönderen Envio destekli bir indeksleyiciniz var.&#x20;

<figure><img src="https://2155691341-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F4L7rBH2rmyoBTn93MSdx%2Fuploads%2FcU5SOaSqyMKRlKUXVFUM%2Fimage.png?alt=media&#x26;token=47f64ee3-0f18-41aa-9040-8e9ec8ddc619" alt=""><figcaption></figcaption></figure>

Daha ileri gitmek isterseniz, indeksleyiciyi kendi sunucunuzda barındırabilir veya Envio'nun barındırılan servisine dağıtabilirsiniz.&#x20;

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