Example #1
0
def handle_hubbubdelchannel(bot, ievent):
    """ arguments: <feedname> [<botname>] [<bottype>] [<channel>] - delete channel from hubbub feed. """
    bottype = None
    try: (name, botname, bottype, channel) = ievent.args
    except ValueError:
        try:
            botname = bot.cfg.name
            (name, type, channel) = ievent.args
        except ValueError:
            try:
                botname = bot.cfg.name
                name = ievent.args[0]
                type = bot.type
                channel = ievent.channel
            except IndexError:
                ievent.missing('<feedname> [<botname>] [<bottype>] [<channel>]')
                return
    item = watcher.byname(name)
    if item == None: ievent.reply("we don't have a %s object" % name) ; return
    if jsonstring([botname, type, channel]) in item.data.watchchannels:
        item.data.watchchannels.remove(jsonstring([botname, type, channel]))
        ievent.reply('%s removed from %s hubbub item' % (channel, name))
    elif [type, channel] in item.data.watchchannels:
        item.data.watchchannels.remove([botname, type, channel])
        ievent.reply('%s removed from %s hubbub item' % (channel, name))
    else:
        ievent.reply('we are not monitoring %s on (%s,%s)' % (name, type, channel))
        return
    item.save()
Example #2
0
 def work(self, botname, type, channel, entries, url, *args, **kwargs):
     logging.debug("in work .. %s" % str(entries))
     try:
         item = self.byurl(url)
         name = item.data.name
         try:
             fleet = getfleet()
             bot = fleet.byname(botname)
             if not bot: logging.warn("can't find %s bot in fleet" % botname) ; return
         except NoSuchBotType as ex: logging.warn("%s" % str(ex)) ; return
         if not bot: logging.error("can't find %s bot in fleet" % type) ; return
         res2 = entries
         if not res2: logging.info("no updates for %s (%s) feed available" % (item.data.name, channel)) ; return
         if item.markup.get(jsonstring([name, channel]), 'reverse-order'): res2 = res2[::-1]
         if item.markup.get(jsonstring([name, channel]), 'all-lines'):
             for i in res2:
                 response = self.makeresponse(name, [i, ], channel)
                 try: bot.say(channel, response)
                 except Exception as ex: handle_exception()
         else:
             sep =  item.markup.get(jsonstring([name, channel]), 'separator')
             if sep: response = self.makeresponse(name, res2, channel, sep=sep)
             else: response = self.makeresponse(name, res2, channel)
             bot.say(channel, response)
     except Exception as ex: handle_exception()
Example #3
0
def handle_hubbubadditem(bot, ievent):
    """ arguments: <feedname> <token> - add an item (token) to a feeds itemslist, this list is used to determine what to display. """
    try: (name, item) = ievent.args
    except ValueError: ievent.missing('<feedname> <token>') ; return
    target = ievent.channel
    feed = watcher.byname(name)
    if not feed: ievent.reply("we don't have a %s feed" % name) ; return
    try: feed.itemslists.data[jsonstring([name, target])].append(item)
    except KeyError: feed.itemslists.data[jsonstring([name, target])] = ['title', 'link']
    feed.itemslists.save()
    ievent.reply('%s added to (%s,%s) itemslist' % (item, name, target))
Example #4
0
    def makeresult(self, name, target, data):
        """ 
            make a result (txt) of a feed depending on its itemlist (tokens)
            and markup.

        """
        item = self.byname(name)
        res = []
        for j in data:
            tmp = {}
            if not item.itemslists.data[jsonstring([name, target])]: return []
            for i in item.itemslists.data[jsonstring([name, target])]:
                try: tmp[i] = str(j[i])
                except KeyError: continue
            res.append(tmp)
        return res
Example #5
0
def handle_hubbubaddchannel(bot, ievent):
    """ arguments: <feedname> [<botname>] [<bottype>] <channel> - add a channel to  hubbub feed. """
    try: (name, botname, type, channel) = ievent.args
    except ValueError:
        try:
            botname = bot.cfg.name
            (name, type, channel) = ievent.args
        except ValueError:
            try:
                botname = bot.cfg.name
                type = bot.type
                (name, channel) = ievent.args
                type = bot.type
            except ValueError:
                try:
                    botname = bot.cfg.name
                    name = ievent.args[0]
                    type = bot.type
                    channel = ievent.channel
                except IndexError: ievent.missing('<name> [<botname>][<bottype>] <channel>') ; return
    item = watcher.byname(name)
    if item == None: ievent.reply("we don't have a %s hubbub object" % name) ; return
    if not item.data.running: ievent.reply('%s watcher is not running' % name) ; return
    if jsonstring([botname, type, channel]) in item.data.watchchannels or [botname, type, channel] in item.data.watchchannels:
        ievent.reply('we are already monitoring %s on (%s,%s)' % (name, type, channel))
        return
    item.data.watchchannels.append([botname, type, channel])
    item.save()
    ievent.reply('%s added to %s hubbub item' % (channel, name))
