コード例 #1
0
ファイル: pluginHandler.py プロジェクト: Phoshi/OMGbot
def load_plugin(input, loadAs=""): #Loads a plugin, placing it in it's correct category.
    state=0
    #arguments=shlex.split(' '.join(input.split()[1:]))
    name=input.split()[0]
    x=__import__(name)
    if loadAs!="":
        name=loadAs
    else:
        loadAs = name
    if name in globalv.loadedPlugins:
        state=1
    if name in globalv.loadedRealtime:
        state=1
    if name in globalv.loadedSpecial:
        state=1
    reload(x)
    y=x.pluginClass()
    if y.gettype()=="command":
        globalv.loadedPlugins.update({name:y})
    if y.gettype()=="realtime":
        globalv.loadedRealtime.update({name:y})
    if y.gettype()=="special":
        globalv.loadedSpecial.update({name:y})
    if y.gettype()=="preprocess":
        globalv.loadedPreprocess.update({name:y})
    if y.gettype()=="postprocess":
        globalv.loadedPostprocess.update({name:y})
    globalv.aliasExtensions.update({name:''})
    if settingsHandler.tableExists(name)==0:
        y.__init_db_tables__(name)
    if name not in [x[0] for x in settingsHandler.readSetting("'core-userlevels'", "plugin")]:
        settingsHandler.writeSetting("'core-userlevels'", ["plugin", "level"],[name, str(y.__level__())])
    globalv.basePlugin[loadAs]=input.split()[0]
    return state
コード例 #2
0
def expandExpansions(toExpand, complete=None):
    def runPluginReturnOutput(matchObj):
        command=expanDict[matchObj.group(1)]
        if matchObj.group(2) is not None:
            arguments=matchObj.group(2)[1:-1]
        else:
            arguments=""
        appendOnto=True
        for index, content in enumerate(arguments.split()):
            if "$%s$"%index in command:
                command=command.replace("$%s$"%index, content)
                appendOnto=False
        if "$*$" in command:
            command=command.replace("$*$",arguments)
            appendOnto=False
        if appendOnto:
            command="%s %s"%(command, arguments)
        inputString=":%s PRIVMSG %s :%s"%(toExpand.userMask(), toExpand.channel(), "!%s"%command)
        input=formatInput(pluginArguments(inputString))
        pluginOutput=' | '.join(globalv.loadedPlugins[command.split()[0]].action(input))
        output=' :'.join(pluginOutput.split(' :')[1:])
        return output
    if type(toExpand) in [str,unicode]:
        isObj=False
    else:
        isObj=True
    if settingsHandler.tableExists("'core-expansions'")==False:
        settingsHandler.newTable("'core-expansions'","trigger","command")
    allCommands=[[x.replace('(','\(').replace(')', '\)'),x] for x in globalv.loadedPlugins.keys()]
    expansions=settingsHandler.readSettingRaw("'core-expansions'","trigger,command") + allCommands
    expanDict={}
    for trigger, command in expansions:
        expanDict[trigger]=command
        if isObj:
            string=toExpand.fullMessage()
            #if string.find("$%s$"%trigger)!=-1:
            if re.findall("(\$%s(\(.*?\))?\$)"%trigger, string)!=[]:
                string=re.sub("\$(%s)(\(.*?\))?\$"%trigger,runPluginReturnOutput,string)
                ret=toExpand.complete()[1:].split(' :',1)
                ret[1]=string
                toExpand.setComplete(':'+' :'.join(ret))
        else:
            if complete==None:
                usermask="dummy!dummy@dummy"
                channel="#dummy"
            else:
                usermask=complete.userMask()
                channel=complete.channel()
            #if toExpand.find("$%s$"%trigger)!=-1:
            if re.findall("(\$%s(\(.*?\))?\$)"%trigger, toExpand)!=[]:
                toExpand=re.sub("\$(%s)(\(.*?\))?\$"%trigger,runPluginReturnOutput,toExpand)
    for variable in globalv.variables.keys():
        if toExpand.fullMessage().find(variable)!=-1:
            string=re.sub("~%s~"%variable,str(globalv.variables[variable]),string)
            ret=toExpand.complete()[1:].split(' :',1)
            ret[1]=string
            toExpand.setComplete(':'+' :'.join(ret))
    return toExpand
コード例 #3
0
ファイル: aliasHandler.py プロジェクト: rpjohnst/xbot
def load_alias(name, plugin): #Loads an alias
    try:
        if plugin.split()[0] in globalv.loadedPlugins:
            if plugin.split()[0] in globalv.aliasExtensions:
                argumentsObject = pluginArguments(":nothing!nobody@nowhere PRIVMSG #NARChannel :%s%s"%(globalv.commandCharacter, plugin))
                argumentsObject = formatInput(argumentsObject, globalv.aliasExtensions, False)
                plugin = argumentsObject.fullMessage()[len(globalv.commandCharacter):]
                print plugin

            globalv.loadedPlugins.update({name:globalv.loadedPlugins[plugin.split()[0]]})
            if settingsHandler.tableExists(name)==0:
                globalv.loadedPlugins[plugin.split()[0]].__init_db_tables__(name)
            if name not in [x[0] for x in settingsHandler.readSetting("'core-userlevels'", "plugin")]:
                settingsHandler.writeSetting("'core-userlevels'", ["plugin", "level"],[name, str(globalv.loadedPlugins[plugin.split()[0]].__level__())])
        else: #If the aliases dependancy isn't loaded, load it, then get rid of it afterwards.
            load_plugin(plugin.split()[0])
            globalv.loadedPlugins.update({name:globalv.loadedPlugins[plugin.split()[0]]})
            if settingsHandler.tableExists(name)==0:
                globalv.loadedPlugins[plugin.split()[0]].__init_db_tables__(name)
            if name not in [x[0] for x in settingsHandler.readSetting("'core-userlevels'", "plugin")]:
                settingsHandler.writeSetting("'core-userlevels'", ["plugin", "level"],[name, str(globalv.loadedPlugins[plugin.split()[0]].__level__())])
            unload_plugin(plugin.split()[0])
        globalv.loadedAliases.update({name:plugin})
        globalv.basePlugin[name] = plugin.split()[0]
    except Exception as detail:
        print detail
        try:
            message("Function syntax: "+globalv.commandCharacter+"alias [word] [command] [arguments]",info[2])
        except:
            print "Plugin",name,"failed to load"
    try:
        print "Adding Extensions"
        print plugin
        globalv.aliasExtensions.update({name:" "+' '.join(plugin.split()[1:])})
    except:
        globalv.aliasExtensions.update({name:''})
    if globalv.aliasExtensions[plugin.split()[0]]!="":
        try:
            #globalv.aliasExtensions.update({name:globalv.aliasExtensions[plugin.split()[0]]})
            print "Would have broken here"
        except:
            globalv.aliasExtensions.update({name:''})
コード例 #4
0
 def __init_db_tables__(self, name):
     if settingsHandler.tableExists("'" + name + "'") == False:
         settingsHandler.newTable("'" + name + "'", "answer")
         answers = [
             "As I see it, yes", "It is certain", "It is decidedly so",
             "Most likely", "Outlook good", "Signs point to yes",
             "Without a doubt", "Yes", "Yes - definitely",
             "You may rely on it", "Reply hazy, try again",
             "Ask again later", "Better not tell you now",
             "Cannot predict now", "Concentrate and ask again",
             "Don't count on it", "My reply is no", "My sources say no",
             "Outlook not so good", "Very doubtful"
         ]
         for answer in answers:
             settingsHandler.writeSetting("'" + name + "'", "answer",
                                          answer)
