mirror of
				https://gitlab.com/gpvkt/twitchtts.git
				synced 2025-11-04 11:07:34 +01:00 
			
		
		
		
	Merge branch 'dev' into 'main'
v1.2.1 See merge request gpvkt/twitchtts!3
This commit is contained in:
		
						commit
						6e565e6df6
					
				
					 2 changed files with 234 additions and 163 deletions
				
			
		
							
								
								
									
										11
									
								
								CHANGELOG.md
									
										
									
									
									
								
							
							
						
						
									
										11
									
								
								CHANGELOG.md
									
										
									
									
									
								
							| 
						 | 
					@ -2,6 +2,17 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
All notable changes to this project will be documented in this file. If there is a `Changed` section please read carefully, as this often means that you will need to adapt your `config.yml`, otherwise the bot might fail to start.
 | 
					All notable changes to this project will be documented in this file. If there is a `Changed` section please read carefully, as this often means that you will need to adapt your `config.yml`, otherwise the bot might fail to start.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## [1.2.1] - unreleased
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Changed
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * Reworked internal code structure
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Fixed
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * Publish vote info in chat when reloading config was not working when TTS was disabled
 | 
				
			||||||
 | 
					  * Casting votes was allowed for broadcaster and mods only
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## [1.2.0] - 2022-08-13
 | 
					## [1.2.0] - 2022-08-13
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### Added
 | 
					### Added
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										386
									
								
								tts.py
									
										
									
									
									
								
							
							
						
						
									
										386
									
								
								tts.py
									
										
									
									
									
								
							| 
						 | 
					@ -49,7 +49,7 @@ class IRC:
 | 
				
			||||||
        self.tts_denied = []
 | 
					        self.tts_denied = []
 | 
				
			||||||
        self.tts_allowed = []
 | 
					        self.tts_allowed = []
 | 
				
			||||||
        self.tts_status = conf['TTS_STARTENABLED']
 | 
					        self.tts_status = conf['TTS_STARTENABLED']
 | 
				
			||||||
        self.quickvote = False
 | 
					        self.quickvote_status = False
 | 
				
			||||||
        self.votemsg = False
 | 
					        self.votemsg = False
 | 
				
			||||||
        self.poll = {}
 | 
					        self.poll = {}
 | 
				
			||||||
        self.pollcount = 0
 | 
					        self.pollcount = 0
 | 
				
			||||||
| 
						 | 
					@ -177,167 +177,45 @@ class IRC:
 | 
				
			||||||
            logging.debug('Deny List:')
 | 
					            logging.debug('Deny List:')
 | 
				
			||||||
            logging.debug(self.tts_denied)
 | 
					            logging.debug(self.tts_denied)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if msg.startswith('#') and self.quickvote_status is True:
 | 
				
			||||||
 | 
					                logging.info('Quickvote: Cast detected')
 | 
				
			||||||
 | 
					                self.pollcount += 1
 | 
				
			||||||
 | 
					                self.poll[user] = msg.lower()
 | 
				
			||||||
 | 
					                logging.debug(self.poll)
 | 
				
			||||||
 | 
					                return True
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if 'broadcaster' in badges or 'moderator' in badges:
 | 
					            if 'broadcaster' in badges or 'moderator' in badges:
 | 
				
			||||||
                if msg.startswith('!dtts'):
 | 
					 | 
				
			||||||
                    logging.debug("!dtts command detected")
 | 
					 | 
				
			||||||
                    user = msg.replace('!dtts', '').strip().lower()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    if user.startswith('@'):
 | 
					 | 
				
			||||||
                        logging.debug('Removing "@" from username')
 | 
					 | 
				
			||||||
                        user = user.replace('@', '')
 | 
					 | 
				
			||||||
                    if user not in self.tts_denied:
 | 
					 | 
				
			||||||
                        logging.info("Adding %s to deny list", user)
 | 
					 | 
				
			||||||
                        self.tts_denied.append(user)
 | 
					 | 
				
			||||||
                    if user in self.tts_allowed:
 | 
					 | 
				
			||||||
                        logging.info("Removing %s from allowed list", user)
 | 
					 | 
				
			||||||
                        self.tts_allowed.remove(user)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    return True
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                if msg.startswith('!ping'):
 | 
					                if msg.startswith('!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!")
 | 
				
			||||||
 | 
					                    return True
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                if msg.startswith('!dtts'):
 | 
				
			||||||
 | 
					                    logging.debug("!dtts command detected")
 | 
				
			||||||
 | 
					                    self.Commands.dtts(self, msg)
 | 
				
			||||||
                    return True
 | 
					                    return True
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                if msg.startswith('!random'):
 | 
					                if msg.startswith('!random'):
 | 
				
			||||||
                    logging.info('!random command detected')
 | 
					                    logging.info('!random command detected')
 | 
				
			||||||
 | 
					                    self.Commands.random(self, msg)
 | 
				
			||||||
                    randomfile = msg.replace('!random', '').strip().lower()
 | 
					 | 
				
			||||||
                    if randomfile:
 | 
					 | 
				
			||||||
                        randomfile = "random_"+str(os.path.basename(randomfile))+".txt"
 | 
					 | 
				
			||||||
                    else:
 | 
					 | 
				
			||||||
                        randomfile = "random.txt"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    try:
 | 
					 | 
				
			||||||
                        with open(randomfile,"r", encoding="utf-8") as file:
 | 
					 | 
				
			||||||
                            lines = file.read().splitlines()
 | 
					 | 
				
			||||||
                            random_msg = random.choice(lines)
 | 
					 | 
				
			||||||
                    except FileNotFoundError:
 | 
					 | 
				
			||||||
                        logging.error('%s not found', randomfile)
 | 
					 | 
				
			||||||
                        return False
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    raw_msg = {
 | 
					 | 
				
			||||||
                        "TTS": True,
 | 
					 | 
				
			||||||
                        "msg": random_msg,
 | 
					 | 
				
			||||||
                        "badges": True,
 | 
					 | 
				
			||||||
                        "subscriber": True,
 | 
					 | 
				
			||||||
                        "msgid": True,
 | 
					 | 
				
			||||||
                        "user": conf['IRC_USERNAME'],
 | 
					 | 
				
			||||||
                        "length": conf['IRC_TTS_LEN'],
 | 
					 | 
				
			||||||
                        "queuetime": datetime.datetime.now(),
 | 
					 | 
				
			||||||
                        "timestamp": str(time.time_ns())
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                    msg_queue[raw_msg['timestamp']] = [raw_msg['user'], raw_msg['msg']]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    return True
 | 
					                    return True
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                if msg.startswith('!quickvote'):
 | 
					                if msg.startswith('!quickvote'):
 | 
				
			||||||
                    logging.info("!quickvote command detected")
 | 
					                    logging.info("!quickvote command detected")
 | 
				
			||||||
                    if self.quickvote:
 | 
					                    self.Commands.quickvote(self, msg)
 | 
				
			||||||
                        logging.debug('Quickvote stopped')
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                        if self.pollcount == 0:
 | 
					 | 
				
			||||||
                            logging.info("Nobody voted")
 | 
					 | 
				
			||||||
                            self.sendmsg(conf['IRC_CHANNEL'], "@chat", conf['MESSAGE']['VOTEEND'])
 | 
					 | 
				
			||||||
                            self.sendmsg(conf['IRC_CHANNEL'], "*", conf['MESSAGE']['VOTENOBODY'])
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            raw_msg = {
 | 
					 | 
				
			||||||
                                "TTS": True,
 | 
					 | 
				
			||||||
                                "msg": conf['MESSAGE']['VOTENOBODY'],
 | 
					 | 
				
			||||||
                                "badges": True,
 | 
					 | 
				
			||||||
                                "subscriber": True,
 | 
					 | 
				
			||||||
                                "msgid": True,
 | 
					 | 
				
			||||||
                                "user": conf['IRC_USERNAME'],
 | 
					 | 
				
			||||||
                                "length": conf['IRC_TTS_LEN'],
 | 
					 | 
				
			||||||
                                "queuetime": datetime.datetime.now(),
 | 
					 | 
				
			||||||
                                "timestamp": str(time.time_ns())
 | 
					 | 
				
			||||||
                            }
 | 
					 | 
				
			||||||
                            msg_queue[raw_msg['timestamp']] = [raw_msg['user'], raw_msg['msg']]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            logging.info('The result is: %s', conf['MESSAGE']['VOTENOBODY'])
 | 
					 | 
				
			||||||
                            logging.debug('Votemsg: %s', msg)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            self.quickvote = False
 | 
					 | 
				
			||||||
                            self.poll = {}
 | 
					 | 
				
			||||||
                            return False
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                        logging.info("Counting votes")
 | 
					 | 
				
			||||||
                        count = 0
 | 
					 | 
				
			||||||
                        count = Counter(self.poll.values()).most_common(5)
 | 
					 | 
				
			||||||
                        self.sendmsg(conf['IRC_CHANNEL'], "@chat", conf['MESSAGE']['VOTEEND'])
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                        logging.debug(count)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                        raw_msg = {
 | 
					 | 
				
			||||||
                            "TTS": True,
 | 
					 | 
				
			||||||
                            "msg": conf['MESSAGE']['VOTERESULT'] +" "+ str(count[0][0].replace('#','')),
 | 
					 | 
				
			||||||
                            "badges": True,
 | 
					 | 
				
			||||||
                            "subscriber": True,
 | 
					 | 
				
			||||||
                            "msgid": True,
 | 
					 | 
				
			||||||
                            "user": conf['IRC_USERNAME'],
 | 
					 | 
				
			||||||
                            "length": conf['IRC_TTS_LEN'],
 | 
					 | 
				
			||||||
                            "queuetime": datetime.datetime.now(),
 | 
					 | 
				
			||||||
                            "timestamp": str(time.time_ns())
 | 
					 | 
				
			||||||
                        }
 | 
					 | 
				
			||||||
                        msg_queue[raw_msg['timestamp']] = [raw_msg['user'], raw_msg['msg']]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                        logging.info('The result is: %s', conf['MESSAGE']['VOTERESULT'] +" "+ str(count[0]))
 | 
					 | 
				
			||||||
                        logging.debug('Votemsg: %s', msg)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                        for key, value in count:
 | 
					 | 
				
			||||||
                            self.sendmsg(
 | 
					 | 
				
			||||||
                                conf['IRC_CHANNEL'], "*",
 | 
					 | 
				
			||||||
                                str(key)+" ("+str(value)+ " "+ conf['MESSAGE']['VOTES'] + ")"
 | 
					 | 
				
			||||||
                            )
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                        self.quickvote = False
 | 
					 | 
				
			||||||
                        self.poll = {}
 | 
					 | 
				
			||||||
                        self.pollcount = 0
 | 
					 | 
				
			||||||
                        return True
 | 
					 | 
				
			||||||
                    else:
 | 
					 | 
				
			||||||
                        logging.debug('Quickvote started')
 | 
					 | 
				
			||||||
                        self.quickvote = True
 | 
					 | 
				
			||||||
                        self.votemsg = resp.split('!quickvote', 1)[1].strip()
 | 
					 | 
				
			||||||
                        if self.votemsg:
 | 
					 | 
				
			||||||
                            self.sendmsg(
 | 
					 | 
				
			||||||
                                conf['IRC_CHANNEL'], "@chat",
 | 
					 | 
				
			||||||
                                conf['MESSAGE']['VOTESTART'] + " (" + str(self.votemsg) + ")"
 | 
					 | 
				
			||||||
                            )
 | 
					 | 
				
			||||||
                        else:
 | 
					 | 
				
			||||||
                            self.sendmsg(conf['IRC_CHANNEL'], "@chat", conf['MESSAGE']['VOTESTART'])
 | 
					 | 
				
			||||||
                    return True
 | 
					                    return True
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                if msg.startswith('!ptts'):
 | 
					                if msg.startswith('!ptts'):
 | 
				
			||||||
                    logging.debug("!ptts command detected")
 | 
					                    logging.debug("!ptts command detected")
 | 
				
			||||||
                    user = msg.replace('!ptts', '').strip().lower()
 | 
					                    self.Commands.ptts(self, msg)
 | 
				
			||||||
 | 
					 | 
				
			||||||
                    if user.startswith('@'):
 | 
					 | 
				
			||||||
                        logging.debug('Removing "@" from username')
 | 
					 | 
				
			||||||
                        user = user.replace('@', '')
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    logging.info("Adding %s to whitelist", user)
 | 
					 | 
				
			||||||
                    self.tts_allowed.append(user)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    if user in self.tts_denied:
 | 
					 | 
				
			||||||
                        logging.info("Removing %s from deny list", user)
 | 
					 | 
				
			||||||
                        self.tts_denied.remove(user)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    return True
 | 
					                    return True
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                if msg.startswith('#') and self.quickvote is True:
 | 
					 | 
				
			||||||
                    logging.info('Quickvote: Cast detected')
 | 
					 | 
				
			||||||
                    self.pollcount += 1
 | 
					 | 
				
			||||||
                    self.poll[user] = msg.lower()
 | 
					 | 
				
			||||||
                    logging.debug(self.poll)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                if msg.startswith('!toff'):
 | 
					                if msg.startswith('!toff'):
 | 
				
			||||||
                    logging.info('TTS is now turned off')
 | 
					                    logging.info('TTS is now turned off')
 | 
				
			||||||
                    msg_queue.clear()
 | 
					                    msg_queue.clear()
 | 
				
			||||||
                    msg_queue_raw.clear()
 | 
					                    msg_queue_raw.clear()
 | 
				
			||||||
                    self.tts_status = False
 | 
					                    self.tts_status = False
 | 
				
			||||||
                    self.sendmsg(conf['IRC_CHANNEL'], "@"+str(user), conf['MESSAGE']['TOFF'])
 | 
					                    self.sendmsg(conf['IRC_CHANNEL'], "@"+str(user), conf['MESSAGE']['TOFF'])
 | 
				
			||||||
 | 
					 | 
				
			||||||
                    return True
 | 
					                    return True
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                if msg.startswith('!ton'):
 | 
					                if msg.startswith('!ton'):
 | 
				
			||||||
| 
						 | 
					@ -346,28 +224,20 @@ class IRC:
 | 
				
			||||||
                    msg_queue_raw.clear()
 | 
					                    msg_queue_raw.clear()
 | 
				
			||||||
                    self.tts_status = True
 | 
					                    self.tts_status = True
 | 
				
			||||||
                    self.sendmsg(conf['IRC_CHANNEL'], "@"+str(user), conf['MESSAGE']['TON'])
 | 
					                    self.sendmsg(conf['IRC_CHANNEL'], "@"+str(user), conf['MESSAGE']['TON'])
 | 
				
			||||||
 | 
					 | 
				
			||||||
                    return True
 | 
					                    return True
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if msg.startswith('!tts'):
 | 
					            if msg.startswith('!tts'):
 | 
				
			||||||
                logging.debug('!tts command detected')
 | 
					                logging.debug('!tts command detected')
 | 
				
			||||||
 | 
					 | 
				
			||||||
                if msglen > conf['IRC_TTS_LEN']:
 | 
					 | 
				
			||||||
                    logging.info('TTS message is to long')
 | 
					 | 
				
			||||||
                    self.sendmsg(conf['IRC_CHANNEL'], "@"+str(user), conf['MESSAGE']['TOO_LONG'])
 | 
					 | 
				
			||||||
                    return False
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                logging.debug("tts status: %s", self.tts_status)
 | 
					                logging.debug("tts status: %s", self.tts_status)
 | 
				
			||||||
                logging.debug(conf['TTS_STARTENABLED'])
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
                if not self.tts_status:
 | 
					                if not self.tts_status:
 | 
				
			||||||
                    logging.info('TTS is disabled')
 | 
					                    logging.info('TTS is disabled')
 | 
				
			||||||
                    self.sendmsg(conf['IRC_CHANNEL'], "@"+str(user), conf['MESSAGE']['DISABLED'])
 | 
					                    self.sendmsg(conf['IRC_CHANNEL'], "@"+str(user), conf['MESSAGE']['DISABLED'])
 | 
				
			||||||
                    return False
 | 
					                    return False
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                if user in self.tts_denied:
 | 
					                if msglen > conf['IRC_TTS_LEN']:
 | 
				
			||||||
                    logging.info("%s is not allowed to use TTS", user)
 | 
					                    logging.info('TTS message is to long')
 | 
				
			||||||
                    self.sendmsg(conf['IRC_CHANNEL'], "@"+str(user), conf['MESSAGE']['DENIED'])
 | 
					                    self.sendmsg(conf['IRC_CHANNEL'], "@"+str(user), conf['MESSAGE']['TOO_LONG'])
 | 
				
			||||||
                    return False
 | 
					                    return False
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                if conf['IRC_SUBONLY']:
 | 
					                if conf['IRC_SUBONLY']:
 | 
				
			||||||
| 
						 | 
					@ -386,6 +256,11 @@ class IRC:
 | 
				
			||||||
                        self.sendmsg(conf['IRC_CHANNEL'], "@"+str(user), conf['MESSAGE']['MODONLY'])
 | 
					                        self.sendmsg(conf['IRC_CHANNEL'], "@"+str(user), conf['MESSAGE']['MODONLY'])
 | 
				
			||||||
                        return False
 | 
					                        return False
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                if user in self.tts_denied:
 | 
				
			||||||
 | 
					                    logging.info("%s is not allowed to use TTS", user)
 | 
				
			||||||
 | 
					                    self.sendmsg(conf['IRC_CHANNEL'], "@"+str(user), conf['MESSAGE']['DENIED'])
 | 
				
			||||||
 | 
					                    return False
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                if conf['WHITELIST']:
 | 
					                if conf['WHITELIST']:
 | 
				
			||||||
                    if user not in self.tts_allowed:
 | 
					                    if user not in self.tts_allowed:
 | 
				
			||||||
                        logging.info('User is not on whitelist')
 | 
					                        logging.info('User is not on whitelist')
 | 
				
			||||||
| 
						 | 
					@ -395,13 +270,13 @@ class IRC:
 | 
				
			||||||
                            "@"+str(user), conf['MESSAGE']['WHITELISTONLY']
 | 
					                            "@"+str(user), conf['MESSAGE']['WHITELISTONLY']
 | 
				
			||||||
                        )
 | 
					                        )
 | 
				
			||||||
                        return False
 | 
					                        return False
 | 
				
			||||||
                    else:
 | 
					
 | 
				
			||||||
                        logging.info('Nobody is on the whitelist.')
 | 
					                    logging.warning('Nobody is on the whitelist.')
 | 
				
			||||||
                        self.sendmsg(
 | 
					                    self.sendmsg(
 | 
				
			||||||
                            conf['IRC_CHANNEL'],
 | 
					                        conf['IRC_CHANNEL'],
 | 
				
			||||||
                            "@"+str(user), conf['MESSAGE']['WHITELISTONLY']
 | 
					                        "@"+str(user), conf['MESSAGE']['WHITELISTONLY']
 | 
				
			||||||
                        )
 | 
					                    )
 | 
				
			||||||
                        return False
 | 
					                    return False
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                logging.info('Valid TTS message, adding to raw queue')
 | 
					                logging.info('Valid TTS message, adding to raw queue')
 | 
				
			||||||
                tts = True
 | 
					                tts = True
 | 
				
			||||||