Example #6
0
 def start(self, botname, type, name, channel):
     """ start a feed in a channel. """
     item = self.byname(name)
     if not item:
         logging.info("we don't have a %s feed" % name)
         return False
     target = channel
     if not jsonstring([botname, type, target]) in item.data.watchchannels and not [botname, type, target] in item.data.watchchannels:
         item.data.watchchannels.append([botname, type, target])
     item.itemslists.data[jsonstring([name, target])] = ['title', 'link']
     item.markup.set(jsonstring([name, target]), 'tinyurl', 1)
     item.data.running = 1
     item.data.stoprunning = 0
     item.save()
     watcher.watch(name)
     logging.debug("started %s feed in %s channel" % (name, channel))
     return True
Example #7
0
 def listfeeds(self, botname, type, channel):
     """ show names/channels of running watcher. """
     result = []
     for name in self.data['names']:
         z = self.byname(name)
         if not z or not z.data.running: continue
         if jsonstring([botname, type, channel]) in z.data.watchchannels or [botname, type, channel] in z.data.watchchannels:
             result.append(z.data.name)
     return result
Example #8
0
def handle_hubbubmarkup(bot, ievent):
    """ arguments: <feedname> - show the markup of a feed (channel specific). """
    try: name = ievent.args[0]
    except IndexError: ievent.missing('<feedname>') ; return
    target = ievent.channel
    feed = watcher.byname(name)
    if not feed: ievent.reply("we don't have a %s feed" % name) ; return
    try: ievent.reply(str(feed.markup[jsonstring([name, target])]))
    except KeyError: pass
Example #9
0
def handle_hubbubitemslist(bot, ievent):
    """ arguments: <feedname> - show itemslist (tokens) of hubbub item. """
    try:name = ievent.args[0]
    except IndexError: ievent.missing('<feedname>') ; return
    feed = watcher.byname(name)
    if not feed: ievent.reply("we don't have a %s feed" % name) ; return
    try: itemslist = feed.itemslists.data[jsonstring([name, ievent.channel])]
    except KeyError: ievent.reply("no itemslist set for (%s, %s)" % (name, ievent.channel)) ; return
    ievent.reply("itemslist of (%s, %s): " % (name, ievent.channel), itemslist)
Example #10
0
def handle_hubbubsetitems(bot, ievent):
    """ arguments: <feedname> <list of tokens> - set items (tokens) of a feed, see hb-scan for a list of possible tokens. """
    try: (name, items) = ievent.args[0], ievent.args[1:]
    except (ValueError, IndexError): ievent.missing('<feedname> <tokens>') ; return
    target = ievent.channel
    feed =  watcher.byname(name)
    if not feed: ievent.reply("we don't have a %s feed" % name) ; return
    feed.itemslists.data[jsonstring([name, target])] = items
    feed.itemslists.save()
    ievent.reply('%s added to (%s,%s) itemslist' % (items, name, target))
Example #11
0
def handle_hubbubdelmarkup(bot, ievent):
    """ arguments: <feedname> <item> - delete markup item from a feed's markuplist. """
    try: (name, item) = ievent.args
    except ValueError: ievent.missing('<feedname> <item>') ; return
    target = ievent.channel
    feed = watcher.byname(name)
    if not feed: ievent.reply("we don't have a %s feed" % name) ; return
    try: del feed.markup[jsonstring([name, target])][item]
    except (KeyError, TypeError): ievent.reply("can't remove %s from %s feed's markup" %  (item, name)) ; return
    feed.markup.save()
    ievent.reply('%s removed from (%s,%s) markuplist' % (item, name, target))
Example #12
0
def handle_hubbubdelitem(bot, ievent):
    """ arguments: <feedname> <token> - delete item (token) from a feeds itemlist. """
    try: (name, item) = ievent.args
    except ValueError: ievent.missing('<name> <item>') ; return
    target = ievent.channel
    feed = watcher.byname(name)
    if not feed: ievent.reply("we don't have a %s feed" % name) ; return
    try:
        feed.itemslists.data[jsonstring([name, target])].remove(item)
        feed.itemslists.save()
    except (NoSuchFeed, ValueError): ievent.reply("we don't have a %s feed" % name) ; return
    ievent.reply('%s removed from (%s,%s) itemslist' % (item, name, target))
