mirror of
				https://gitlab.com/gpvkt/twitchtts.git
				synced 2025-10-31 00:57:35 +01:00 
			
		
		
		
	Code cleanup
This commit is contained in:
		
							parent
							
								
									4d8e07f393
								
							
						
					
					
						commit
						c759c78f7f
					
				
					 1 changed files with 239 additions and 165 deletions
				
			
		
							
								
								
									
										404
									
								
								tts.py
									
										
									
									
									
								
							
							
						
						
									
										404
									
								
								tts.py
									
										
									
									
									
								
							|  | @ -51,17 +51,25 @@ class IRC: | ||||||
| 
 | 
 | ||||||
|     def __init__(self): |     def __init__(self): | ||||||
|         self.irc = socket.socket(socket.AF_INET, socket.SOCK_STREAM) |         self.irc = socket.socket(socket.AF_INET, socket.SOCK_STREAM) | ||||||
|         self.tts_denied = [] |         self.tts = { | ||||||
|         self.tts_allowed = [] |             "status": CONF['TTS_STARTENABLED'], | ||||||
|         self.tts_status = CONF['TTS_STARTENABLED'] |             "whitelist": [], | ||||||
|         self.quickvote_status = False |             "blacklist": [] | ||||||
|         self.pick_status = False |         } | ||||||
|         self.votemsg = False |         self.quickvote = { | ||||||
|         self.poll = {} |             "status": False, | ||||||
|         self.pollcount = 0 |             "message": False | ||||||
|         self.pickme = [] |         } | ||||||
|         self.picknumber = 1 |         self.poll = { | ||||||
|         self.pickcount = 0 |             "count": 0, | ||||||
|  |             "data": {} | ||||||
|  |         } | ||||||
|  |         self.pick = { | ||||||
|  |             "status": False, | ||||||
|  |             "number": 1, | ||||||
|  |             "count": 0, | ||||||
|  |             "pickme": [] | ||||||
|  |         } | ||||||
| 
 | 
 | ||||||
|         if 'WHITELIST_USER' in CONF: |         if 'WHITELIST_USER' in CONF: | ||||||
|             self.tts_allowed = CONF['WHITELIST_USER'] |             self.tts_allowed = CONF['WHITELIST_USER'] | ||||||
|  | @ -77,6 +85,7 @@ class IRC: | ||||||
|         """ |         """ | ||||||
|         logging.info("Connecting to: %s", server) |         logging.info("Connecting to: %s", server) | ||||||
|         logging.info('Waiting...') |         logging.info('Waiting...') | ||||||
|  | 
 | ||||||
|         try: |         try: | ||||||
|             self.irc.connect((server, port)) |             self.irc.connect((server, port)) | ||||||
|         except ConnectionResetError: |         except ConnectionResetError: | ||||||
|  | @ -166,51 +175,8 @@ class IRC: | ||||||
|         tags = self.get_tags(resp) |         tags = self.get_tags(resp) | ||||||
|         message = self.get_message(resp) |         message = self.get_message(resp) | ||||||
| 
 | 
 | ||||||
|         user = tags['user'] |  | ||||||
|         msg = message['message'] |  | ||||||
|         msglen = message['length'] |  | ||||||
| 
 |  | ||||||
|         logging.debug('Msg: %s', msg) |  | ||||||
|         logging.debug('Msg length: %s', msglen) |  | ||||||
|         logging.debug('Deny List:') |  | ||||||
|         logging.debug(self.tts_denied) |  | ||||||
| 
 |  | ||||||
|         self.priviledged_commands(message, tags) |         self.priviledged_commands(message, tags) | ||||||
| 
 |         self.unpriviledged_commands(message, tags) | ||||||
|         if msg.startswith('#pickme') and self.pick_status is True: |  | ||||||
|             logging.info('Pickme detected') |  | ||||||
|             self.pickcount = self.pickcount + 1 |  | ||||||
|             self.pickme.append(user) |  | ||||||
|             logging.debug("pickme %s added", user) |  | ||||||
|             return |  | ||||||
| 
 |  | ||||||
|         if msg.startswith('#') and self.quickvote_status is True: |  | ||||||
|             logging.info('Quickvote: Cast detected') |  | ||||||
|             self.pollcount += 1 |  | ||||||
|             self.poll[user] = msg.lower() |  | ||||||
|             logging.debug("poll: %s", self.poll) |  | ||||||
|             return |  | ||||||
| 
 |  | ||||||
|         if msg.startswith('!tts'): |  | ||||||
|             logging.info('!tts command detected') |  | ||||||
|             self.Commands.tts(self, message, tags) |  | ||||||
|             return |  | ||||||
| 
 |  | ||||||
|         if msg.startswith('!wiki') and CONF['FEATURE']['WIKI']: |  | ||||||
|             logging.debug("!wiki command detected") |  | ||||||
|             self.Commands.wiki(self, tags, msg) |  | ||||||
|             return |  | ||||||
| 
 |  | ||||||
