不到100行代码中创建一个Solana Telegram机器人

想实时了解Solana上的动态吗?本指南将向您展示如何创建一个Telegram机器人来追踪链上活动。我们将使用一个NFT销售追踪器作为示例,但我们构建的模板可以轻松适配于其他用途。

简介

想实时了解Solana上的动态吗?本指南将向您展示如何创建一个Telegram机器人来追踪链上活动。我们将使用一个NFT销售追踪器作为示例,但我们构建的模板可以轻松适配于其他用途。

以下是我们示例机器人的样子:

NFT 市场机器人

该模板结合了Helius Webhooks来获取实时Solana数据,并使用Cloudflare Workers进行无服务器托管。无论是追踪NFT销售、监控DeFi协议,还是关注特定钱包,这一设置都能为您提供坚实的基础。

设置项目

让我们启动并运行您的项目:

1、克隆仓库:

git clone https://github.com/helius-labs/cloudfare-telegram-template.git  
cd cloudfare-telegram-template

2、安装依赖:

npm install

3、配置环境变量:

打开wrangler.toml并填写以下密钥:

  • TELEGRAM_BOT_TOKEN
    打开Telegram并搜索@BotFather。
    与BotFather开始对话并发送命令/newbot
    按照提示为机器人选择名称和用户名。
    创建完成后,BotFather会提供一个令牌,这就是您的TELEGRAM_BOT_TOKEN
  • TELEGRAM_CHAT_ID
    创建一个频道并将您的机器人添加为管理员。
    向该频道发送一条消息。
    访问:https://api.telegram.org/bot<YOUR_BOT_TOKEN>/getUpdates
    在响应中找到"chat":{"id":字段,这就是您的TELEGRAM_CHAT_ID。查看视频教程:
    “创建Telegram机器人并获取聊天ID - 分步指南”
  • HELIUS_API_KEY
    从Helius获取您的API密钥。

请确保不要将这些值提交到Github。

4、部署到Cloudflare:

npm run deploy

运行此命令后,控制台输出中会显示您的部署URL,请记下该URL,因为下一步会用到它。

5、创建Webhook:

使用上一步中的部署URL创建Webhook:

curl -X POST https://your-worker-url.workers.dev/create-webhook

(将your-worker-url替换为您的实际Worker URL)

运行该命令后,您会收到成功响应。您可以在Helius仪表板上查看新创建的Webhook:
https://dashboard.helius.dev/webhooks

注意:新Webhook可能需要2-3分钟才能完全启动并投入运行。

6、编辑Webhook:

创建Webhook后,您可以在Helius仪表板中进一步自定义:

在此处,您可以修改多个参数,例如:

  • 要追踪的交易类型
  • 要监控的特定钱包地址
  • 网络(mainnet或devnet)

重要提示:请保持“Webhook URL”字段不变,它应继续指向Cloudflare Worker的/webhook端点(如https://your-worker-url.workers.dev/webhook)。

在Helius仪表板上编辑Webhook

代码解析

首先,我们来检查导入和类型定义:

import { Hono } from 'hono';

type Env = {
  HELIUS_API_KEY: string;
  TELEGRAM_BOT_TOKEN: string;
  TELEGRAM_CHAT_ID: string;
};

我们使用了Hono,这是一个适用于Cloudflare Workers的轻量级Web框架。Env类型定义了与Helius和Telegram集成相关的环境变量。

接下来,设置Hono应用:

const app = new Hono<{ Bindings: Env }>();

app.get('/', (c) => c.text('Solana Action Bot is running!'));

这会创建我们的应用,并设置一个简单的健康检查端点。

然后,我们创建Webhook:

app.post('/create-webhook', async (c) => {
  const webhookURL = `${new URL(c.req.url).origin}/webhook`;
  console.log('Setting up webhook with URL:', webhookURL);

  const response = await fetch(
    `https://api.helius.xyz/v0/webhooks?api-key=${c.env.HELIUS_API_KEY}`,
    {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
      },
      body: JSON.stringify({
        webhookURL: webhookURL,
        transactionTypes: ["NFT_SALE"],
        accountAddresses: ["M2mx93ekt1fmXSVkTrUL9xVFHkmME8HTUi5Cyc5aF7K"], // Magic Eden v2程序
        webhookType: "enhanced"
      }),
    }
  );
  const data = await response.json();
  console.log('Helius webhook setup response:', data);
  return c.json({ success: true, webhook: data, webhookURL: webhookURL });
});

此端点会设置Helius Webhook。在示例中,我们追踪来自Magic Eden v2程序的NFT销售,但你可以根据需要修改transactionTypesaccountAddresses

接下来是发送Telegram消息的代码:

async function sendTelegramMessage(message: string, env: Env) {
  const url = `https://api.telegram.org/bot${env.TELEGRAM_BOT_TOKEN}/sendMessage`;
  const response = await fetch(url, {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({
      chat_id: env.TELEGRAM_CHAT_ID,
      text: message,
      parse_mode: 'Markdown',
    }),
  });
  return response.json();
}

此函数将消息格式化并发送到Telegram聊天。

最后,我们处理Webhook数据:

app.post('/webhook', async (c) => {
  console.log('Webhook endpoint hit');
  console.log('Request URL:', c.req.url);

  let data;
  try {
    data = await c.req.json();
    console.log('Received webhook data:', JSON.stringify(data, null, 2));
  } catch (error) {
    console.error('Error parsing webhook data:', error);
    return c.text('Error processing webhook', 400);
  }

  if (!Array.isArray(data) || data.length === 0) {
    console.log('No transactions in webhook data');
    return c.text('No transactions to process', 200);
  }

  for (const transaction of data) {
    if (transaction.type === 'NFT_SALE') {
      const { amount, buyer, seller, signature, nfts } = transaction.events.nft;
      const message = `🎉 *NFT Sale*\n\n` +
        `*Price*: ${amount / 1e9} SOL\n` +
        `*Buyer*: \`${buyer}\`\n` +
        `*Seller*: \`${seller}\`\n` +
        `*Signature*: [View on Solana Explorer](https://explorer.solana.com/tx/${signature})`;
      
      try {
        const result = await sendTelegramMessage(message, c.env);
        console.log('Telegram message sent:', result);
      } catch (error) {
        console.error('Error sending Telegram message:', error);
      }
    }
  }

  return c.text('Webhook processed');
});

在这里,我们处理从Helius接收到的数据,并将格式化的消息发送到Telegram。根据你的具体需求,你可以自定义此部分以处理不同类型的交易或提取不同的信息。

自定义选项

虽然我们的示例专注于NFT销售,但您可以轻松调整此模板以适应多种用例:

  1. 修改Webhook创建中的transactionTypes,以追踪不同事件。
  2. 更改accountAddresses,以监控特定程序或钱包。
  3. /webhook端点中调整消息格式,以满足您的数据需求。
  4. 实现额外的逻辑以过滤或处理传入的数据。

探索Helius Webhooks文档,了解所有可追踪的数据和事件类型。但不要仅局限于明确定义的事件!Helius Webhooks非常灵活,可以追踪各种链上活动,即使这些活动未直接解析或未在文档中提及。

以下是一些可追踪事件的示例:

  • 特定SPL代币的转账
  • 新程序的部署
  • Raydium资金池的创建或流动性添加
  • 治理提案的创建或投票
  • Metaplex糖果机的发布
  • Serum市场的创建

通过利用此模板,您可以为多种Solana监控任务创建Telegram机器人,从DeFi协议事件到钱包活动跟踪,甚至更多。

感谢您阅读到这里!我们希望本指南能帮助您开始创建自己的Solana Telegram机器人。请订阅我们的新闻通讯,以确保不会错过Solana上的最新动态。想深入了解更多内容?立即浏览Helius博客上的最新文章,继续您的Solana之旅吧!

翻译自:https://blog.slerf.tools/six-unique-aspects-of-ton-blockchain-that-will-surprise-solidity-developers/