diff --git a/bot.py b/bot.py index e31c4f0..faa9752 100644 --- a/bot.py +++ b/bot.py @@ -48,6 +48,7 @@ class TwitchBot(irc.bot.SingleServerIRCBot): self.nickname = config['IRC'].get('nickname') self.channel = '#{0}'.format(config['IRC'].get('channel')) self.token = config['Twitch'].get('token') + self.master_user_id = config['Twitch'].getint('master_user_id') self.api_url = config['Quotes'].get('api_url') self.api_key = config['Quotes'].get('api_key') log.info('Connecting to %s:%d', self.server, self.port) @@ -71,13 +72,13 @@ class TwitchBot(irc.bot.SingleServerIRCBot): self.process_message(connection, event) def process_message(self, connection, event): - sources = [t['value'] for t in event.tags if t['key'] == 'display-name'] + tags = {t['key']: t['value'] for t in event.tags} message = ''.join([c for c in event.arguments[0] if c in string.printable]) message = message.rstrip() for pattern, action in self.patterns + self.commands: m = pattern.match(message) if m: - action(connection, sources[0], **m.groupdict()) + action(connection, tags, **m.groupdict()) def get(self, params): r = requests.get('{0}/quotes'.format(self.api_url), params=params) @@ -96,7 +97,7 @@ class TwitchBot(irc.bot.SingleServerIRCBot): r.raise_for_status() return r.json() - def last_quote(self, connection, source, **kwargs): + def last_quote(self, connection, tags, **kwargs): try: quotes = self.get(dict( sort_by='id', @@ -104,14 +105,14 @@ class TwitchBot(irc.bot.SingleServerIRCBot): page_size=1)) quote = quotes[0] except (requests.exceptions.HTTPError, IndexError): - msg = 'Sorry @{0}, no quotes found'.format(source) + msg = 'Sorry @{0}, no quotes found'.format(tags['display-name']) else: msg = '!quote {0}'.format(quote['id']) connection.privmsg(self.channel, msg) - def find_quote(self, connection, source, filter, **kwargs): + def find_quote(self, connection, tags, filter, **kwargs): if len(filter) < 3: - msg = 'Sorry @{0}, the search phrase is too short'.format(source) + msg = 'Sorry @{0}, the search phrase is too short'.format(tags['display-name']) connection.privmsg(self.channel, msg) return try: @@ -122,12 +123,16 @@ class TwitchBot(irc.bot.SingleServerIRCBot): page_size=1)) quote = quotes[0] except (requests.exceptions.HTTPError, IndexError): - msg = 'Sorry @{0}, no quotes found'.format(source) + msg = 'Sorry @{0}, no quotes found'.format(tags['display-name']) else: msg = '!quote {0}'.format(quote['id']) connection.privmsg(self.channel, msg) - def sync(self, connection, source, since=None, **kwargs): + def sync(self, connection, tags, since=None, **kwargs): + if int(tags['user-id']) != self.master_user_id: + msg = 'Sorry @{0}, you are not allowed to do this'.format(tags['display-name']) + connection.privmsg(self.channel, msg) + return if since is None: try: quotes = self.get(dict( @@ -145,16 +150,16 @@ class TwitchBot(irc.bot.SingleServerIRCBot): since = quote['date'] api_url = config['Twitch'].get('api_url') client_id = config['Twitch'].get('client_id') - user_id = config['Twitch'].get('target_user_id') + user_id = config['Twitch'].getint('target_user_id') since = dateutil.parser.parse(since).date() messages = Twitch(api_url, client_id, log).get_messages(user_id, since) for message in messages: for pattern, action in self.patterns: m = pattern.match(message) if m: - action(connection, m.group('user'), **m.groupdict()) + action(connection, None, **m.groupdict()) - def add_quote(self, connection, source, user, id, text, game, date, **kwargs): + def add_quote(self, connection, tags, user, id, text, game, date, **kwargs): log.info('Adding quote %s: %s', id, text) try: self.post(dict(