|         if CONF['FEATURE']['QUOTE']: |  | ||||||
|             if msg.startswith('!addquote'): |  | ||||||
|                 logging.debug("!addquote command detected") |  | ||||||
|                 self.Commands.addquote(self, tags, msg) |  | ||||||
|                 return |  | ||||||
| 
 |  | ||||||
|             if msg.startswith('!smartquote') or msg.startswith('!sq'): |  | ||||||
|                 logging.debug("!smartquote command detected") |  | ||||||
|                 self.Commands.quote(self, tags, msg) |  | ||||||
|                 return |  | ||||||
| 
 | 
 | ||||||
|     def get_tags(self, resp): |     def get_tags(self, resp): | ||||||
|         """ Strip tags from response |         """ Strip tags from response | ||||||
|  | @ -256,6 +222,51 @@ class IRC: | ||||||
| 
 | 
 | ||||||
|         return msg |         return msg | ||||||
| 
 | 
 | ||||||
|  |     def unpriviledged_commands(self, message, tags): | ||||||
|  |         """ Process unpriviledged commands | ||||||
|  | 
 | ||||||
|  |             :param dict message: Message | ||||||
|  |             :param dict tags: Message metadata (tags) | ||||||
|  |         """ | ||||||
|  | 
 | ||||||
|  |         msg = message['message'] | ||||||
|  |         user = tags['user'] | ||||||
|  | 
 | ||||||
|  |         if msg.startswith('#pickme') and self.pick['status'] is True: | ||||||
|  |             logging.info('Pickme detected') | ||||||
|  |             self.pick['count'] = self.pick['count'] + 1 | ||||||
|  |             self.pick['pickme'].append(user) | ||||||
|  |             logging.debug("pickme %s added", user) | ||||||
|  |             return | ||||||
|  | 
 | ||||||
|  |         if msg.startswith('#') and self.quickvote['status'] is True: | ||||||
|  |             logging.info('Quickvote: Cast detected') | ||||||
|  |             self.poll['count'] += 1 | ||||||
|  |             self.poll['data'][user] = msg.lower() | ||||||
|  |             logging.debug("poll: %s", self.poll) | ||||||
|  |             return | ||||||
|  | 
 | ||||||
|  |         if msg.startswith('!tts'): | ||||||
|  |             logging.info('!tts command detected') | ||||||
|  |             self.Commands.tts(self, message, tags) | ||||||
|  |             return | ||||||
|  | 
 | ||||||
|  |         if msg.startswith('!wiki') and CONF['FEATURE']['WIKI']: | ||||||
|  |             logging.debug("!wiki command detected") | ||||||
|  |             self.Commands.wiki(self, tags, msg) | ||||||
|  |             return | ||||||
|  | 
 | ||||||
|  |         if CONF['FEATURE']['QUOTE']: | ||||||
|  |             if msg.startswith('!addquote'): | ||||||
|  |                 logging.debug("!addquote command detected") | ||||||
|  |                 self.Commands.addquote(self, tags, msg) | ||||||
|  |                 return | ||||||
|  | 
 | ||||||
|  |             if msg.startswith('!smartquote') or msg.startswith('!sq'): | ||||||
|  |                 logging.debug("!smartquote command detected") | ||||||
|  |                 self.Commands.quote(self, tags, msg) | ||||||
|  |                 return | ||||||
|  | 
 | ||||||
|     def priviledged_commands(self, message, tags): |     def priviledged_commands(self, message, tags): | ||||||
|         """ Process priviledged commands |         """ Process priviledged commands | ||||||
| 
 | 
 | ||||||
|  | @ -270,11 +281,41 @@ class IRC: | ||||||
|         if 'broadcaster' in badges or 'moderator' in badges: |         if 'broadcaster' in badges or 'moderator' in badges: | ||||||
|             if msg.startswith('!ping') and CONF['FEATURE']['PING']: |             if msg.startswith('!ping') and CONF['FEATURE']['PING']: | ||||||
|                 logging.debug("Ping check received.") |                 logging.debug("Ping check received.") | ||||||
|                 self.sendmsg(CONF['IRC_CHANNEL'], "@"+str(user), "Pong!") |                 self.sendmsg( | ||||||
|  |                     CONF['IRC_CHANNEL'], | ||||||
|  |                     "@"+str(user), | ||||||
|  |                     "Pong!" | ||||||
|  |                 ) | ||||||
| 
 | 
 | ||||||
|             elif msg.startswith('!version') and CONF['FEATURE']['VERSION']: |             elif msg.startswith('!version') and CONF['FEATURE']['VERSION']: | ||||||
|                 logging.debug("!version command detected") |                 logging.debug("!version command detected") | ||||||
|                 self.sendmsg(CONF['IRC_CHANNEL'], "@"+str(user), VERSION) |                 self.sendmsg( | ||||||
|  |                     CONF['IRC_CHANNEL'], | ||||||
|  |                     "@"+str(user), | ||||||
|  |                     VERSION | ||||||
|  |                 ) | ||||||
|  | 
 | ||||||
|  |             elif msg.startswith('!toff'): | ||||||
|  |                 logging.info('TTS is now turned off') | ||||||
|  |                 msg_queue.clear() | ||||||
|  |                 MSG_QUEUE_RAW.clear() | ||||||
|  |                 self.tts['status'] = False | ||||||
|  |                 self.sendmsg( | ||||||
|  |                     CONF['IRC_CHANNEL'], | ||||||
|  |                     "@"+str(user), | ||||||
|  |                     CONF['MESSAGE']['TOFF'] | ||||||
|  |                 ) | ||||||
|  | 
 | ||||||
|  |             elif msg.startswith('!ton'): | ||||||
|  |                 logging.info('TTS is now turned on') | ||||||
|  |                 msg_queue.clear() | ||||||
|  |                 MSG_QUEUE_RAW.clear() | ||||||
|  |                 self.tts['status'] = True | ||||||
|  |                 self.sendmsg( | ||||||
|  |                     CONF['IRC_CHANNEL'], | ||||||
|  |                     "@"+str(user), | ||||||
|  |                     CONF['MESSAGE']['TON'] | ||||||
|  |                 ) | ||||||
| 
 | 
 | ||||||
|             elif msg.startswith('!pick') and CONF['FEATURE']['PICK']: |             elif msg.startswith('!pick') and CONF['FEATURE']['PICK']: | ||||||
|                 logging.debug("!pick command detected") |                 logging.debug("!pick command detected") | ||||||
|  | @ -304,20 +345,6 @@ class IRC: | ||||||
|                 logging.info('!delay command detected') |                 logging.info('!delay command detected') | ||||||
|                 self.Commands.delay(self, msg) |                 self.Commands.delay(self, msg) | ||||||
| 
 | 
 | ||||||
|             elif msg.startswith('!toff'): |  | ||||||
|                 logging.info('TTS is now turned off') |  | ||||||
|                 msg_queue.clear() |  | ||||||
|                 MSG_QUEUE_RAW.clear() |  | ||||||
|                 self.tts_status = False |  | ||||||
|                 self.sendmsg(CONF['IRC_CHANNEL'], "@"+str(user), CONF['MESSAGE']['TOFF']) |  | ||||||
| 
 |  | ||||||
|             elif msg.startswith('!ton'): |  | ||||||
|                 logging.info('TTS is now turned on') |  | ||||||
|                 msg_queue.clear() |  | ||||||
|                 MSG_QUEUE_RAW.clear() |  | ||||||
|                 self.tts_status = True |  | ||||||
|                 self.sendmsg(CONF['IRC_CHANNEL'], "@"+str(user), CONF['MESSAGE']['TON']) |  | ||||||
| 
 |  | ||||||
|     def check_subonly(self, tags): |     def check_subonly(self, tags): | ||||||
|         """ Check if subonly mode is enabled and sender is sub |         """ Check if subonly mode is enabled and sender is sub | ||||||
| 
 | 
 | ||||||
|  | @ -338,7 +365,11 @@ class IRC: | ||||||
|             return False |             return False | ||||||
| 
 | 
 | ||||||
|         logging.debug('TTS is sub-only') |         logging.debug('TTS is sub-only') | ||||||
|         self.sendmsg(CONF['IRC_CHANNEL'], "@"+str(user), CONF['MESSAGE']['SUBONLY']) |         self.sendmsg( | ||||||
|  |             CONF['IRC_CHANNEL'], | ||||||
|  |             "@"+str(user), | ||||||
|  |             CONF['MESSAGE']['SUBONLY'] | ||||||
|  |         ) | ||||||
|         return True |         return True | ||||||
| 
 | 
 | ||||||
|     def check_modonly(self, tags): |     def check_modonly(self, tags): | ||||||
|  | @ -360,7 +391,11 @@ class IRC: | ||||||
|             return False |             return False | ||||||
| 
 | 
 | ||||||
|         logging.debug('TTS is mod-only') |         logging.debug('TTS is mod-only') | ||||||
|         self.sendmsg(CONF['IRC_CHANNEL'], "@"+str(user), CONF['MESSAGE']['MODONLY']) |         self.sendmsg( | ||||||
|  |             CONF['IRC_CHANNEL'], | ||||||
|  |             "@"+str(user), | ||||||
|  |             CONF['MESSAGE']['MODONLY'] | ||||||
|  |         ) | ||||||
|         return True |         return True | ||||||
| 
 | 
 | ||||||
|     def check_tts_disabled(self, user): |     def check_tts_disabled(self, user): | ||||||
|  | @ -370,8 +405,12 @@ class IRC: | ||||||
| 
 | 
 | ||||||
