本文提供了一个创建Telegram机器人以实时追踪Solana链上活动的指南,使用NFT销售追踪器作为示例,详细介绍了项目的设置、Webhook创建、代码拆解及自定义选项,适合想要构建链上监控工具的开发者。
4分钟阅读
2024年10月18日
想要实时更新Solana事件吗?本指南将向你展示如何创建一个可以跟踪链上活动的Telegram bot。我们将以NFT销售跟踪器为例,但我们构建的模板可以很容易地适配其他用例。
以下是我们示例bot的外观:
该模板结合了Helius webhooks用于实时Solana数据,以及Cloudflare Workers进行无服务器托管。无论你是跟踪NFT销售、监控DeFi协议,还是关注特定钱包,此设置都提供了一个坚实的基础。
让我们开始运行你的项目:
代码
git clone https://github.com/helius-labs/cloudfare-telegram-template.git
cd cloudfare-telegram-template
代码
npm install
打开wrangler.toml
并填写以下键:
TELEGRAM_BOT_TOKEN
/newbot
。TELEGRAM_BOT_TOKEN
。TELEGRAM_CHAT_ID
"chat":{"id":
字段。这就是你的TELEGRAM_CHAT_ID
。创建Telegram Bot并获得Chat ID - 逐步指南 - YouTube
NextGen Vision
33.5K 订阅者
创建Telegram Bot并获得Chat ID - 逐步指南
NextGen Vision
搜索
信息
购物
点击静音
如果播放未能迅速开始,请尝试重启你的设备。
分享
包括播放列表
检索共享信息时发生错误。请稍后再试。
稍后观看
分享
复制链接
HELIUS_API_KEY
你的Helius API密钥(从Helius获取)
AUTH_TOKEN
打开bash并生成唯一的AUTH_TOKEN
:
代码
openssl rand -base64 32
不要将这些值提交到Github。
代码
npm run deploy
运行此命令后,你将在控制台输出中看到你的部署URL。请记下这个URL,因为你将在下一步中需要它。
使用上一步中的部署URL来创建你的webhook:
代码
curl -X POST https://your-worker-url.workers.dev/create-webhook
将“your-worker-url”替换为你的实际worker URL。
运行此命令后,你将收到成功响应。
你可以在你的Helius仪表板上查看新创建的webhook。
新webhook的创建可能需要2-3分钟才能完全启动并正常运行。
创建webhook后,你可以在Helius仪表板中进一步自定义它:
保持“Webhook URL”字段不变。它仍应指向Cloudflare Worker的/webhook端点( https://your-worker-url.workers.dev/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销售,但你可以根据需要修改transactionTypes
和accountAddresses
。
以下是我们如何向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销售,但你可以轻松地将此模板适配为各种用例:
transactionTypes
以跟踪不同的事件accountAddresses
以监控特定程序或钱包探索Helius webhooks文档以发现可追踪数据和事件的完整范围。但是,不要仅限于明确定义的事件!Helius webhooks极其多功能,可以跟踪大量链上活动,即使这些活动没有直接解析或在我们的文档中提到。
以下是你可以跟踪的一些事件示例:
通过利用这个模板,你可以为多种Solana监控任务创建Telegram bots,从DeFi协议事件到钱包活动跟踪以及更远的功能。
如果你阅读到这里,感谢你!我们希望本指南能帮助你开始创建自己的Solana Telegram bot。请务必订阅我们的新闻简报,以便你不会错过Solana的新更新。准备深入探讨吗?快来探索Helius博客上的最新文章,继续你的Solana旅程。
- 原文链接: helius.dev/blog/create-a...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!