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