|             :return bool: |             :return bool: | ||||||
|         """ |         """ | ||||||
|         if not self.tts_status: |         if not self.tts['status']: | ||||||
|             self.sendmsg(CONF['IRC_CHANNEL'], "@"+str(user), CONF['MESSAGE']['DISABLED']) |             self.sendmsg( | ||||||
|  |                 CONF['IRC_CHANNEL'], | ||||||
|  |                 "@"+str(user), | ||||||
|  |                 CONF['MESSAGE']['DISABLED'] | ||||||
|  |             ) | ||||||
|             return True |             return True | ||||||
| 
 | 
 | ||||||
|         logging.debug('TTS is enabled') |         logging.debug('TTS is enabled') | ||||||
|  | @ -387,7 +426,11 @@ class IRC: | ||||||
|         """ |         """ | ||||||
| 
 | 
 | ||||||
|         if message['length'] > CONF['IRC_TTS_LEN']: |         if message['length'] > CONF['IRC_TTS_LEN']: | ||||||
|             self.sendmsg(CONF['IRC_CHANNEL'], "@"+str(user), CONF['MESSAGE']['TOO_LONG']) |             self.sendmsg( | ||||||
|  |                 CONF['IRC_CHANNEL'], | ||||||
|  |                 "@"+str(user), | ||||||
|  |                 CONF['MESSAGE']['TOO_LONG'] | ||||||
|  |             ) | ||||||
|             return True |             return True | ||||||
| 
 | 
 | ||||||
|         logging.debug('Check length: Message is ok') |         logging.debug('Check length: Message is ok') | ||||||
|  | @ -403,9 +446,13 @@ class IRC: | ||||||
|             :return bool: |             :return bool: | ||||||
|         """ |         """ | ||||||
| 
 | 
 | ||||||
|         if user in self.tts_denied: |         if user in self.tts['denied']: | ||||||
|             logging.info("%s is not allowed to use TTS", user) |             logging.info("%s is not allowed to use TTS", user) | ||||||
|             self.sendmsg(CONF['IRC_CHANNEL'], "@"+str(user), CONF['MESSAGE']['DENIED']) |             self.sendmsg( | ||||||
|  |                 CONF['IRC_CHANNEL'], | ||||||
|  |                 "@"+str(user), | ||||||
|  |                 CONF['MESSAGE']['DENIED'] | ||||||
|  |             ) | ||||||
|             return True |             return True | ||||||
| 
 | 
 | ||||||
|         logging.debug("%s is allowed to use TTS", user) |         logging.debug("%s is allowed to use TTS", user) | ||||||
|  | @ -426,7 +473,8 @@ class IRC: | ||||||
|                 logging.debug("tts_allowed: %s", self.tts_allowed) |                 logging.debug("tts_allowed: %s", self.tts_allowed) | ||||||
|                 self.sendmsg( |                 self.sendmsg( | ||||||
|                     CONF['IRC_CHANNEL'], |                     CONF['IRC_CHANNEL'], | ||||||
|                     "@"+str(user), CONF['MESSAGE']['WHITELISTONLY'] |                     "@"+str(user), | ||||||
|  |                     CONF['MESSAGE']['WHITELISTONLY'] | ||||||
|                 ) |                 ) | ||||||
|                 return False |                 return False | ||||||
|             return True |             return True | ||||||
|  | @ -584,8 +632,8 @@ class IRC: | ||||||
|                     } |                     } | ||||||
|                     req = requests.get(url=api_endpoint, headers=headers) |                     req = requests.get(url=api_endpoint, headers=headers) | ||||||
|                     data = req.json() |                     data = req.json() | ||||||
|                     game = data['data'][0]['game_name'] |  | ||||||
| 
 | 
 | ||||||
|  |                     game = data['data'][0]['game_name'] | ||||||
|                     quote = f"#{nol}: \"{quote[1]}\" -{username}/{game} ({date})\n" |                     quote = f"#{nol}: \"{quote[1]}\" -{username}/{game} ({date})\n" | ||||||
|                 except Exception: |                 except Exception: | ||||||
|                     logging.warning('Could not get metadata for quote') |                     logging.warning('Could not get metadata for quote') | ||||||
|  | @ -595,12 +643,11 @@ class IRC: | ||||||
|                 with open("quotes.txt", "ab") as file: |                 with open("quotes.txt", "ab") as file: | ||||||
|                     file.write(quote.encode('utf-8')) |                     file.write(quote.encode('utf-8')) | ||||||
| 
 | 
 | ||||||
|                 msg = f"{CONF['MESSAGE']['QUOTE_ADDED_PREFIX']} \ |                 message = f"{CONF['MESSAGE']['QUOTE_ADDED_PREFIX']} \ | ||||||
|                         #{nol} {CONF['MESSAGE']['QUOTE_ADDED_SUFFIX']}" |                         #{nol} {CONF['MESSAGE']['QUOTE_ADDED_SUFFIX']}" | ||||||
| 
 |  | ||||||
|                 raw_msg = { |                 raw_msg = { | ||||||
|                     "TTS": True, |                     "TTS": True, | ||||||
|                     "msg": msg, |                     "msg": message, | ||||||
|                     "badges": True, |                     "badges": True, | ||||||
|                     "subscriber": True, |                     "subscriber": True, | ||||||
|                     "msgid": True, |                     "msgid": True, | ||||||
|  | @ -610,7 +657,7 @@ class IRC: | ||||||
|                     "timestamp": str(time.time_ns()) |                     "timestamp": str(time.time_ns()) | ||||||
|                 } |                 } | ||||||
|                 msg_queue[raw_msg['timestamp']] = [raw_msg['user'], raw_msg['msg']] |                 msg_queue[raw_msg['timestamp']] = [raw_msg['user'], raw_msg['msg']] | ||||||
|                 IRC.sendmsg(self, CONF['IRC_CHANNEL'], "@"+str(user), msg) |                 IRC.sendmsg(self, CONF['IRC_CHANNEL'], "@"+str(user), message) | ||||||
| 
 | 
 | ||||||
|         def wiki(self, tags, msg): |         def wiki(self, tags, msg): | ||||||
|             """ !wiki command |             """ !wiki command | ||||||
|  | @ -630,11 +677,10 @@ class IRC: | ||||||
|                 IRC.sendmsg(self, CONF['IRC_CHANNEL'], "@"+str(user), wikiresult) |                 IRC.sendmsg(self, CONF['IRC_CHANNEL'], "@"+str(user), wikiresult) | ||||||
|                 IRC.sendmsg(self, CONF['IRC_CHANNEL'], "@"+str(user), wikipedia.page(msg).url) |                 IRC.sendmsg(self, CONF['IRC_CHANNEL'], "@"+str(user), wikipedia.page(msg).url) | ||||||
| 
 | 
 | ||||||
|                 wikiresult = wikiresult.replace('==', '') |                 message = wikiresult.replace('==', '') | ||||||
| 
 |  | ||||||