Example #13
0
def handle_hubbubget(bot, ievent):
    """ arguments: <feedname> - fetch feed data. """
    try: name = ievent.args[0]
    except IndexError: ievent.missing('<feedname>') ; return
    channel = ievent.channel
    item = watcher.byname(name)
    if item == None: ievent.reply("we don't have a %s item" % name) ; return
    try: result = watcher.fetchdata(name)
    except Exception as ex: ievent.reply('%s error: %s' % (name, str(ex))) ; return
    if item.markup.get(jsonstring([name, channel]), 'reverse-order'): result = result[::-1]
    response = watcher.makeresponse(name, result, ievent.channel)
    if response: ievent.reply("results of %s: %s" % (name, response))
    else: ievent.reply("can't make a reponse out of %s" % name)
Example #14
0
def handle_hubbubaddmarkup(bot, ievent):
    """ arguments: <feedname> <item> <value> - add a markup to a feeds markuplist, this list determines how we display things. """
    try: (name, item, value) = ievent.args
    except ValueError: ievent.missing('<feedname> <item> <value>') ; return
    target = ievent.channel
    try: value = int(value)
    except ValueError: pass
    feed = watcher.byname(name)
    if not feed: ievent.reply("we don't have a %s feed" % name) ; return
    try:
        feed.markup.set(jsonstring([name, target]), item, value)
        feed.markup.save()
        ievent.reply('%s added to (%s,%s) markuplist' % (item, name, target))
    except KeyError: ievent.reply("no (%s,%s) feed available" % (name, target))
Example #15
0
 def makeresponse(self, name, res, channel, sep=" .. "):
     """ loop over result to make a response. """
     item = self.byname(name)
     result = "[%s] - " % name 
     try: itemslist = item.itemslists.data[jsonstring([name, channel])]
     except KeyError: 
         item = self.byname(name)
         if item == None: return "no %s rss item" % name
         else:
             item.itemslists.data[jsonstring([name, channel])] = ['title', 'link']
             item.itemslists.save()
     for j in res:
         if item.markup.get(jsonstring([name, channel]), 'skipmerge') and 'Merge branch' in j['title']: continue
         resultstr = ""
         for i in item.itemslists.data[jsonstring([name, channel])]:
             try:
                 ii = getattr(j, i)
                 if not ii: continue
                 ii = str(ii)
                 if ii.startswith('http://'):
                     if item.markup.get(jsonstring([name, channel]), 'tinyurl'):
                         try:
                             tinyurl = get_tinyurl(ii)
                             logging.debug('rss - tinyurl is: %s' % str(tinyurl))
                             if not tinyurl: resultstr += "%s - " % ii
                             else: resultstr += "%s - " % tinyurl[0]
                         except Exception as ex:
                             handle_exception()
                             resultstr += "%s - " % item
                     else: resultstr += "%s - " % ii
                 else: resultstr += "%s - " % ii.strip()
             except (KeyError, AttributeError) as ex:
                 logging.info('%s - %s' % (name, str(ex)))
                 continue
         resultstr = resultstr[:-3]
         if resultstr: result += "%s %s " % (resultstr, sep)
     return result[:-(len(sep)+2)]
Example #16
0
def handle_markovenable(bot, ievent):
    """ enable markov in a channel .. learn the log of that channel """
    try:
        channel = ievent.args[0]
    except IndexError:
        channel = ievent.channel
    if not enabled(bot.cfg.name, channel):
        cfg.get("enable").append(jsonstring([bot.cfg.name, channel]))
    else:
        ievent.reply("%s is already enabled" % channel)
        return
    cfg.save()
    markovlearn.data.l.append(channel)
    markovlearn.save()
    ievent.reply("%s enabled" % channel)
Example #17
0
def handle_markovdisable(bot, ievent):
    """ disable markov in a channel """
    try:
        channel = ievent.args[0]
    except IndexError:
        channel = ievent.channel
    if enabled(bot.cfg.name, channel):
        cfg.get("enable").remove(jsonstring([bot.cfg.name, channel]))
    else:
        ievent.reply("%s is not enabled" % channel)
        return
    cfg.save()
    try:
        markovlearn.data.l.remove(channel)
        markovlearn.save()
    except ValueError:
        pass
    ievent.reply("%s disabled" % channel)
Example #18
0
def cb_markovjoin(bot, ievent):
    """ callback to run on JOIN """
    # check if its we who are joining
    nick = ievent.nick.lower()
    if nick in bot.splitted:
        return
    if nick == bot.cfg.nick:
        return
    # check if (bot.name, ievent.channel) is in onjoin list if so respond
    try:
        onjoin = cfg.get("onjoin")
    except KeyError:
        onjoin = None
    if type(onjoin) != list:
        return
    if jsonstring([bot.name, ievent.channel]) in onjoin:
        txt = getreply(bot, ievent, ievent.nick + ":")
        if txt:
            ievent.reply("%s: %s" % (ievent.nick, txt))
Example #19
0
def enabled(botname, channel):
    if jsonstring([botname, channel]) in cfg["enable"]:
        return True