| 
						 | 
					@ -424,6 +299,191 @@ class IRC:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return False
 | 
					        return False
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    class Commands():
 | 
				
			||||||
 | 
					        """ Bot commands """
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        def __init__(self):
 | 
				
			||||||
 | 
					            self.tts_denied = []
 | 
				
			||||||
 | 
					            self.tts_allowed = []
 | 
				
			||||||
 | 
					            self.quickvote_status = self.quickvote_status
 | 
				
			||||||
 | 
					            self.votemsg = self.votemsg
 | 
				
			||||||
 | 
					            self.poll = self.poll
 | 
				
			||||||
 | 
					            self.pollcount = self.pollcount
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        def quickvote(self, msg):
 | 
				
			||||||
 | 
					            """ !quickvote command
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                Starts or stops the !quickvote function. On stop calculates the 5 most casted
 | 
				
			||||||
 | 
					                votes and send them to chat. The highest vote is send to msg_queue.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                :param str msg: The IRC message triggering the command
 | 
				
			||||||
 | 
					            """
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if self.quickvote_status:
 | 
				
			||||||
 | 
					                logging.debug('Quickvote stopped')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                if self.pollcount == 0:
 | 
				
			||||||
 | 
					                    logging.info("Nobody voted")
 | 
				
			||||||
 | 
					                    IRC.sendmsg(self, conf['IRC_CHANNEL'], "@chat", conf['MESSAGE']['VOTEEND'])
 | 
				
			||||||
 | 
					                    IRC.sendmsg(self, conf['IRC_CHANNEL'], "*", conf['MESSAGE']['VOTENOBODY'])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    raw_msg = {
 | 
				
			||||||
 | 
					                        "TTS": True,
 | 
				
			||||||
 | 
					                        "msg": conf['MESSAGE']['VOTENOBODY'],
 | 
				
			||||||
 | 
					                        "badges": True,
 | 
				
			||||||
 | 
					                        "subscriber": True,
 | 
				
			||||||
 | 
					                        "msgid": True,
 | 
				
			||||||
 | 
					                        "user": conf['IRC_USERNAME'],
 | 
				
			||||||
 | 
					                        "length": conf['IRC_TTS_LEN'],
 | 
				
			||||||
 | 
					                        "queuetime": datetime.datetime.now(),
 | 
				
			||||||
 | 
					                        "timestamp": str(time.time_ns())
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                    msg_queue[raw_msg['timestamp']] = [raw_msg['user'], raw_msg['msg']]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    logging.info('The result is: %s', conf['MESSAGE']['VOTENOBODY'])
 | 
				
			||||||
 | 
					                    logging.debug('Votemsg: %s', msg)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    self.quickvote_status = False
 | 
				
			||||||
 | 
					                    self.poll = {}
 | 
				
			||||||
 | 
					                    return False
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                logging.info("Counting votes")
 | 
				
			||||||
 | 
					                count = 0
 | 
				
			||||||
 | 
					                count = Counter(self.poll.values()).most_common(5)
 | 
				
			||||||
 | 
					                IRC.sendmsg(self, conf['IRC_CHANNEL'], "@chat", conf['MESSAGE']['VOTEEND'])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                logging.debug(count)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                raw_msg = {
 | 
				
			||||||
 | 
					                    "TTS": True,
 | 
				
			||||||
 | 
					                    "msg": conf['MESSAGE']['VOTERESULT'] +" "+ str(count[0][0].replace('#','')),
 | 
				
			||||||
 | 
					                    "badges": True,
 | 
				
			||||||
 | 
					                    "subscriber": True,
 | 
				
			||||||
 | 
					                    "msgid": True,
 | 
				
			||||||
 | 
					                    "user": conf['IRC_USERNAME'],
 | 
				
			||||||
 | 
					                    "length": conf['IRC_TTS_LEN'],
 | 
				
			||||||
 | 
					                    "queuetime": datetime.datetime.now(),
 | 
				
			||||||
 | 
					                    "timestamp": str(time.time_ns())
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                msg_queue[raw_msg['timestamp']] = [raw_msg['user'], raw_msg['msg']]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                logging.info('The result is: %s', conf['MESSAGE']['VOTERESULT'] +" "+ str(count[0]))
 | 
				
			||||||
 | 
					                logging.debug('Votemsg: %s', msg)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                for key, value in count:
 | 
				
			||||||
 | 
					                    IRC.sendmsg(
 | 
				
			||||||
 | 
					                        self,
 | 
				
			||||||
 | 
					                        conf['IRC_CHANNEL'], "*",
 | 
				
			||||||
 | 
					                        str(key)+" ("+str(value)+ " "+ conf['MESSAGE']['VOTES'] + ")"
 | 
				
			||||||
 | 
					                    )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                self.quickvote_status = False
 | 
				
			||||||
 | 
					                self.poll = {}
 | 
				
			||||||
 | 
					                self.pollcount = 0
 | 
				
			||||||
 | 
					                return
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            logging.debug('Quickvote started')
 | 
				
			||||||
 | 
					            self.quickvote_status = True
 | 
				
			||||||
 | 
					            self.votemsg = msg.split('!quickvote', 1)[1].strip()
 | 
				
			||||||
 | 
					            if self.votemsg:
 | 
				
			||||||
 | 
					                IRC.sendmsg(self,
 | 
				
			||||||
 | 
					                    conf['IRC_CHANNEL'], "@chat",
 | 
				
			||||||
 | 
					                    conf['MESSAGE']['VOTESTART'] + " (" + str(self.votemsg) + ")"
 | 
				
			||||||
 | 
					                )
 | 
				
			||||||
 | 
					            else:
 | 
				
			||||||
 | 
					                IRC.sendmsg(self, conf['IRC_CHANNEL'], "@chat", conf['MESSAGE']['VOTESTART'])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            return
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        def random(self, msg):
 | 
				
			||||||
 | 
					            """ !random command
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                Read a random line from randomfile and put it into msg_queue
 | 
				
			||||||
 | 
					                If no file is given in msg a standard file will be used
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                :param str msg: The IRC message triggering the command
 | 
				
			||||||
 | 
					                :raise: FileNotFoundError if randomfile does not exists
 | 
				
			||||||
 | 
					                :return: True if line was successfully read and added to msg_queue
 | 
				
			||||||
 | 
					                :rtype: bool
 | 
				
			||||||
 | 
					            """
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            randomfile = msg.replace('!random', '').strip().lower()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if randomfile:
 | 
				
			||||||
 | 
					                randomfile = "random_"+str(os.path.basename(randomfile))+".txt"
 | 
				
			||||||
 | 
					            else:
 | 
				
			||||||
 | 
					                randomfile = "random.txt"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            try:
 | 
				
			||||||
 | 
					                with open(randomfile,"r", encoding="utf-8") as file:
 | 
				
			||||||
 | 
					                    lines = file.read().splitlines()
 | 
				
			||||||
 | 
					                    random_msg = random.choice(lines)
 | 
				
			||||||
 | 
					            except FileNotFoundError:
 | 
				
			||||||
 | 
					                logging.error('%s not found', randomfile)
 | 
				
			||||||
 | 
					                return False
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            raw_msg = {
 | 
				
			||||||
 | 
					                "TTS": True,
 | 
				
			||||||
 | 
					                "msg": random_msg,
 | 
				
			||||||
 | 
					                "badges": True,
 | 
				
			||||||
 | 
					                "subscriber": True,
 | 
				
			||||||
 | 
					                "msgid": True,
 | 
				
			||||||
 | 
					                "user": conf['IRC_USERNAME'],
 | 
				
			||||||
 | 
					                "length": conf['IRC_TTS_LEN'],
 | 
				
			||||||
 | 
					                "queuetime": datetime.datetime.now(),
 | 
				
			||||||
 | 
					                "timestamp": str(time.time_ns())
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            msg_queue[raw_msg['timestamp']] = [raw_msg['user'], raw_msg['msg']]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            return True
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        def ptts(self, msg):
 | 
				
			||||||
 | 
					            """ !ptts command
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                Add user to tts_allowed list and remove user from tts_denied list
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                :param str msg: The IRC message triggering the command
 | 
				
			||||||
 | 
					            """
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            user = msg.replace('!ptts', '').strip().lower()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if user.startswith('@'):
 | 
				
			||||||
 | 
					                logging.debug('Removing "@" from username')
 | 
				
			||||||
 | 
					                user = user.replace('@', '')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            logging.info("Adding %s to whitelist", user)
 | 
				
			||||||
 | 
					            self.tts_allowed.append(user)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if user in self.tts_denied:
 | 
				
			||||||
 | 
					                logging.info("Removing %s from deny list", user)
 | 
				
			||||||
 | 
					                self.tts_denied.remove(user)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            return
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        def dtts(self, msg):
 | 
				
			||||||
 | 
					            """ !dtts command
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                Add user to tts_denied list and remove user from tts_allowed list
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                :param str msg: The IRC message triggering the command
 | 
				
			||||||
 | 
					            """
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            user = msg.replace('!dtts', '').strip().lower()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if user.startswith('@'):
 | 
				
			||||||
 | 
					                logging.debug('Removing "@" from username')
 | 
				
			||||||
 | 
					                user = user.replace('@', '')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if user not in self.tts_denied:
 | 
				
			||||||
 | 
					                logging.info("Adding %s to deny list", user)
 | 
				
			||||||
 | 
					                self.tts_denied.append(user)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if user in self.tts_allowed:
 | 
				
			||||||
 | 
					                logging.info("Removing %s from allowed list", user)
 | 
				
			||||||
 | 
					                self.tts_allowed.remove(user)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            return
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class HTTPserv(BaseHTTPRequestHandler):
 | 
					class HTTPserv(BaseHTTPRequestHandler):
 | 
				
			||||||
    """Simple HTTP Server"""
 | 
					    """Simple HTTP Server"""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -644,7 +704,7 @@ sys.tracebacklimit = 0
 | 
				
			||||||
if sys.argv[1:]:
 | 
					if sys.argv[1:]:
 | 
				
			||||||
    if sys.argv[1] == "--version":
 | 
					    if sys.argv[1] == "--version":
 | 
				
			||||||
        print('Simple TTS Bot')
 | 
					        print('Simple TTS Bot')
 | 
				
			||||||
        print('Version 1.2.0')
 | 
					        print('Version 1.2.1')
 | 
				
			||||||
        sys.exit(1)
 | 
					        sys.exit(1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def main():
 | 
					def main():
 | 
				
			||||||
| 
						 | 
					@ -692,21 +752,21 @@ def main():
 | 
				
			||||||
            try:
 | 
					            try:
 | 
				
			||||||
                irc.get_response()
 | 
					                irc.get_response()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                if not irc.tts_status:
 | 
					 | 
				
			||||||
                    logging.debug("TTS is disabled")
 | 
					 | 
				
			||||||
                    if conf['LOG_LEVEL'] == "DEBUG":
 | 
					 | 
				
			||||||
                        time.sleep(1)
 | 
					 | 
				
			||||||
                    continue
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                confreload = datetime.datetime.now()
 | 
					                confreload = datetime.datetime.now()
 | 
				
			||||||
                if confreload - lastreload > datetime.timedelta(seconds=60):
 | 
					                if confreload - lastreload > datetime.timedelta(seconds=60):
 | 
				
			||||||
                    conf = load_config()
 | 
					                    conf = load_config()
 | 
				
			||||||
                    lastreload = datetime.datetime.now()
 | 
					                    lastreload = datetime.datetime.now()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    if irc.quickvote and irc.votemsg:
 | 
					                    if irc.quickvote_status and irc.votemsg:
 | 
				
			||||||
                        logging.info('Quickvote is active')
 | 
					                        logging.info('Quickvote is active')
 | 
				
			||||||
                        irc.sendmsg(conf['IRC_CHANNEL'], "@chat", conf['MESSAGE']['VOTESTART'] + " (" + str(irc.votemsg) + ")")
 | 
					                        irc.sendmsg(conf['IRC_CHANNEL'], "@chat", conf['MESSAGE']['VOTESTART'] + " (" + str(irc.votemsg) + ")")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                if not irc.tts_status:
 | 
				
			||||||
 | 
					                    logging.debug("TTS is disabled")
 | 
				
			||||||
 | 
					                    if conf['LOG_LEVEL'] == "DEBUG":
 | 
				
			||||||
 | 
					                        time.sleep(1)
 | 
				
			||||||
 | 
					                    continue
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                logging.debug('Raw message queue:')
 | 
					                logging.debug('Raw message queue:')
 | 
				
			||||||
                logging.debug(msg_queue_raw)
 | 
					                logging.debug(msg_queue_raw)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		
		Reference in a new issue