|                 raw_msg = { |                 raw_msg = { | ||||||
|                     "TTS": True, |                     "TTS": True, | ||||||
|                     "msg": wikiresult, |                     "msg": message, | ||||||
|                     "badges": True, |                     "badges": True, | ||||||
|                     "subscriber": True, |                     "subscriber": True, | ||||||
|                     "msgid": True, |                     "msgid": True, | ||||||
|  | @ -734,11 +780,10 @@ class IRC: | ||||||
|                 logging.debug("Quote: %s", quote) |                 logging.debug("Quote: %s", quote) | ||||||
|                 IRC.sendmsg(self, CONF['IRC_CHANNEL'], "", quote) |                 IRC.sendmsg(self, CONF['IRC_CHANNEL'], "", quote) | ||||||
| 
 | 
 | ||||||
|                 quote = quote.rsplit('(', 1)[0] |                 message = quote.rsplit('(', 1)[0] | ||||||
| 
 |  | ||||||
|                 raw_msg = { |                 raw_msg = { | ||||||
|                     "TTS": True, |                     "TTS": True, | ||||||
|                     "msg": quote, |                     "msg": message, | ||||||
|                     "badges": True, |                     "badges": True, | ||||||
|                     "subscriber": True, |                     "subscriber": True, | ||||||
|                     "msgid": True, |                     "msgid": True, | ||||||
|  | @ -830,10 +875,11 @@ class IRC: | ||||||
|                     logging.error("There was an error during picking.") |                     logging.error("There was an error during picking.") | ||||||
|                     joined_picks = False |                     joined_picks = False | ||||||
| 
 | 
 | ||||||
|  |                 message = f"{CONF['MESSAGE']['PICKRESULT']} {joined_picks}" | ||||||
|                 if joined_picks: |                 if joined_picks: | ||||||
|                     raw_msg = { |                     raw_msg = { | ||||||
|                         "TTS": True, |                         "TTS": True, | ||||||
|                         "msg": CONF['MESSAGE']['PICKRESULT'] +" "+ str(joined_picks), |                         "msg": message, | ||||||
|                         "badges": True, |                         "badges": True, | ||||||
|                         "subscriber": True, |                         "subscriber": True, | ||||||
|                         "msgid": True, |                         "msgid": True, | ||||||
|  | @ -924,9 +970,11 @@ class IRC: | ||||||
| 
 | 
 | ||||||
|                 logging.debug(count) |                 logging.debug(count) | ||||||
| 
 | 
 | ||||||
|  |                 count = str(count[0][0].replace('#','')) | ||||||
|  |                 message = f"{CONF['MESSAGE']['VOTERESULT']} {count}" | ||||||
|                 raw_msg = { |                 raw_msg = { | ||||||
|                     "TTS": True, |                     "TTS": True, | ||||||
|                     "msg": CONF['MESSAGE']['VOTERESULT'] +" "+ str(count[0][0].replace('#','')), |                     "msg": message , | ||||||
|                     "badges": True, |                     "badges": True, | ||||||
|                     "subscriber": True, |                     "subscriber": True, | ||||||
|                     "msgid": True, |                     "msgid": True, | ||||||
|  | @ -941,10 +989,11 @@ class IRC: | ||||||
|                 logging.debug('Votemsg: %s', msg) |                 logging.debug('Votemsg: %s', msg) | ||||||
| 
 | 
 | ||||||
|                 for key, value in count: |                 for key, value in count: | ||||||
|  |                     message = f"{key} ({value}) {CONF['MESSAGE']['VOTES']})" | ||||||
|                     IRC.sendmsg( |                     IRC.sendmsg( | ||||||
|                         self, |                         self, | ||||||
|                         CONF['IRC_CHANNEL'], "*", |                         CONF['IRC_CHANNEL'], "*", | ||||||
|                         str(key)+" ("+str(value)+ " "+ CONF['MESSAGE']['VOTES'] + ")" |                         message | ||||||
|                     ) |                     ) | ||||||
| 
 | 
 | ||||||
|                 self.quickvote_status = False |                 self.quickvote_status = False | ||||||
|  | @ -979,7 +1028,7 @@ class IRC: | ||||||
|             randomfile = msg.replace('!random', '').strip().lower() |             randomfile = msg.replace('!random', '').strip().lower() | ||||||
| 
 | 
 | ||||||
|             if randomfile: |             if randomfile: | ||||||
|                 randomfile = "random_"+str(os.path.basename(randomfile))+".txt" |                 randomfile = f"random_{os.path.basename(randomfile)}.txt" | ||||||
|             else: |             else: | ||||||
|                 randomfile = "random.txt" |                 randomfile = "random.txt" | ||||||
| 
 | 
 | ||||||
|  | @ -1223,6 +1272,68 @@ def http_serve_forever(httpd): | ||||||
|     """ httpd loop """ |     """ httpd loop """ | ||||||
|     httpd.serve_forever() |     httpd.serve_forever() | ||||||
| 
 | 
 | ||||||
|  | def send_tts_queue(): | ||||||
|  |     """ Send messages to TTS """ | ||||||
|  | 
 | ||||||
|  |     for raw_msg in MSG_QUEUE_RAW: | ||||||
|  |         logging.debug('Raw msg: %s', MSG_QUEUE_RAW) | ||||||
|  | 
 | ||||||
|  |         now = datetime.datetime.now() | ||||||
|  |         if now - raw_msg['queuetime'] > datetime.timedelta(seconds=CONF['IRC_CLEARMSG_TIMEOUT']): | ||||||
|  |             logging.debug('clearmsg_timeout reached') | ||||||
|  |             if raw_msg['timestamp'] not in msg_queue: | ||||||
|  |                 logging.info('Sending TTS message') | ||||||
|  |                 msg_queue[raw_msg['timestamp']] = [raw_msg['user'], raw_msg['msg']] | ||||||
|  |                 logging.debug("msg_queue: %s", msg_queue) | ||||||
|  |             else: | ||||||
|  |                 logging.debug('Msg is already in queue') | ||||||
|  | 
 | ||||||
|  | def get_url(path=False): | ||||||
|  |     """ Generate a valid URL from config values """ | ||||||
|  | 
 | ||||||
|  |     if CONF['HTTP_BIND'] == "0.0.0.0": | ||||||
|  |         url = "localhost" | ||||||
|  |     else: | ||||||
|  |         url = CONF['HTTP_BIND'] | ||||||
|  | 
 | ||||||
|  |     url = f"http://{url}:{CONF['HTTP_PORT']}/" | ||||||
|  | 
 | ||||||
|  |     if path: | ||||||
|  |         url = f"{url}{path}" | ||||||
|  | 
 | ||||||
|  |     return url | ||||||
|  | 
 | ||||||
|  | def check_oauth_token(): | ||||||
|  |     """ Check for valid authentication via Twitch API """ | ||||||
|  | 
 | ||||||
|  |     global CONF | ||||||
|  |     logging.debug('Checking OAuth Token') | ||||||
|  | 
 | ||||||
|  |     try: | ||||||
|  |         url = 'https://id.twitch.tv/oauth2/validate' | ||||||
|  |         oauth = CONF['IRC_OAUTH_TOKEN'].replace('oauth:','') | ||||||
|  |         oauth = f"OAuth {oauth}" | ||||||
|  |         request = urllib.request.Request(url) | ||||||
|  |         request.add_header('Authorization', oauth) | ||||||
|  |         urllib.request.urlopen(request) | ||||||
|  |     except HTTPError: | ||||||
|  |         logging.fatal('Twitch rejected your OAuth Token. Please check and generate a new one.') | ||||||
|  |         logging.info('Please open http://%s:%s/token to generate your OAuth-Token.', | ||||||
|  |                       CONF['HTTP_BIND'], | ||||||
|  |                       CONF['HTTP_PORT'] | ||||||
|  |                     ) | ||||||
|  | 
 | ||||||
|  |         url = get_url("token") | ||||||
|  |         webbrowser.open_new_tab(url) | ||||||
|  |         logging.info('Please complete the OAuth process and add the token into your "config.yml" \ | ||||||
|  |             within the next 5 minutes.') | ||||||
|  |         time.sleep(300) | ||||||
|  |         CONF = load_config() | ||||||
|  |         check_oauth_token() | ||||||
|  | 
 | ||||||
|  |     logging.info('OAuth Token is valid') | ||||||
|  |     return CONF | ||||||
|  | 
 | ||||||
| def load_config(): | def load_config(): | ||||||
|     """ Loading config variables """ |     """ Loading config variables """ | ||||||
| 
 | 
 | ||||||
|  | @ -1358,13 +1469,27 @@ def load_config(): | ||||||
|             ) |             ) | ||||||
| 
 | 
 | ||||||
|             CONF['FEATURE'] = {} |             CONF['FEATURE'] = {} | ||||||
|             CONF['FEATURE']['WIKI'] = cfg.get('features', {}).get('wiki', True) |             CONF['FEATURE']['WIKI'] = cfg.get('features', {}).get( | ||||||
|             CONF['FEATURE']['PICK'] = cfg.get('features', {}).get('pick', True) |                 'wiki', True | ||||||
|             CONF['FEATURE']['VOTE'] = cfg.get('features', {}).get('vote', True) |             ) | ||||||
|             CONF['FEATURE']['QUOTE'] = cfg.get('features', {}).get('quote', True) |             CONF['FEATURE']['PICK'] = cfg.get('features', {}).get( | ||||||
|             CONF['FEATURE']['RANDOM'] = cfg.get('features', {}).get('random', True) |                 'pick', True | ||||||
|             CONF['FEATURE']['VERSION'] = cfg.get('features', {}).get('version', True) |             ) | ||||||
|             CONF['FEATURE']['PING'] = cfg.get('features', {}).get('ping', True) |             CONF['FEATURE']['VOTE'] = cfg.get('features', {}).get( | ||||||
|  |                 'vote', True | ||||||
|  |             ) | ||||||
|  |             CONF['FEATURE']['QUOTE'] = cfg.get('features', {}).get( | ||||||
|  |                 'quote', True | ||||||
|  |             ) | ||||||
|  |             CONF['FEATURE']['RANDOM'] = cfg.get('features', {}).get( | ||||||
|  |                 'random', True | ||||||
|  |             ) | ||||||
|  |             CONF['FEATURE']['VERSION'] = cfg.get('features', {}).get( | ||||||
|  |                 'version', True | ||||||
|  |             ) | ||||||
|  |             CONF['FEATURE']['PING'] = cfg.get('features', {}).get( | ||||||
|  |                 'ping', True | ||||||
|  |             ) | ||||||
| 
 | 
 | ||||||
|             CONF['USERMAP'] = cfg.get('usermapping', []) |             CONF['USERMAP'] = cfg.get('usermapping', []) | ||||||
| 
 | 
 | ||||||
|  | @ -1394,65 +1519,6 @@ def load_config(): | ||||||
| 
 | 
 | ||||||
|     return CONF |     return CONF | ||||||
| 
 | 
 | ||||||
| def send_tts_queue(): |  | ||||||
|     """ Send messages to TTS """ |  | ||||||
| 
 |  | ||||||
|     for raw_msg in MSG_QUEUE_RAW: |  | ||||||
|         logging.debug('Raw msg: %s', MSG_QUEUE_RAW) |  | ||||||
| 
 |  | ||||||
|         now = datetime.datetime.now() |  | ||||||
|         if now - raw_msg['queuetime'] > datetime.timedelta(seconds=CONF['IRC_CLEARMSG_TIMEOUT']): |  | ||||||
|             logging.debug('clearmsg_timeout reached') |  | ||||||
|             if raw_msg['timestamp'] not in msg_queue: |  | ||||||
|                 logging.info('Sending TTS message') |  | ||||||
|                 msg_queue[raw_msg['timestamp']] = [raw_msg['user'], raw_msg['msg']] |  | ||||||
|                 logging.debug("msg_queue: %s", msg_queue) |  | ||||||
|             else: |  | ||||||
|                 logging.debug('Msg is already in queue') |  | ||||||
| 
 |  | ||||||
| def get_url(path=False): |  | ||||||
|     """ Generate a valid URL from config values """ |  | ||||||
| 
 |  | ||||||
|     if CONF['HTTP_BIND'] == "0.0.0.0": |  | ||||||
|         url = "localhost" |  | ||||||
|     else: |  | ||||||
|         url = CONF['HTTP_BIND'] |  | ||||||
| 
 |  | ||||||
|     url = "http://"+str(url)+":"+str(CONF['HTTP_PORT'])+"/" |  | ||||||
| 
 |  | ||||||
|     if path: |  | ||||||
|         url = url+str(path) |  | ||||||
| 
 |  | ||||||
|     return url |  | ||||||
| 
 |  | ||||||
| def check_oauth_token(): |  | ||||||
|     """ Check for valid authentication via Twitch API """ |  | ||||||
| 
 |  | ||||||
|     global CONF |  | ||||||
|     logging.debug('Checking OAuth Token') |  | ||||||
| 
 |  | ||||||
|     try: |  | ||||||
|         url = 'https://id.twitch.tv/oauth2/validate' |  | ||||||
|         oauth = "OAuth "+str(CONF['IRC_OAUTH_TOKEN'].replace('oauth:','')) |  | ||||||
|         request = urllib.request.Request(url) |  | ||||||
|         request.add_header('Authorization', oauth) |  | ||||||
|         urllib.request.urlopen(request) |  | ||||||
|     except HTTPError: |  | ||||||
|         logging.fatal('Twitch rejected your OAuth Token. Please check and generate a new one.') |  | ||||||
|         logging.info('Please open http://%s:%s/token to generate your OAuth-Token.', |  | ||||||
|                       CONF['HTTP_BIND'], CONF['HTTP_PORT']) |  | ||||||
| 
 |  | ||||||
|         url = get_url("token") |  | ||||||
|         webbrowser.open_new_tab(url) |  | ||||||
|         logging.info('Please complete the OAuth process and add the token into your "config.yml" \ |  | ||||||
|             within the next 5 minutes.') |  | ||||||
|         time.sleep(300) |  | ||||||
|         CONF = load_config() |  | ||||||
|         check_oauth_token() |  | ||||||
| 
 |  | ||||||
|     logging.info('OAuth Token is valid') |  | ||||||
|     return CONF |  | ||||||
| 
 |  | ||||||
| def main(): | def main(): | ||||||
|     """ Main loop """ |     """ Main loop """ | ||||||
| 
 | 
 | ||||||
|  | @ -1465,7 +1531,11 @@ def main(): | ||||||
|         sys.tracebacklimit = 5 |         sys.tracebacklimit = 5 | ||||||
| 
 | 
 | ||||||
|     logging.info("Starting Webserver") |     logging.info("Starting Webserver") | ||||||
|     httpd = ThreadingSimpleServer((CONF['HTTP_BIND'], CONF['HTTP_PORT']), HTTPserv) |     httpd = ThreadingSimpleServer( | ||||||
|  |         (CONF['HTTP_BIND'], | ||||||
|  |         CONF['HTTP_PORT']), | ||||||
|  |         HTTPserv | ||||||
|  |     ) | ||||||
| 
 | 
 | ||||||
|     http_thread = Thread(target=http_serve_forever, daemon=True, args=(httpd, )) |     http_thread = Thread(target=http_serve_forever, daemon=True, args=(httpd, )) | ||||||
|     http_thread.start() |     http_thread.start() | ||||||
|  | @ -1481,7 +1551,11 @@ def main(): | ||||||
|         CONF['IRC_USERNAME'], |         CONF['IRC_USERNAME'], | ||||||
|         CONF['IRC_OAUTH_TOKEN'] |         CONF['IRC_OAUTH_TOKEN'] | ||||||
|     ) |     ) | ||||||
|     irc.sendmsg(CONF['IRC_CHANNEL'], 'MrDestructoid', CONF['MESSAGE']['READY']) |     irc.sendmsg( | ||||||
|  |         CONF['IRC_CHANNEL'], | ||||||
|  |         'MrDestructoid', | ||||||
|  |         CONF['MESSAGE']['READY'] | ||||||
|  |     ) | ||||||
| 
 | 
 | ||||||
|     logging.info('Connected and joined') |     logging.info('Connected and joined') | ||||||
|     url = get_url() |     url = get_url() | ||||||
|  | @ -1500,15 +1574,15 @@ def main(): | ||||||
|                 CONF = load_config() |                 CONF = load_config() | ||||||
|                 lastreload = datetime.datetime.now() |                 lastreload = datetime.datetime.now() | ||||||
| 
 | 
 | ||||||
|                 if irc.quickvote_status and irc.votemsg: |                 if irc.quickvote['status'] and irc.quickvote['message']: | ||||||
|                     logging.info('Quickvote is active') |                     logging.info('Quickvote is active') | ||||||
|                     irc.sendmsg( |                     irc.sendmsg( | ||||||
|                         CONF['IRC_CHANNEL'], |                         CONF['IRC_CHANNEL'], | ||||||
|                         "@chat", |                         "@chat", | ||||||
|                         CONF['MESSAGE']['VOTESTART'] + " (" + str(irc.votemsg) + ")" |                         f"{CONF['MESSAGE']['VOTESTART']} ({irc.quickvote['message']})" | ||||||
|                     ) |                     ) | ||||||
| 
 | 
 | ||||||
|             if not irc.tts_status: |             if not irc.tts['status']: | ||||||
|                 continue |                 continue | ||||||
| 
 | 
 | ||||||
|             logging.debug('MSG_QUEUE_RAW: %s', MSG_QUEUE_RAW) |             logging.debug('MSG_QUEUE_RAW: %s', MSG_QUEUE_RAW) | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue