Пример #1
0
 def process_data(self, data):
     """
     For internal use only
     Processes incomming data
     """
     self.lock.acquire()
     # An incomplete buffer is present: add to data and clear
     if self.incomplete_buffer:
         data = self.incomplete_buffer + data
         self.incomplete_buffer = ""
     # Test to see if we have an incomplete line at end
     # If so we will add it to the incomplete buffer
     # as we process the data
     if data[-2:] == "\r\n":
         split_data = data.split("\r\n")
     else:
         split_data = data.split("\r\n")
         self.incomplete_buffer = split_data.pop(-1)
     for line in split_data:
         if line:
             if line.startswith('PING'):
                 parameters = line.split()
                 pong = 'PONG ' + parameters[1]
                 self.send(pong)
                 self.lock.release()
                 return
             eyercbot.send('process message', self.name, line)
     self.lock.release()
Пример #2
0
 def irc_PART(self, server, prefix, params):
     user, host = prefix.split('!')
     channel = params[0]
     reason = ""
     if len(params) > 1:
         reason = params[1]
     eyercbot.send('onPart', server, user, host, channel, reason)
Пример #3
0
 def irc_RPL_WELCOME(self, server, prefix, arguments):
     """
     Welcome from server, we launch, call signedOn
     """
     nick = arguments[0]
     message = arguments[1]
     eyercbot.send('signed on', server, nick, message)
Пример #4
0
def message(server, user, target, msg):
    '''Message logic to determine how to send response based on query (prv vs pub)
    Use msg() or notice() to overide this behavior.'''
    if target.lower() == eyercbot.config['nick'].lower():
        # Get by pm, respond by pm
        #self.msg(user.split('!')[0], msg[0:eyercbot.config['length']])
        target = user.split('!')[0]
    else:
        # Get by public, respond by public
        rep = 'awesomepants'
        msg = msg.lower().replace('bitch', rep)
        msg = msg.lower().replace('f****t', rep)
        msg = msg.lower().replace('f*g', rep)
        msg = msg.lower().replace('f**k', rep)
        msg = msg.lower().replace('shit', rep)
        msg = msg.lower().replace('nigger', rep)
        msg = msg.lower().replace('c**t', rep)
    
    lines = 0
    for x in range(int(len(msg)/eyercbot.config['length'])+1):
        message = msg[lines:lines+eyercbot.config['length']]
        if not len(message):
            return
        eyercbot.send('msg', server, target, message)
        time.sleep(0.5)
        lines += eyercbot.config['length']
Пример #5
0
def delete(server, user, target, message):
    if message.lower() in database:
        del database[message.lower()]
        eyercboot.send('sendMsg', server, user, target, message + ' deleted.')
        saveDB(eyercbot.config['basedir'] + 'faq.yaml')
    else:
        eyercbot.send('sendMsg', server, user, target, "There is no entry with that key in the database.")
Пример #6
0
def whoami(server, user, target, message):
    '''Reports to user what the bot knows about them'''
    userO = userdb.getUser(user)
    eyercbot.send(
        'sendMsg', server, user, target, "You are: " + userO.nick +
        " in group " + userO.group + '. Registration: ' +
        str(userO.registered) + '. Permissions: ' + str(userO.permissions))
Пример #7
0
def add_whitelist(server, user, target, message):
    '''@add whitelist group_name, whitelist.function | Adds whitelist to target group.'''
    if len(message.split(', ')) != 2:
        eyercbot.send('sendMsg', server, user, target, "Invalid syntax")
        return
    group_name, permission = message.split(', ')
    eyercbot.send('sendMsg', server, user, target, "Unfinished function")
Пример #8
0
def join(server, channel):
    """
    Join the specified channel
    """
    # If # and & is missing, add it
    if channel[0] != "#" and channel[0] != '&':
        channel = "#" + channel
    eyercbot.send('send', server, 'JOIN {0}'.format(channel))
Пример #9
0
 def irc_KICK(self, server, prefix, params):
     """Kicked?  Who?  Not me, I hope.
     """
     kicker = prefix.split('!')[0]
     channel = params[0]
     kicked = params[1]
     message = params[-1]
     eyercbot.send('onKick', server, kicked, channel, kicker, message)
Пример #10
0
 def irc_JOIN(self, server, prefix, params):
     """
     Called when a user joins a channel.
     """
     nick = prefix.split('!')[0]
     host = prefix.split('!')[1]
     channel = params[-1]
     eyercbot.send('onJoin', server, nick, host, channel)
Пример #11
0
def join_quote(server, nick, channel):
    '''Random quote is posted if user joins that channel'''
    if server in eyercbot.config['plugin_config']['quotes']['join_quotes']:
        if channel in eyercbot.config['plugin_config']['quotes']['join_quotes'][server]:
            quotedb = makeQuoteDB()
            if nick in quotedb:
                quote_entry = getQuote(nick = nick, param = "random")
                eyercbot.send('msg', server, channel, quote_entry)
Пример #12
0
def newuser(server, user, msg):
    '''First user to PM their password will be registered as owner'''
    user_name = user.split('!')[0]
    eyercbot.users.userdb.makeEntry(user_name)
    eyercbot.users.userdb.database[user_name].register(user, msg.split()[1], 'owner')
    # We now write the new user file
    eyercbot.users.userdb.save(user_name)
    eyercbot.send('msg', server, user_name, 'You have been registered as my owner')
Пример #13
0
def joined(server, nick, host, channel):
    """
    Called when someone joins a channel
    """
    if nick == botnick:
        eyercbot.send('onBotJoin', server, channel)
    else:
        eyercbot.send('onUserJoin', server, nick, channel)
Пример #14
0
 def irc_RPL_TOPIC(self, server, prefix, params):
     """
     Called when the topic for a channel is initially reported or when it
     subsequently changes.
     """
     user = prefix
     channel = params[1]
     new_topic = params[2]
     eyercbot.send('onTopic', server, user, channel, new_topic)
Пример #15
0
def stats(server, user, target, message):
    """Outputs quote database stats"""
    quotedb = makeQuoteDB()
    stats = ""
    if not quotedb:
        stats = "No quotes stored"
    else:
        for nick in quotedb:
            stats = stats + nick + ': ' + str(len(quotedb[nick])) + ' '
    eyercbot.send('sendMsg', server, user, target, 'Quote Statistics: ' + stats)
Пример #16
0
def loadAllPlugins():
    # Unloading anythign we have
    # Inhibit the dynamic view to allow mutability during iteration
    for plugin in list(plugins.keys()):
        unload_plugin(plugin)
    stop = False
    for plugin_name in eyercbot.config['plugins']:
        if loadPlugin(plugin_name):
            stop = True
    if stop:
        eyercbot.send('quitAll', "!!!!ATTENTION!!!! There have been critical updates to " +  
                eyercbot.config["nick"] + " config file and the bot will now shut down. Please review configuration before restarting.")
Пример #17
0
def search(server, user, target, message):
    '''Searches for a word or phrase.'''
    matches = set()
    for topic, entry in database.items():
        if message.lower() in topic.lower() or message.lower() in entry.lower():
            matches.add(topic)
    if not matches:
        eyercbot.send('sendMsg', server, user, target, "No match found")
    else:
        message = ''
        for entry in matches:
            message += entry + ', '
        eyercbot.send('sendMsg', server, user, target, "Matches: " + message[:-2])
Пример #18
0
def add(server, user, target, message):
    '''add quote line to be quoted tags:tag1,tag2 will add the quote to the user.  Tags are optional parameters for searching purposes. Tags can not have spaces.'''
    nick, quote = message.split(" ", 1)
    tags = []
    if "tags:" in quote:
        quote, temp_tags = quote.split("tags")
        tags = temp_tags.split(",")
    quote_submitter = user.split("!")[0]
    quote_entry = [quote_submitter, quote, tags]
    user = eyercbot.users.userdb.getUser(nick)
    try:
        user.quotes.append(quote_entry)
    except:
        user.quotes = [quote_entry]
    eyercbot.users.userdb.save(user.nick)
    eyercbot.send('sendMsg', server, user, target, 'Successfully added quote for ' + nick + '.')
Пример #19
0
def randomQuote(server, user, target, message):
    """Calls a random quote from the quote db. An optional parameter can be given."""
    nick = None
    tag = None
    # If there is a message...
    if message:
        # Message is split as we are only passing one word
        message = message.split()[0]
        quotedb = makeQuoteDB()
        # This a user name
        if message.lower() in quotedb:
            nick = message.lower()
        else:
            tag = message.lower()
    
    quote_entry = getQuote(nick = nick, tag = tag, param = "random")
    eyercbot.send('sendMsg', server, user, target, quote_entry)
Пример #20
0
def weather(server, user, target, message):
    '''Prints out current weather conditions for tartget city. Parameters can include city, state; city, country; and US postal zip codes.'''
    if not message:
        eyercbot.send('sendMsg', server, user, target, weather.__doc__)
    url = 'http://www.google.com/ig/api?' + urlencode({'weather': message})
    weather_xml = urllib.request.urlopen(url).read().decode()
    root = etree.fromstring(weather_xml)
    weather_element = root[0]
    forcast_info = weather_element[0]
    current_conditions = weather_element[1]
    cityname = forcast_info.findall('city')[0].attrib['data']
    condition = current_conditions.findall('condition')[0].attrib['data']
    tempf = current_conditions.findall('temp_f')[0].attrib['data']
    tempc = current_conditions.findall('temp_c')[0].attrib['data']
    wind = current_conditions.findall('wind_condition')[0].attrib['data']
    response = 'Weather for ' + cityname + ': Temperature: ' + tempc + 'C (' + tempf + ' F). Condition: ' + condition + '. ' + wind
    eyercbot.send('sendMsg', server, user, target, response)
Пример #21
0
    def irc_PRIVMSG(self, server, prefix, parameters):
        """
        Called when we get a private message.
        We then pipe to three possible functions:
        funcname1:  called for all private message
        funcname2:  called for all messages in channels
        funcname3:  called for all messages directly sent from users
        """
        sender = prefix
        target = parameters[0]
        message = parameters[-1]

        # Return if we got a blank message
        if not message:
            return
        # The logic which manages public vs private messages will be done one more level up.
        eyercbot.send('onMsg', server, sender, target, message)
Пример #22
0
def publicmsg(server, nick, target, message):
    '''Reads the message, looking for specific things to autofetch and post.'''
    # Youtube title
    if 'http://www.youtube.com/watch' in message:
        re1 = '((?:http|https)(?::\\/{2}[\\w]+)(?:[\\/|\\.]?)(?:[^\\s"]*))'  # HTTP URL 1

        rg = re.compile(re1, re.IGNORECASE | re.DOTALL)
        m = rg.search(message)
        if m:
            url = m.group(1)
        response, content = browser.request(url)
        html = content.decode()
        query = re.search('<title>(?P<title>.+?)</title>',
                          html,
                          flags=re.DOTALL)
        title = query.group('title').replace('\n', '')
        eyercbot.send('msg', server, target, title)
Пример #23
0
def new(server, user, target, message):
    a = False
    while a == False:
        text, title = wiki()
        a = wikicheck(text)
    text = eyercbot.html2irc(text)
    if len(text) > 450:
        text = text[0:450]
    wiki_story = [[], []]
    while len(wiki_story[1]) < 2:
        wiki_story =  encodetext(text)
    story = {'text':wiki_story[0], 'list':wiki_story[1]}
    #stream = file('madlib.yaml', 'w')
    #yaml.dump_all([story, title], stream)
    #stream.close()
    eyercbot.memory['madlibs'] = Game(server, target,  story,  user.split('!')[0],  title)
    eyercbot.memory['madlibs'].allow_join = True
    eyercbot.send('sendMsg', server, target, 'A new game of Madlibs is starting Please type @join madlib to join the game. The game owner can type @start madlib to start the game.')
Пример #24
0
def auto_steam(*args):
    log.info("Automatic steam update")
    for userO, game in steamers.items():
        update = False
        database = get_steam(userO.steamID64)
        if 'gameextrainfo' in database and steamers[userO] == None:
            update = True
            steamers[userO] = database['gameextrainfo']
        elif 'gameextrainfo' not in database:
            steamers[userO] = None
        elif 'gameextrainfo' in database:
            if steamers[userO] != database['gameextrainfo']:
                update = True
                steamers[userO] = database['gameextrainfo']
        if update:
            for server in eyercbot.config['plugin_config']['steam']['servers']:
                for channel in eyercbot.config['plugin_config']['steam']['servers'][server]:
                    eyercbot.send('msg', server, channel, userO.nick + " is now playing " + database['gameextrainfo'])
Пример #25
0
def update(file_name, server, channel, auto=False):
    subprocess.call([
        eyercbot.config['plugin_config']['stats']['pisg_path'], '-co',
        eyercbot.config['plugin_config']['stats']['cfg_path']
    ])
    if eyercbot.config['plugin_config']['stats']['use_ftp']:
        upload(file_name)
    if eyercbot.config['plugin_config']['stats']['use_move']:
        copy(file_name)
    if auto:
        eyercbot.send(
            'msg', server, channel,
            eyercbot.config['plugin_config']['stats']['auto_message'] +
            eyercbot.config['plugin_config']['stats']['url'] +
            file_name.lstrip('#'))
    else:
        eyercbot.send(
            'msg', server, channel,
            eyercbot.config['plugin_config']['stats']['man_message'] +
            eyercbot.config['plugin_config']['stats']['url'] + file_name)
