mirror of
https://github.com/benjamin-wilson/public-pool.git
synced 2026-09-29 17:15:03 -07:00
update postgresql branch
This commit is contained in:
@@ -1,8 +1,8 @@
|
||||
import { Injectable, OnModuleInit } from '@nestjs/common';
|
||||
import { ConfigService } from '@nestjs/config';
|
||||
import axios, { AxiosInstance } from 'axios';
|
||||
import { validate } from 'bitcoin-address-validation';
|
||||
import { Block } from 'bitcoinjs-lib';
|
||||
import * as TelegramBot from 'node-telegram-bot-api';
|
||||
|
||||
import { TelegramSubscriptionsService } from '../ORM/telegram-subscriptions/telegram-subscriptions.service';
|
||||
|
||||
@@ -10,7 +10,9 @@ import { TelegramSubscriptionsService } from '../ORM/telegram-subscriptions/tele
|
||||
@Injectable()
|
||||
export class TelegramService implements OnModuleInit {
|
||||
|
||||
private bot: TelegramBot;
|
||||
private bot: AxiosInstance;
|
||||
private updateOffset = 0;
|
||||
private pollingTimer: NodeJS.Timeout;
|
||||
|
||||
constructor(
|
||||
private readonly configService: ConfigService,
|
||||
@@ -20,7 +22,10 @@ export class TelegramService implements OnModuleInit {
|
||||
if (token == null || token.length < 1) {
|
||||
return;
|
||||
}
|
||||
this.bot = new TelegramBot(token, { polling: true });
|
||||
this.bot = axios.create({
|
||||
baseURL: `https://api.telegram.org/bot${token}/`,
|
||||
timeout: 10000
|
||||
});
|
||||
console.log('Telegram bot init');
|
||||
|
||||
|
||||
@@ -32,23 +37,10 @@ export class TelegramService implements OnModuleInit {
|
||||
return;
|
||||
}
|
||||
|
||||
this.bot.onText(/\/subscribe/, async (msg) => {
|
||||
const address = msg.text.split('/subscribe ')[1];
|
||||
if (validate(address) == false) {
|
||||
this.bot.sendMessage(msg.chat.id, "Invalid address.");
|
||||
return;
|
||||
}
|
||||
await this.telegramSubscriptionsService.saveSubscription(msg.chat.id, address);
|
||||
this.bot.sendMessage(msg.chat.id, "Subscribed!");
|
||||
});
|
||||
|
||||
this.bot.onText(/\/start/, (msg) => {
|
||||
this.bot.sendMessage(msg.chat.id, "Welcome to the public-pool bot. /subscribe <address> to get notified.");
|
||||
});
|
||||
|
||||
this.bot.on('message', (msg) => {
|
||||
console.log(msg);
|
||||
});
|
||||
await this.pollUpdates();
|
||||
this.pollingTimer = setInterval(async () => {
|
||||
await this.pollUpdates();
|
||||
}, 2000);
|
||||
}
|
||||
|
||||
public async notifySubscribersBlockFound(address: string, height: number, block: Block, message: string) {
|
||||
@@ -57,8 +49,57 @@ export class TelegramService implements OnModuleInit {
|
||||
}
|
||||
|
||||
const subscribers = await this.telegramSubscriptionsService.getSubscriptions(address);
|
||||
subscribers.forEach(subscriber => {
|
||||
this.bot.sendMessage(subscriber.telegramChatId, `Block Found! Result: ${message}, Height: ${height}`);
|
||||
await Promise.all(subscribers.map(subscriber => {
|
||||
return this.sendMessage(subscriber.telegramChatId, `Block Found! Result: ${message}, Height: ${height}`);
|
||||
}));
|
||||
}
|
||||
|
||||
private async pollUpdates() {
|
||||
try {
|
||||
const response = await this.bot.get('getUpdates', {
|
||||
params: {
|
||||
offset: this.updateOffset,
|
||||
timeout: 0
|
||||
}
|
||||
});
|
||||
|
||||
for (const update of response.data.result ?? []) {
|
||||
this.updateOffset = update.update_id + 1;
|
||||
await this.handleMessage(update.message);
|
||||
}
|
||||
} catch (e) {
|
||||
console.error('Telegram polling failed', e.message);
|
||||
}
|
||||
}
|
||||
|
||||
private async handleMessage(msg: any) {
|
||||
if (msg?.text == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (msg.text.startsWith('/subscribe')) {
|
||||
const address = msg.text.split('/subscribe ')[1];
|
||||
if (validate(address) == false) {
|
||||
await this.sendMessage(msg.chat.id, 'Invalid address.');
|
||||
return;
|
||||
}
|
||||
await this.telegramSubscriptionsService.saveSubscription(msg.chat.id, address);
|
||||
await this.sendMessage(msg.chat.id, 'Subscribed!');
|
||||
return;
|
||||
}
|
||||
|
||||
if (msg.text.startsWith('/start')) {
|
||||
await this.sendMessage(msg.chat.id, 'Welcome to the public-pool bot. /subscribe <address> to get notified.');
|
||||
return;
|
||||
}
|
||||
|
||||
console.log(msg);
|
||||
}
|
||||
|
||||
private async sendMessage(chatId: number | string, text: string) {
|
||||
await this.bot.post('sendMessage', {
|
||||
chat_id: chatId,
|
||||
text
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user