Wipe branch
This commit is contained in:
125
telegrambot.py
Normal file
125
telegrambot.py
Normal file
@@ -0,0 +1,125 @@
|
||||
from threading import Thread
|
||||
from telegram import Bot, error
|
||||
from asics import ASICs
|
||||
from time import sleep
|
||||
from mysql.connector import connect, Error
|
||||
from macros import *
|
||||
import os, json, asyncio
|
||||
|
||||
|
||||
class TGThread(Thread):
|
||||
conn = None
|
||||
bot = None
|
||||
asics = {}
|
||||
|
||||
|
||||
def __init__(self, event, event2):
|
||||
super(TGThread, self).__init__()
|
||||
self.event = event
|
||||
self.event2 = event2
|
||||
|
||||
|
||||
async def sendmsg(self, msg):
|
||||
return await self.bot.send_message(CONF.get('telegram', 'channel'), msg, 'MarkdownV2')
|
||||
|
||||
|
||||
async def check(self):
|
||||
msg = []
|
||||
|
||||
for i in self.asics.keys():
|
||||
self.asics[i]['tooff'] -= 1
|
||||
|
||||
with self.conn.cursor(dictionary=True) as c:
|
||||
c.execute(f"SELECT * FROM `laststate`")
|
||||
|
||||
for i in c.fetchall():
|
||||
if not i['mac'] in self.asics.keys():
|
||||
self.asics[i['mac']] = {}
|
||||
self.asics[i['mac']]['alert'] = 0
|
||||
|
||||
msg.append(f"🟢 {i['location']} \| ASIC \"*{ASICs(i['type']).name}*\" `{i['ip']}` online\!")
|
||||
|
||||
self.asics[i['mac']]['tooff'] = 3
|
||||
self.asics[i['mac']]['status'] = i['status']
|
||||
|
||||
if i['status'] == 'crit':
|
||||
if CONF.get('telegram', 'crit-notify') and self.asics[i['mac']]['alert'] < 2:
|
||||
msg.append(f"🔴 {i['location']} \| ASIC \"*{ASICs(i['type']).name}*\" `{i['ip']}` crit status\!")
|
||||
self.asics[i['mac']]['alert'] = 2
|
||||
elif i['status'] == 'warn':
|
||||
if CONF.get('telegram', 'warn-notify') and self.asics[i['mac']]['alert'] < 1:
|
||||
msg.append(f"🟡 {i['location']} \| ASIC \"*{ASICs(i['type']).name}*\" `{i['ip']}` warn status\!")
|
||||
self.asics[i['mac']]['alert'] = 1
|
||||
elif i['status'] == 'ok':
|
||||
if CONF.get('telegram', 'normal-notify') and self.asics[i['mac']]['alert'] != 0:
|
||||
msg.append(f"🟢 {i['location']} \| ASIC \"*{ASICs(i['type']).name}*\" `{i['ip']}` normal status\!")
|
||||
self.asics[i['mac']]['alert'] = 0
|
||||
|
||||
if self.asics[i['mac']]['tooff'] <= 0:
|
||||
msg.append(f"🔴 {i['location']} \| ASIC \"*{ASICs(i['type']).name}*\" `{i['ip']}` offline\!")
|
||||
del self.asics[i['mac']]
|
||||
|
||||
if len(msg) > 0:
|
||||
await self.sendmsg('\n'.join(msg))
|
||||
|
||||
|
||||
async def runbot(self):
|
||||
try:
|
||||
res = await self.sendmsg('🟢 *Notify server online\!*')
|
||||
INFO(f"Telegram channel ID: {res['chat']['id']}")
|
||||
|
||||
while 1:
|
||||
if self.event.is_set():
|
||||
SUCC('Telegram stopped!')
|
||||
await self.sendmsg('🟡 Updating software\! Recommend check all running instances.')
|
||||
break
|
||||
|
||||
await self.check()
|
||||
await asyncio.sleep(15)
|
||||
|
||||
except error.Forbidden as e:
|
||||
WARN(str(e))
|
||||
except error.TimedOut as e:
|
||||
WARN(str(e))
|
||||
except Exception as e:
|
||||
CRIT(str(e))
|
||||
# os._exit(1)
|
||||
|
||||
|
||||
async def stopalert(self):
|
||||
while 1:
|
||||
if self.event2.is_set():
|
||||
await self.sendmsg('🔴 *Notify server offline\!*')
|
||||
|
||||
await asyncio.sleep(0.5)
|
||||
|
||||
|
||||
async def main(self):
|
||||
await asyncio.gather(self.stopalert(), self.runbot())
|
||||
|
||||
|
||||
def run(self):
|
||||
try:
|
||||
if CONF.get('telegram', 'enable'):
|
||||
SUCC('Telegram started!')
|
||||
|
||||
self.conn = connect(
|
||||
host=CONF.get('db', 'host'),
|
||||
user=CONF.get('db', 'user'),
|
||||
password=CONF.get('db', 'password'),
|
||||
database=CONF.get('db', 'name'))
|
||||
self.conn.autocommit = True
|
||||
|
||||
self.bot = Bot(CONF.get('telegram', 'token'))
|
||||
|
||||
asyncio.run(self.main())
|
||||
else:
|
||||
while 1:
|
||||
if self.event.is_set():
|
||||
SUCC('Telegram stopped!')
|
||||
break
|
||||
|
||||
sleep(5)
|
||||
except Exception as e:
|
||||
CRIT(str(e))
|
||||
os._exit(1)
|
||||
Reference in New Issue
Block a user