Пример #26
0
def google(server, user, target, message):
    """Perform a search using Google's AJAX API.
    search("search phrase", options={})

    Valid options are:
        smallsearch - True/False (Default: False)
        filter - {active,moderate,off} (Default: "moderate")
        language - Restrict search to documents in the given language
                   (Default: "lang_en")
    """
    query = message
    headers = default_headers
    opts = {'q': query, 'v': '1.0'}
    url = urllib.request.Request(google_search_url + "?" + urlencode(opts),
                                 headers=headers)
    page = urllib.request.urlopen(url)
    results = json.loads(page.read().decode())
    page.close()
    url = results['responseData']['cursor']['moreResultsUrl']
    if not results['responseData']['results']:
        eyercbot.send('sendMsg', server, user, target,
                      'I found no results for that query.')
        return
    response = '' + results['responseData']['results'][0][
        'titleNoFormatting'] + ': ' + results['responseData']['results'][0][
            'url'] + ' | ' + results['responseData']['results'][0]['content']
    eyercbot.send(
        'sendMsg', server, user, target,
        eyercbot.html2irc(response)
        [0:eyercbot.config["plugin_config"]["search"]["length"]])
    eyercbot.send('sendMsg', server, user, target, url)
Пример #27
0
def get_feed(server, user, target, message, auto=False):
    if not message:
        eyercbot.send('sendMsg', server, user, target,
                      'Please enter a feed name')
        return
    key = message
    if key not in eyercbot.config['plugin_config']['feed']['feeds']:
        eyercbot.send('sendMsg', server, user, target, 'Feed does not exist.')
        return
    response, content = browser.request(
        eyercbot.config['plugin_config']['feed']['feeds'][key]['url'])
    data = content.decode(response['content-type'].split('=')[1])
    tree = etree.fromstring(data)
    channel = tree.getchildren()[0]
    feedtitle = channel.find('title').text
    feedlink = channel.find('link').text
    child = channel.find('item')
    title = child.find('title').text
    link = child.find('link').text
    guid = child.find('guid').text
    if eyercbot.config['plugin_config']['feed']['feeds'][key][
            'lastid'] == guid and auto:
        return
    content = eyercbot.bbcode2irc(
        eyercbot.html2irc(
            child.find(
                '{http://purl.org/rss/1.0/modules/content/}encoded').text))
    response = 'From: ' + feedtitle
    eyercbot.send('sendMsg', server, user, target, response)
    response = '' + title + ': ' + content
    #print("response:",response[0:400])
    eyercbot.send(
        'sendMsg', server, user, target,
        response[:eyercbot.config['plugin_config']['feed']['length']])
    eyercbot.send('sendMsg', server, user, target, link)
    eyercbot.config['plugin_config']['feed']['feeds'][key]
    eyercbot.config['plugin_config']['feed']['feeds'][key]['lastid'] = guid
Пример #28
0
def signed_on(server, nick, message):
    """
    Called after sucessfully signed into the server
    """
    # Join designated channels
    global botnick
    botnick = nick
    for channel in eyercbot.config['servers'][server]['channels']:
        eyercbot.send('join channel', server, channel)
        message = "EyeRCBot Version " + str(eyercbot.VERSION) + ". Python version: " + str(sys.version)
        eyercbot.send('msg', server, channel, message)
        message = "The following plugins have been loaded: "
        for name in plugins.keys():
            message = message + name + ", "
        eyercbot.send('msg', server, channel, message[:-2])
        message = "Commands begin with " + eyercbot.config['servers'][server]["command"] + '. ' + eyercbot.config['servers'][server]["command"] + 'help to begin.'
        eyercbot.send('msg', server, channel, message)
Пример #29
0
def add(server, user, target, message):
    '''Creates new entry. Format is @add faq key phrase, entry for key.'''
    data = message.split(', ', 1)
    if len(data) != 2:
        eyercbot.send('sendMsg', server, user, target, "Incorrect paramaters")
    elif data[0] in database.keys():
        eyercbot.send('sendMsg', server, user, target, "Key already exists, please delete first.")
    else:
        database[data[0].lower()] = data[1]
        saveDB(eyercbot.config['basedir'] + 'faq.yaml')
        eyercbot.send('sendMsg', server, user, target, data[0].lower() + " added to database.")
Пример #30
0
def show_steam(server, user, target, message):
    if len(message.split()):
        userO = eyercbot.users.userdb.getUser(message.split()[0])
    else:
        userO = eyercbot.users.userdb.getUser(user)
    try:
        eyercbot.send('sendMsg', server, user, target, userO.nick + " steam ID: " + str(userO.steamID64))
    except:
        if userO.nick:
            eyercbot.send('sendMsg', server, user, target, "I do not have a steam ID for " + userO.nick)
        else:
            eyercbot.send('sendMsg', server, user, target, "I do not have a steam ID for that user.")
        return
    database = get_steam(userO.steamID64)
    if 'gameextrainfo' in database:
        eyercbot.send('sendMsg', server, user, target, userO.nick + ' (aka ' + database['personaname'] + ') currently playing: ' + database['gameextrainfo'])
        steamers[userO] = database['gameextrainfo']
    else:
        steamers[userO] = None