コード例 #5
0
def formatInput(arguments, aliases=globalv.aliasExtensions, preprocess=True):
    if settingsHandler.tableExists("'core-doNotExpand'")==False:
        settingsHandler.newTable("'core-doNotExpand'","doNotExpand")
    doNotExpand=[str(x[0]) for x in settingsHandler.readSettingRaw("'core-doNotExpand'","doNotExpand")]
    if aliases[arguments.cmd()[0]]!="":
        toAdd=aliases[arguments.cmd()[0]][1:]
        result=re.findall("\$([0-9][0-9]?[\+-]?)\$",toAdd)
        suchAThingExists=re.search('\$..?.?\$',toAdd)
        if result!=[]:
            for value in result:
                if value.find('+')==-1 and value.find('-')==-1:
                    if (len(arguments.cmd()))>int(value):
                        toAdd=toAdd.replace("$"+value+"$",arguments.cmd()[int(value)])
                    else:
                        if int(value)!=1:
                            toAdd=toAdd.replace("$"+value+"$"," ")
                        else:
                            toAdd=toAdd.replace("$"+value+"$",arguments.user())
                elif value.find('+')!=-1:
                    value=value[:-1]
                    if (len(arguments.cmd()))>(int(value)-1):
                        toAdd=toAdd.replace("$"+value+"+$",' '.join(arguments.cmd()[int(value):]))
                    else:
                        toAdd=toAdd.replace("$"+value+"+$"," ")
                elif value.find('-')!=-1:
                    value=value[:-1]
                    if (len(arguments.cmd()))>int(value):
                        toAdd=toAdd.replace("$"+value+"-$",' '.join(arguments.cmd()[1:][:int(value)]))
                    else:
                        toAdd=toAdd.replace("$"+value+"-$"," ")
        if toAdd.find('$*$')!=-1:
            toAdd=toAdd.replace('$*$',' '.join(arguments.cmd()[1:]))
        if toAdd.find('$URL$')!=-1:
            toAdd=toAdd.replace('$URL$',' '.join(arguments.cmd()[1:]).replace(' ','%20'))
        if suchAThingExists!=None:
            msg=globalv.commandCharacter+arguments.cmd()[0]+" "+toAdd
        else:
            msg=arguments.complete()[1:].split(' :',1)[1]+aliases[arguments.cmd()[0]]
        ret=arguments.complete()[1:].split(' :',1)
        ret[1]=msg
        arguments.setComplete(':'+' :'.join(ret))
    if arguments.cmd()[0] not in doNotExpand and preprocess:
        arguments=expand(arguments)

    return arguments
コード例 #6
0
ファイル: pluginHandler.py プロジェクト: JoshDreamland/xbot
def load_plugin(
        input,
        loadAs=""):  #Loads a plugin, placing it in it's correct category.
    state = 0
    #arguments=shlex.split(' '.join(input.split()[1:]))
    name = input.split()[0]
    x = __import__(name)
    if loadAs != "":
        name = loadAs
    else:
        loadAs = name
    if name in globalv.loadedPlugins:
        state = 1
    if name in globalv.loadedRealtime:
        state = 1
    if name in globalv.loadedSpecial:
        state = 1
    reload(x)
    y = x.pluginClass()
    if y.gettype() == "command":
        globalv.loadedPlugins.update({name: y})
    if y.gettype() == "realtime":
        globalv.loadedRealtime.update({name: y})
    if y.gettype() == "special":
        globalv.loadedSpecial.update({name: y})
    if y.gettype() == "preprocess":
        globalv.loadedPreprocess.update({name: y})
    if y.gettype() == "postprocess":
        globalv.loadedPostprocess.update({name: y})
    globalv.aliasExtensions.update({name: ''})
    if settingsHandler.tableExists(name) == 0:
        print 'Initializing tables for plugin "' + name + '"'
        y.__init_db_tables__(name)
    if name not in [
            x[0]
            for x in settingsHandler.readSetting("'core-userlevels'", "plugin")
    ]:
        settingsHandler.writeSetting("'core-userlevels'", ["plugin", "level"],
                                     [name, str(y.__level__())])
    globalv.basePlugin[loadAs] = input.split()[0]
    return state
コード例 #7
0
ファイル: 8ball.py プロジェクト: Phoshi/OMGbot
 def __init_db_tables__(self, name):
     if settingsHandler.tableExists("'"+name+"'")==False:
         settingsHandler.newTable("'"+name+"'","answer")
         answers=["As I see it, yes","It is certain","It is decidedly so","Most likely","Outlook good","Signs point to yes", "Without a doubt", "Yes", "Yes - definitely","You may rely on it", "Reply hazy, try again","Ask again later", "Better not tell you now","Cannot predict now","Concentrate and ask again","Don't count on it","My reply is no","My sources say no","Outlook not so good","Very doubtful"]
         for answer in answers:
             settingsHandler.writeSetting("'"+name+"'", "answer",answer)
コード例 #8
0

            send(formatOutput(returns, arguments))


if __name__=="__main__":
    #Load plugins and aliases.
    print "Loading plugins..."
    for plugin, loadAs in globalv.pluginList:
        load_plugin(plugin, loadAs)
    print "Loading aliases..."
    for line in settingsHandler.readSettingRaw("alias","aliasName, aliasPlugin, aliasArguments"):
        print line
        load_alias(line[0], ' '.join(line[1:]))
    print "Loading input sources..."
    if settingsHandler.tableExists("'core-input'"):
        for input in []: #settingsHandler.readSettingRaw("'core-input'","input, definition"):
            if input[0] not in globalv.loadedInputs.keys():
                x=__import__(str(input[1].split()[0]))
                reload(x)
                arguments=str(' '.join(input[1].split()[1:]))
                arguments=arguments.split()
                globalv.loadedInputs[input[0]]=globalv.input.addInputSource(x.asyncInput,tuple(arguments))
            else:
                globalv.loadedInputs[input[0]].put(str(input[1]))
    else:
        settingsHandler.newTable("'core-input'","input", "definition")
    for input in globalv.loadedInputs.keys():
        globalv.loadedInputs[input].put("--init--")
    globalv.input.addInputSource(asyncInput)
    print "Loading output threads..."
コード例 #9
0
ファイル: tumblrd.py プロジェクト: JoshDreamland/xbot
class pluginClass(plugin):
    def gettype(self):
        return "realtime"

    def __init__(self):
        self.lastURLs = []

    def __init_db_tables__(self, name):
        settingsHandler.newTable("tumblrdIgnores", "ignore")
        settingsHandler.newTable("tumblrd", "username", "password")

    def action(self, completeargs):
        def makeRequest(reqData, async=True):
            success = False
            failed = 0 if async else 14
            while not success:
                try:
                    con = urllib2.urlopen(req, None, 10)
                    success = True
                except:
                    failed += 1
                    print "Tumblrd failed", failed, "times."
                    if failed > 15:
                        success = True
                    time.sleep(30)

        if not settingsHandler.tableExists("tumblrdIgnores"):
            settingsHandler.newTable("tumblrdIgnores", "ignore")
        complete = completeargs.complete()[1:].split(' :', 1)
        imageFileTypes = [".jpg", ".png", ".bmp"]
        username = settingsHandler.readSetting("tumblrd", "username")
        password = settingsHandler.readSetting("tumblrd", "password")
        ignores = [
            x[0].lower()
            for x in settingsHandler.readSettingRaw("tumblrdIgnores", "ignore")
        ]
        if completeargs.channel().lower() in ignores or completeargs.user(
        ).lower() in ignores:
            return [""]
        if len(complete[0].split()) > 2:
            if complete[0].split()[1] == "PRIVMSG":
                msg = complete[1]
                sender = complete[0].split(' ')
                sender = sender[2]
                if msg.find('http://') != -1 or msg.find('https://') != -1:
                    url = re.search(".*(?P<url>https?://.+?)[\".,?!]?\s",
                                    msg + " ").group("url")
                    if url in self.lastURLs:
                        return [""]
                    else:
                        self.lastURLs.append(url)
                        if len(self.lastURLs) > 10:
                            self.lastURLs.pop(0)
                    logindata = {
                        'email':
                        username,
                        "password":
                        password,
                        "tags":
                        ','.join((completeargs.channel(), completeargs.user()))
                    }
                    if url[-4:].lower() in imageFileTypes:
                        uploaddata = {"type": "photo", "source": url}
                    elif url.lower().find("youtube.com/watch") != -1:
                        request = urllib2.urlopen(url)
                        page = request.read(10000).replace('\n', '')
                        print page
                        title = re.findall("<\s*title\s*>(.*?)</title\s*>",
                                           page, re.I)
                        print title
                        title = title[0]
                        uploaddata = {
                            "type": "video",
                            "embed": url,
                            "caption": title
                        }
                    else:
                        uploaddata = {"type": "link", "url": url}
                    logindata.update(uploaddata)
                    print logindata
                    uploadData = urllib.urlencode(logindata)
                    req = urllib2.Request("http://www.tumblr.com/api/write",
                                          uploadData)
                    print "Constructing thread..."
                    thread = threading.Thread(target=makeRequest, args=(req, ))
                    print "Launching thread..."
                    try:
                        thread.start()
                        print "Thread launched..."
                    except:
                        print "Thread failed to launch - using synchronous fallback"
                        makeRequest(req, False)
                        print "Sucessfully submitted data"
        return [""]
