Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import logging
- import sys
- from datetime import date, datetime
- import random
- from irc.bot import SingleServerIRCBot
- from colorama import Fore, Back, Style
- colored = lambda text, *args: f"{''.join(args)}{text}{Style.RESET_ALL}"
- # config
- HOST = 'irc.twitch.tv'
- PORT = 6667
- USERNAME = 'bot'
- PASSWORD = 'TOKEN' # http://www.twitchapps.com/tmi/
- CHANNEL = '#vicfred'
- def _get_logger():
- logger_name = 'vbot'
- logger_level = logging.DEBUG
- log_line_format = '%(asctime)s | %(name)s - %(levelname)s : %(message)s'
- log_line_date_format = '%Y-%m-%dT%H:%M:%SZ'
- logger_ = logging.getLogger(logger_name)
- logger_.setLevel(logger_level)
- logging_handler = logging.StreamHandler(stream=sys.stdout)
- logging_handler.setLevel(logger_level)
- logging_formatter = logging.Formatter(log_line_format, datefmt=log_line_date_format)
- logging_handler.setFormatter(logging_formatter)
- logger_.addHandler(logging_handler)
- return logger_
- logger = _get_logger()
- class VBot(SingleServerIRCBot):
- VERSION = '1.0.0'
- def __init__(self, host, port, nickname, password, channel):
- logger.debug('VBot.__init__ (VERSION = %r)', self.VERSION)
- SingleServerIRCBot.__init__(self, [(host, port, password)], nickname, nickname)
- self.channel = channel
- self.colors = [Fore.RED, Fore.BLUE, Fore.GREEN, Fore.CYAN, Fore.YELLOW, Fore.MAGENTA]
- self.viewers = {}
- self.filename = f'stream-{date.today()}.txt'
- def on_welcome(self, connection, event):
- logger.debug('VBot.on_welcome')
- connection.join(self.channel)
- connection.privmsg(event.target, 'Hola!')
- def on_join(self, connection, event):
- logger.debug('VBot.on_join')
- nickname = self._parse_nickname_from_twitch_user_id(event.source)
- self.viewers[nickname] = random.choice(self.colors)
- # if nickname.lower() == connection.get_nickname().lower():
- # connection.privmsg(event.target, f'Hola {nickname.lower()}!')
- def on_part(self, connection, event):
- logger.debug('VBot.on_part')
- nickname = self._parse_nickname_from_twitch_user_id(event.source)
- del self.viewers[nickname]
- def on_pubmsg(self, connection, event):
- # logger.debug('VBot.on_pubmsg')
- message = event.arguments[0]
- nickname = self._parse_nickname_from_twitch_user_id(event.source)
- t = datetime.now()
- if 'vicfred' in message.lower():
- print(colored('ATENTION! ', Fore.RED, Style.BRIGHT), end='')
- try:
- print(f'{t.hour:02}:{t.minute:02} <{colored(nickname, self.viewers[nickname])}> {message}')
- except KeyError:
- self.viewers[nickname] = random.choice(self.colors)
- print(f'{t.hour:02}:{t.minute:02} <{colored(nickname, self.viewers[nickname])}> {message}')
- with open(self.filename, 'a') as file:
- file.write(f'{nickname}: {message}\n')
- file.close()
- if 'hola' in message.lower():
- self.connection.privmsg(event.target, f'Hola {nickname}!')
- elif message == '!viewers':
- self.connection.privmsg(event.target, f'Hay {len(self.viewers)} viewers')
- elif message == '!version':
- self.connection.privmsg(event.target, f'Version: {self.VERSION}')
- @staticmethod
- def _parse_nickname_from_twitch_user_id(user_id):
- # nickname!username@nickname.tmi.twitch.tv
- return user_id.split('!', 1)[0]
- def main():
- my_bot = VBot(HOST, PORT, USERNAME, PASSWORD, CHANNEL)
- my_bot.start()
- if __name__ == '__main__':
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement