42 lines
1.4 KiB
TypeScript
42 lines
1.4 KiB
TypeScript
|
import { ChainId, Token, Fetcher, Route } from "@uniswap/sdk";
|
||
|
import { ethers } from "ethers";
|
||
|
import * as dotenv from "dotenv";
|
||
|
import fetch from "node-fetch";
|
||
|
dotenv.config();
|
||
|
|
||
|
const botToken = process.env.BOT_TOKEN;
|
||
|
const channelName = process.env.TELEGRAM_CHANNEL_NAME;
|
||
|
|
||
|
const TORN = new Token(ChainId.MAINNET, "0x77777FeDdddFfC19Ff86DB637967013e6C6A116C", 18);
|
||
|
const USDT = new Token(ChainId.MAINNET, "0xdAC17F958D2ee523a2206206994597C13D831ec7", 6);
|
||
|
const WETH = new Token(ChainId.MAINNET, "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", 18);
|
||
|
|
||
|
const provider = new ethers.providers.JsonRpcProvider(process.env.MAINNET_RPC_URL);
|
||
|
|
||
|
async function getPrice(): Promise<string> {
|
||
|
// Route via WETH, because TORN/USDT pair doesn't have enough liquidity
|
||
|
const pairTORNWETH = await Fetcher.fetchPairData(TORN, WETH, provider);
|
||
|
const pairWETHUSDT = await Fetcher.fetchPairData(WETH, USDT, provider);
|
||
|
const route = new Route([pairTORNWETH, pairWETHUSDT], TORN, USDT);
|
||
|
return route.midPrice.toSignificant(3);
|
||
|
}
|
||
|
|
||
|
async function sendPriceToChannel(price: string) {
|
||
|
try {
|
||
|
await fetch(`https://api.telegram.org/bot${botToken}/sendMessage?chat_id=${channelName}&text=${price}`);
|
||
|
} catch (error) {}
|
||
|
}
|
||
|
|
||
|
async function main() {
|
||
|
try {
|
||
|
const tokenPrice = await getPrice();
|
||
|
await sendPriceToChannel(tokenPrice);
|
||
|
} catch (error) {
|
||
|
console.error(error);
|
||
|
}
|
||
|
|
||
|
setTimeout(main, 1000 * 15);
|
||
|
}
|
||
|
|
||
|
main();
|