-
Notifications
You must be signed in to change notification settings - Fork 0
/
celestia-bridge-bot.py
100 lines (84 loc) · 4.09 KB
/
celestia-bridge-bot.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
from __future__ import print_function
import time
import os
import json
import requests
import sys
import datetime
import discord
from discord.ext import commands
token = os.environ['DISCORD_TOKEN']
# Discord Bot
intents = discord.Intents.default()
intents.message_content = True
client = commands.Bot(command_prefix='$', intents=intents, help_command=None)
# Output when Bot is online and ready to use
@client.event
async def on_ready():
print('Bot is ready.')
print('Logged in as:')
print(client.user.name)
print(client.user.id)
print('------')
# Error Handling
@client.event
async def on_command_error(ctx, error):
if isinstance(error, commands.errors.MissingRequiredArgument):
embed = discord.Embed(title="", description="", timestamp=datetime.datetime.utcnow(), color=0xff0000)
embed.set_author(name="ITN Bridge Node Status", icon_url="https://pbs.twimg.com/profile_images/1404854187721203715/zZp1s7c3_400x400.jpg")
embed.add_field(name="Error:", value='`Missing Bridge Node ID`', inline=False)
await ctx.send(ctx.author.mention)
await ctx.send(embed=embed)
return
if isinstance(error, commands.errors.CommandNotFound):
embed = discord.Embed(title="", description="", timestamp=datetime.datetime.utcnow(), color=0xff0000)
embed.set_author(name="ITN Bridge Node Status", icon_url="https://pbs.twimg.com/profile_images/1404854187721203715/zZp1s7c3_400x400.jpg")
embed.add_field(name="Error:", value='`%s`' % error, inline=False)
await ctx.send(ctx.author.mention)
await ctx.send(embed=embed)
return
if isinstance(error, commands.errors.CommandInvokeError):
embed = discord.Embed(title="", description="", timestamp=datetime.datetime.utcnow(), color=0xff0000)
embed.set_author(name="ITN Bridge Node Status", icon_url="https://pbs.twimg.com/profile_images/1404854187721203715/zZp1s7c3_400x400.jpg")
embed.add_field(name="Error:", value='`Invalid Bridge Node ID or response was empty`', inline=False)
await ctx.send(ctx.author.mention)
await ctx.send(embed=embed)
return
# $help Command
client.remove_command('help')
@client.command()
async def help(ctx):
embed = discord.Embed(title="", description="", timestamp=datetime.datetime.utcnow(), color=0x792BF9)
embed.set_author(name="Available Commands", icon_url="https://pbs.twimg.com/profile_images/1404854187721203715/zZp1s7c3_400x400.jpg")
embed.add_field(name="Bridge Node Status", value="`$status <bridge_node_id>`", inline=False)
await ctx.send(ctx.author.mention)
await ctx.send(embed=embed)
# $status Command
@client.command()
async def status(ctx, arg1, *argv):
response = requests.get('https://leaderboard.celestia.tools/api/v1/nodes/'+arg1+'')
json = response.json()
node_id = json['node_id']
uptime = str(round(json['uptime'], 2)) + '%'
head = json['head']
network_height = json['network_height']
total_synced_headers = json['total_synced_headers']
start_time = json['start_time']
last_restart_time = json['last_restart_time']
# Node Uptime
node_runtime_counter_in_seconds = json['node_runtime_counter_in_seconds']
node_uptime = datetime.timedelta(seconds = node_runtime_counter_in_seconds)
embed = discord.Embed(title="", description="", timestamp=datetime.datetime.utcnow(), color=0x792BF9)
embed.set_author(name="ITN Bridge Node Status", icon_url="https://pbs.twimg.com/profile_images/1404854187721203715/zZp1s7c3_400x400.jpg")
embed.add_field(name="Bridge Node ID:", value=node_id, inline=False)
embed.add_field(name="Uptime:", value=uptime, inline=True)
embed.add_field(name="Head:", value=head, inline=True)
embed.add_field(name="Network Height:", value=network_height, inline=True)
embed.add_field(name="Total Synced Headers:", value=total_synced_headers, inline=False)
embed.add_field(name="Uptime Since Last Restart:", value=node_uptime, inline=True)
embed.add_field(name="Last Restart:", value=last_restart_time, inline=True)
embed.add_field(name="Bridge Node Start Time:", value=start_time, inline=False)
embed.set_footer(text="Made by 0xFury", icon_url="https://pbs.twimg.com/profile_images/1618486399107309568/pxn2clZj_400x400.jpg")
await ctx.send(ctx.author.mention)
await ctx.send(embed=embed)
client.run(token)