在不到100行代码的情况下创建一个Solana Telegram机器人

  • Helius
  • 发布于 2024-10-20 13:30
  • 阅读 7

本文提供了一个创建Telegram机器人以实时追踪Solana链上活动的指南,使用NFT销售追踪器作为示例,详细介绍了项目的设置、Webhook创建、代码拆解及自定义选项,适合想要构建链上监控工具的开发者。

4分钟阅读

2024年10月18日

想要实时更新Solana事件吗?本指南将向你展示如何创建一个可以跟踪链上活动的Telegram bot。我们将以NFT销售跟踪器为例,但我们构建的模板可以很容易地适配其他用例。

以下是我们示例bot的外观:

NFT销售bot

该模板结合了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

  1. 打开Telegram并搜索@BotFather
  2. 与BotFather开始聊天并发送命令/newbot
  3. 按提示选择你的bot的名称和用户名。
  4. 创建后,BotFather将给你一个Token。这就是你的TELEGRAM_BOT_TOKEN

TELEGRAM_CHAT_ID

  1. 创建一个频道并将你的bot添加为管理员。
  2. 向频道发送消息。
  3. 访问:https://api.telegram.org/bot<YOUR\_BOT\_TOKEN>/getUpdates
  4. 在响应中找到"chat":{"id":字段。这就是你的TELEGRAM_CHAT_ID
  5. 观看此视频以获取逐步指南:

创建Telegram Bot并获得Chat ID - 逐步指南 - YouTube

NextGen Vision

33.5K 订阅者

创建Telegram Bot并获得Chat ID - 逐步指南

NextGen Vision

搜索

信息

购物

点击静音

如果播放未能迅速开始,请尝试重启你的设备。

分享

包括播放列表

检索共享信息时发生错误。请稍后再试。

稍后观看

分享

复制链接

在www.youtube.com观看 观看

HELIUS_API_KEY

你的Helius API密钥(从Helius获取)

AUTH_TOKEN

打开bash并生成唯一的AUTH_TOKEN

代码

openssl rand -base64 32
注意:

不要将这些值提交到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

注意

新webhook的创建可能需要2-3分钟才能完全启动并正常运行。

6. 编辑你的webhook

创建webhook后,你可以在Helius仪表板中进一步自定义它:

  1. 转到仪表板中的webhooks部分
  2. 你应该在列表中看到新创建的webhook。
  3. 点击该webhook以编辑其设置。
  4. 在这里,你可以修改各种参数,例如:
    • 你想要跟踪的交易类型
    • 要监控的特定钱包地址
    • 网络(主网,开发网)
重要:

保持“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;
  AUTH_TOKEN: string;
};

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

接下来,我们设置我们的Hono应用程序:‍

代码

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

app.get('/', (c) => c.text('Solana Action Bot正在运行!'));

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

现在,让我们创建我们的webhook:

代码

app.post('/create-webhook', async (c) => {
  const webhookURL = `${new URL(c.req.url).origin}/webhook`;
  console.log('设置webhook的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",
        authHeader: c.env.AUTH_TOKEN
      }),
    }
  );
  const data = await response.json();
  console.log('Helius webhook设置响应:', 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) => {

  const authToken = c.req.header('Authorization');
  if (authToken !== c.env.AUTH_TOKEN) {
    return c.text('未经授权', 401);
  }

  let data;
  try {
    data = await c.req.json();
    console.log('接收到的webhook数据:', JSON.stringify(data, null, 2));
  } catch (error) {
    console.error('解析webhook数据时出错:', error);
    return c.text('处理webhook时出错', 400);
  }

  if (!Array.isArray(data) || data.length === 0) {
    console.log('webhook数据中没有交易');
    return c.text('没有交易可处理', 200);
  }

  for (const transaction of data) {
    if (transaction.type === 'NFT_SALE') {
      const { amount, buyer, seller, signature, nfts } = transaction.events.nft;
      const message = `🎉 **NFT 销售**\n\n` +
        `**价格**: ${amount / 1e9} SOL\n` +
        `**买家**: \`${buyer}\`\n` +
        `**卖家**: \`${seller}\`\n` +
        `**签名**: [在Solana Explorer查看](https://explorer.solana.com/tx/${signature})`;

      try {
        const result = await sendTelegramMessage(message, c.env);
        console.log('已发送Telegram消息:', result);
      } catch (error) {
        console.error('发送Telegram消息时出错:', error);
      }
    }
  }

  return c.text('webhook已处理');
});

‍这是我们处理Helius传入数据并将格式化消息发送到Telegram的地方。根据你的用例,你可以自定义此部分以处理不同类型的交易或提取不同的信息。

定制选项

虽然我们的示例专注于NFT销售,但你可以轻松地将此模板适配为各种用例:

  1. 修改webhook创建中的transactionTypes以跟踪不同的事件
  2. 更改accountAddresses以监控特定程序或钱包
  3. 调整/webhook端点中的消息格式以满足你的数据需求
  4. 实施额外的逻辑来筛选或处理传入的数据‍

探索Helius webhooks文档以发现可追踪数据和事件的完整范围。但是,不要仅限于明确定义的事件!Helius webhooks极其多功能,可以跟踪大量链上活动,即使这些活动没有直接解析或在我们的文档中提到。

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

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

通过利用这个模板,你可以为多种Solana监控任务创建Telegram bots,从DeFi协议事件到钱包活动跟踪以及更远的功能。

如果你阅读到这里,感谢你!我们希望本指南能帮助你开始创建自己的Solana Telegram bot。请务必订阅我们的新闻简报,以便你不会错过Solana的新更新。准备深入探讨吗?快来探索Helius博客上的最新文章,继续你的Solana旅程。

附加资源

  1. Helius文档
  2. Cloudflare Workers文档
  3. Telegram Bot API
  4. Hono文档
  • 原文链接: helius.dev/blog/create-a...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
Helius
Helius
https://www.helius.dev/