コード例 #10
0
 def __init_db_tables__(self, name):
     if settingsHandler.tableExists("'"+name+"'")==False:
         settingsHandler.newTable("'"+name+"'","answer")
コード例 #11
0
 def __init_db_tables__(self, name):
     if settingsHandler.tableExists("chohan") == False:
         settingsHandler.newTable("chohan", "nick", "points")
コード例 #12
0
ファイル: chohan.py プロジェクト: Phoshi/OMGbot
 def __init_db_tables__(self, name):
     if settingsHandler.tableExists("chohan")==False:
         settingsHandler.newTable("chohan", "nick","points")
コード例 #13
0
ファイル: aliasHandler.py プロジェクト: JoshDreamland/xbot
def load_alias(name, plugin):  #Loads an alias
    try:
        if plugin.split()[0] in globalv.loadedPlugins:
            if plugin.split()[0] in globalv.aliasExtensions:
                argumentsObject = pluginArguments(
                    ":nothing!nobody@nowhere PRIVMSG #NARChannel :%s%s" %
                    (globalv.commandCharacter, plugin))
                argumentsObject = formatInput(argumentsObject,
                                              globalv.aliasExtensions, False)
                plugin = argumentsObject.fullMessage()[len(globalv.
                                                           commandCharacter):]
                print plugin

            globalv.loadedPlugins.update(
                {name: globalv.loadedPlugins[plugin.split()[0]]})
            if settingsHandler.tableExists(name) == 0:
                globalv.loadedPlugins[plugin.split()[0]].__init_db_tables__(
                    name)
            if name not in [
                    x[0] for x in settingsHandler.readSetting(
                        "'core-userlevels'", "plugin")
            ]:
                settingsHandler.writeSetting("'core-userlevels'", [
                    "plugin", "level"
                ], [
                    name,
                    str(globalv.loadedPlugins[plugin.split()[0]].__level__())
                ])
        else:  #If the aliases dependancy isn't loaded, load it, then get rid of it afterwards.
            load_plugin(plugin.split()[0])
            globalv.loadedPlugins.update(
                {name: globalv.loadedPlugins[plugin.split()[0]]})
            if settingsHandler.tableExists(name) == 0:
                globalv.loadedPlugins[plugin.split()[0]].__init_db_tables__(
                    name)
            if name not in [
                    x[0] for x in settingsHandler.readSetting(
                        "'core-userlevels'", "plugin")
            ]:
                settingsHandler.writeSetting("'core-userlevels'", [
                    "plugin", "level"
                ], [
                    name,
                    str(globalv.loadedPlugins[plugin.split()[0]].__level__())
                ])
            unload_plugin(plugin.split()[0])
        globalv.loadedAliases.update({name: plugin})
        globalv.basePlugin[name] = plugin.split()[0]
    except Exception as detail:
        print detail
        try:
            message(
                "Function syntax: " + globalv.commandCharacter +
                "alias [word] [command] [arguments]", info[2])
        except:
            print "Plugin", name, "failed to load"
    try:
        print "Adding Extensions"
        print plugin
        globalv.aliasExtensions.update(
            {name: " " + ' '.join(plugin.split()[1:])})
    except:
        globalv.aliasExtensions.update({name: ''})
    if globalv.aliasExtensions[plugin.split()[0]] != "":
        try:
            #globalv.aliasExtensions.update({name:globalv.aliasExtensions[plugin.split()[0]]})
            print "Would have broken here"
        except:
            globalv.aliasExtensions.update({name: ''})
コード例 #14
0
# -*- coding: utf-8 -*-
#Startup Script
#Initialise Variables
#Super important, deleting these is a Bad Idea
import os
import sys
database=sys.argv[1] if len(sys.argv)>1 else "config.db"
if not os.path.exists("config"):
    os.makedirs("config")
import firstRun
from asyncInputHandler import inputSystem
from settingsHandler import readSetting, tableExists, readSettingRaw
#First Run checkign
if not tableExists("core"):
	firstRun.createDatabase()
	firstRun.createVariables()
	firstRun.createAutoload()
loadedPlugins={}
loadedRealtime={}
loadedSpecial={}
loadedPostprocess={}
loadedPreprocess={}
aliasExtensions={}
loadedAliases={}
accessRights={}
ignoredUsers=[]
bannedChannels=[]
timeUsers={}
channelUsers={}
loadedInputs={}
input=inputSystem()