Use rxjs observables for blockchain data
This commit is contained in:
42
src/gasAlertChecker.ts
Normal file
42
src/gasAlertChecker.ts
Normal file
@ -0,0 +1,42 @@
|
||||
import { EmbedBuilder, TextChannel } from 'discord.js';
|
||||
|
||||
import { DiscordClient } from './discordClient';
|
||||
import redisClient from './redis';
|
||||
|
||||
import { GasAlert } from '../types/gasAlert';
|
||||
import { GasPrices } from '../types/gasPrices';
|
||||
|
||||
const createGasAlertChecker = (client: DiscordClient) =>
|
||||
async (gasPrices: GasPrices) => {
|
||||
try {
|
||||
const gasAlerts: GasAlert[] = await redisClient
|
||||
.hVals('gas-alerts')
|
||||
.then((values) => values.map(val => JSON.parse(val)));
|
||||
|
||||
gasAlerts.forEach(async (gasAlert) => {
|
||||
if (gasPrices.fast <= gasAlert.threshold) {
|
||||
const channel = await client.channels.fetch(gasAlert.channelId) as TextChannel;
|
||||
const user = await client.users.fetch(gasAlert.userId);
|
||||
|
||||
channel.send({
|
||||
embeds: [
|
||||
new EmbedBuilder()
|
||||
.setTitle('Gas price alert!')
|
||||
.setDescription(`<@${gasAlert.userId}>!
|
||||
Gas prices have fallen below your alert threshold of ${gasAlert.threshold} Gwei:
|
||||
⚡ ${gasPrices.fast} ⦚⦚ 🚶 ${gasPrices.average} ⦚⦚ 🐢 ${gasPrices.slow}`)
|
||||
.setColor('#FF8C00')
|
||||
],
|
||||
target: user
|
||||
})
|
||||
|
||||
console.log(`Alerted ${user} under threshold ${gasAlert.threshold}: Removing alert...`)
|
||||
await redisClient.hDel('gas-alerts', `${gasAlert.userId}`)
|
||||
}
|
||||
});
|
||||
} catch (error) {
|
||||
console.log(`Error checking gas prices:\n`, error);
|
||||
}
|
||||
};
|
||||
|
||||
export { createGasAlertChecker };
|
Reference in New Issue
Block a user