Beispiel #1
0
def discoverMissingItems(session):
    global __isLoaded
    if not __isLoaded:
        loadItemsFromFile()
    newInformation = False
    from kol.request.InventoryRequest import InventoryRequest
    from kol.request.ItemInformationRequest import ItemInformationRequest
    invRequest = InventoryRequest(session)
    invRequest.ignoreItemDatabase = True
    invData = invRequest.doRequest()
    for item in invData["items"]:
        if item["id"] not in __itemsById:
            try:
                itemRequest = ItemInformationRequest(session, item["id"])
                itemData = itemRequest.doRequest()
                item = itemData["item"]
                addItem(item)
                Report.trace("itemdatabase",
                             "Discovered new item: %s" % item["name"])
                context = {"item": item}
                FilterManager.executeFiltersForEvent("discoveredNewItem",
                                                     context,
                                                     session=session,
                                                     item=item)
                newInformation = True
            except:
                pass
    if newInformation or not __isLoaded:
        saveItemsToFile()
        __isLoaded = True
Beispiel #2
0
def init():
    """
    Initializes the ItemDatabase. This method should be called before the
    database is ever accessed as it ensures that the database is populated
    with all of the data it needs.
    """
    global __dbChanged
    __dbChanged = False
    loadItemsFromFile()
    global __isInitialized
    if __isInitialized == True:
        return

    Report.trace("itemdatabase", "Initializing the item database.")
    returnCode = FilterManager.executeFiltersForEvent(
        "preInitializeItemDatabase")
    if returnCode == FilterManager.FINISHED:
        Report.trace("itemdatabase", "Item database initialized.")
        __isInitialized = True
        return

    for item in Items.items:
        addItem(item)

    FilterManager.executeFiltersForEvent("postInitializeItemDatabase")
    __isInitialized = True
    Report.trace("itemdatabase", "Item database initialized.")
Beispiel #3
0
def getItemFromId(itemId, session=None):
    "Returns information about an item given its ID."
    global __dbChanged

    if not __isInitialized:
        init()

    try:
        return __itemsById[itemId].copy()
    except KeyError:
        try:
            if session is None:
                raise KeyError()
            from kol.request.ItemInformationRequest import ItemInformationRequest
            r = ItemInformationRequest(session, itemId)
            result = r.doRequest()
            item = result["item"]
            addItem(item)
            Report.trace("itemdatabase",
                         "Discovered new item: %s" % item["name"])
            context = {"item": item}
            FilterManager.executeFiltersForEvent("discoveredNewItem",
                                                 context,
                                                 session=session,
                                                 item=item)
            __dbChanged = True
            return item
        except (KeyError, Error.Error):
            raise Error.Error("Item ID %s is unknown." % itemId,
                              Error.ITEM_NOT_FOUND)
Beispiel #4
0
def discoverMissingItems(session):
    global __isLoaded
    if not __isLoaded:
        loadItemsFromFile()
    newInformation = False
    from kol.request.InventoryRequest import InventoryRequest
    from kol.request.ItemInformationRequest import ItemInformationRequest
    invRequest = InventoryRequest(session)
    invRequest.ignoreItemDatabase = True
    invData = invRequest.doRequest()
    for item in invData["items"]:
        if item["id"] not in __itemsById:
            try:
                itemRequest = ItemInformationRequest(session, item["id"])
                itemData = itemRequest.doRequest()
                item = itemData["item"]
                addItem(item)
                Report.trace("itemdatabase", "Discovered new item: %s" % item["name"])
                context = { "item" : item }
                FilterManager.executeFiltersForEvent("discoveredNewItem", context, session=session, item=item)
                newInformation = True
            except:
                pass
    if newInformation or not __isLoaded:
        saveItemsToFile()
        __isLoaded = True
Beispiel #5
0
def getQuestFromName(questName, session=None):
    if not __isInitialized:
        init()

    try:
        return __questsByName[questName].copy()
    except KeyError:
        cxt = {}
        FilterManager.executeFiltersForEvent("couldNotFindQuest", cxt, session=session, questName=questName)
        if "quest" in cxt:
            quest = cxt["quest"]
            addQuest(quest)
            return quest.copy()
        raise Error.Error("The quest '%s' is unknown." % questName, Error.QUEST_NOT_FOUND)
Beispiel #6
0
def getItemFromName(itemName, session=None):
    "Returns information about an item given its name."
    if not __isInitialized:
        init()

    try:
        return __itemsByName[itemName].copy()
    except KeyError:
        cxt = {}
        FilterManager.executeFiltersForEvent("couldNotFindItem", cxt, session=session, itemName=itemName)
        if "item" in cxt:
            item = cxt["item"]
            addItem(item)
            return item.copy()
        raise ItemNotFoundError("The item '%s' is unknown." % itemName)
Beispiel #7
0
def getSkillFromName(skillName, session=None):
    "Returns information about a skill given its name."
    if not __isInitialized:
        init()

    try:
        return __skillsByName[skillName].copy()
    except KeyError:
        cxt = {}
        FilterManager.executeFiltersForEvent("couldNotFindSkill", cxt, session=session, skillName=skillName)
        if "skill" in cxt:
            skill = cxt["skill"]
            addSkill(skill)
            return skill.copy()
        raise Error.Error("The skill '%s' is unknown." % skillName, Error.SKILL_NOT_FOUND)
Beispiel #8
0
def getItemFromDescId(descId, session=None):
    "Returns information about an item given its description ID."
    if not __isInitialized:
        init()

    try:
        return __itemsByDescId[descId].copy()
    except KeyError:
        cxt = {}
        FilterManager.executeFiltersForEvent("couldNotFindItem", cxt, session=session, descId=descId)
        if "item" in cxt:
            item = cxt["item"]
            addItem(item)
            return item.copy()
        raise ItemNotFoundError("Item with description ID %s is unknown." % descId)
Beispiel #9
0
def getSkillFromId(skillId, session=None):
    "Returns information about a skill given its ID."
    if not __isInitialized:
        init()

    try:
        return __skillsById[skillId].copy()
    except KeyError:
        cxt = {}
        FilterManager.executeFiltersForEvent("couldNotFindSkill", cxt, session=session, skillId=skillId)
        if "skill" in cxt:
            skill = cxt["skill"]
            addSkill(skill)
            return skill.copy()
        raise Error.Error("Skill ID %s is unknown." % skillId, Error.SKILL_NOT_FOUND)
Beispiel #10
0
def couldNotFindItem(context, **kwargs):
	if "session" not in kwargs:
		return
		
	session = kwargs["session"]
	item = None
	
	r = ClosetContentsRequest(session)
	r.skipParseResponse = True
	r.doRequest()
	
	if "descId" in kwargs:
		descId = kwargs["descId"]
		pattern = re.compile("<option value='([0-9]+)' descid='%s'>([^<>]*) \([0-9]+\)<\/option>" % descId)
		match = pattern.search(r.responseText)
		if match:
			item = {"id":int(match.group(1)), "descId":descId, "name":match.group(2)}
		else:
			raise ItemNotFoundError("Could not find item associated with description ID '%s'." % descId)
			
	elif "itemId" in kwargs:
		itemId = kwargs["itemId"]
		pattern = re.compile("<option value='%s' descid='([0-9]+)'>([^<>]*) \([0-9]+\)<\/option>" % itemId)
		match = pattern.search(r.responseText)
		if match:
			item = {"id":itemId, "descId":int(match.group(1)), "name":match.group(2)}
		else:
			raise ItemNotFoundError("Could not find item associated with ID '%s'." % itemId)
			
	elif "itemName" in kwargs:
		itemName = kwargs["itemName"]
		pattern = re.compile("<option value='([0-9]+)' descid='([0-9]+)'>%s \([0-9]+\)<\/option>" % itemName)
		match = pattern.search(r.responseText)
		if match:
			item = {"id":int(match.group(1)), "descId":int(match.group(2)), "name":itemName}
		else:
			raise ItemNotFoundError("Could not find item with name '%s'." % itemName)
	
	if item != None:
		r = ItemDescriptionRequest(session, item["descId"])
		itemInfo = r.doRequest()
		for k,v in itemInfo.iteritems():
			item[k] = v
		
		Report.trace("itemdatabase", "Discovered new item: %s" % item)
		
		context["item"] = item
		FilterManager.executeFiltersForEvent("discoveredNewItem", session=session, item=item)
Beispiel #11
0
def getCouncilQuestFromLevel(questLevel, session=None):
    "Returns information about a quest given its name."
    if not __isInitialized:
        init()

    #print "quest map: " + str(__councilQuestsByLevel)

    try:
        return __councilQuestsByLevel[questLevel].copy()
    except KeyError:
        cxt = {}
        FilterManager.executeFiltersForEvent("couldNotFindQuest", cxt, session=session, questLevel=questLevel)
        if "quest" in cxt:
            quest = cxt["quest"]
            addQuest(quest)
            return quest.copy()
        raise Error.Error("The guild quest for level '%s' is unknown." % questLevel, Error.QUEST_NOT_FOUND)
Beispiel #12
0
def getSkillFromId(skillId, session=None):
    "Returns information about a skill given its ID."
    if not __isInitialized:
        init()

    try:
        return __skillsById[skillId].copy()
    except KeyError:
        cxt = {}
        FilterManager.executeFiltersForEvent("couldNotFindSkill",
                                             cxt,
                                             session=session,
                                             skillId=skillId)
        if "skill" in cxt:
            skill = cxt["skill"]
            addSkill(skill)
            return skill.copy()
        raise SkillNotFoundError("Skill ID %s is unknown." % skillId)
Beispiel #13
0
def getItemFromId(itemId, session=None):
    "Returns information about an item given its ID."
    if not __isInitialized:
        init()

    try:
        return __itemsById[itemId].copy()
    except KeyError:
        cxt = {}
        FilterManager.executeFiltersForEvent("couldNotFindItem",
                                             cxt,
                                             session=session,
                                             itemId=itemId)
        if "item" in cxt:
            item = cxt["item"]
            addItem(item)
            return item.copy()
        raise ItemNotFoundError("Item ID %s is unknown." % itemId)
Beispiel #14
0
def getQuestFromName(questName, session=None):
    if not __isInitialized:
        init()

    try:
        return __questsByName[questName].copy()
    except KeyError:
        cxt = {}
        FilterManager.executeFiltersForEvent("couldNotFindQuest",
                                             cxt,
                                             session=session,
                                             questName=questName)
        if "quest" in cxt:
            quest = cxt["quest"]
            addQuest(quest)
            return quest.copy()
        raise Error.Error("The quest '%s' is unknown." % questName,
                          Error.QUEST_NOT_FOUND)
Beispiel #15
0
def getSkillFromName(skillName, session=None):
    "Returns information about a skill given its name."
    if not __isInitialized:
        init()

    try:
        return __skillsByName[skillName].copy()
    except KeyError:
        cxt = {}
        FilterManager.executeFiltersForEvent("couldNotFindSkill",
                                             cxt,
                                             session=session,
                                             skillName=skillName)
        if "skill" in cxt:
            skill = cxt["skill"]
            addSkill(skill)
            return skill.copy()
        raise SkillNotFoundError("The skill '%s' is unknown." % skillName)
Beispiel #16
0
def getItemFromName(itemName, session=None):
    "Returns information about an item given its name."
    if not __isInitialized:
        init()

    try:
        return __itemsByName[itemName].copy()
    except KeyError:
        cxt = {}
        FilterManager.executeFiltersForEvent("couldNotFindItem",
                                             cxt,
                                             session=session,
                                             itemName=itemName)
        if "item" in cxt:
            item = cxt["item"]
            addItem(item)
            return item.copy()
        raise ItemNotFoundError("The item '%s' is unknown." % itemName)
Beispiel #17
0
def runBots():
    if len(_bots) > 1:
        Report.setIncludeThreadName(True)

    FilterManager.executeFiltersForEvent("runBots")

    for bot in _bots:
        bot.start()

    try:
        while _haltEvent.isSet() == False:
            time.sleep(15)
    except KeyboardInterrupt:
        _haltEvent.set()

    Report.info("bot", "Shutting down.")

    for bot in _bots:
        bot.join()
Beispiel #18
0
def runBots():
    if len(_bots) > 1:
        Report.setIncludeThreadName(True)

    FilterManager.executeFiltersForEvent("runBots")

    for bot in _bots:
        bot.start()

    try:
        while _haltEvent.isSet() == False:
            time.sleep(15)
    except KeyboardInterrupt:
        _haltEvent.set()

    Report.info("bot", "Shutting down.")

    for bot in _bots:
        bot.join()
Beispiel #19
0
def init():
    """
    Initializes the SkillDatabase. This method should be called before the
    database is ever accessed as it ensures that the database is populated
    with all of the data it needs.
    """
    global __isInitialized
    if __isInitialized == True:
        return

    returnCode = FilterManager.executeFiltersForEvent("preInitializeSkillDatabase")
    if returnCode == FilterManager.FINISHED:
        __isInitialized = True
        return

    for skill in Skills.skills:
        addSkill(skill)

    FilterManager.executeFiltersForEvent("postInitializeSkillDatabase")
    __isInitialized = True
Beispiel #20
0
def init():
    """
    Initializes the ItemDatabase. This method should be called before the
    database is ever accessed as it ensures that the database is populated
    with all of the data it needs.
    """
    global __isInitialized
    if __isInitialized == True:
        return

    # Report.trace("itemdatabase", "Initializing the item database.")
    returnCode = FilterManager.executeFiltersForEvent("preInitializeItemDatabase")
    if returnCode == FilterManager.FINISHED:
        # Report.trace("itemdatabase", "Item database initialized.")
        __isInitialized = True
        return

    for item in Items.items:
        addItem(item)

    FilterManager.executeFiltersForEvent("postInitializeItemDatabase")
    __isInitialized = True
Beispiel #21
0
def getCouncilQuestFromLevel(questLevel, session=None):
    "Returns information about a quest given its name."
    if not __isInitialized:
        init()

    #print "quest map: " + str(__councilQuestsByLevel)

    try:
        return __councilQuestsByLevel[questLevel].copy()
    except KeyError:
        cxt = {}
        FilterManager.executeFiltersForEvent("couldNotFindQuest",
                                             cxt,
                                             session=session,
                                             questLevel=questLevel)
        if "quest" in cxt:
            quest = cxt["quest"]
            addQuest(quest)
            return quest.copy()
        raise Error.Error(
            "The guild quest for level '%s' is unknown." % questLevel,
            Error.QUEST_NOT_FOUND)
Beispiel #22
0
def init():
    """
	Initializes the SkillDatabase. This method should be called before the 
	database is ever accessed as it ensures that the database is populated
	with all of the data it needs.
	"""
    global __isInitialized
    if __isInitialized == True:
        return

    Report.trace("skilldatabase", "Initializing the skill database.")
    cxt = FilterManager.executeFiltersForEvent("preInitializeSkillDatabase")
    if "returnCode" in cxt and cxt["returnCode"] == FilterManager.FINISHED:
        Report.trace("skilldatabase", "Skill database initialized.")
        __isInitialized = True
        return

    for skill in Skills.skills:
        addSkill(skill)

    FilterManager.executeFiltersForEvent("postInitializeSkillDatabase")
    __isInitialized = True
    Report.trace("skilldatabase", "Skill database initialized.")
Beispiel #23
0
def init():
    """
    Initializes the QkillDatabase. This method should be called before the
    database is ever accessed as it ensures that the database is populated
    with all of the data it needs.
    """
    global __isInitialized
    if __isInitialized == True:
        return

    Report.trace("questdatabase", "Initializing the quest database.")
    returnCode = FilterManager.executeFiltersForEvent("preInitializeQuestDatabase")
    if returnCode == FilterManager.FINISHED:
        Report.trace("questdatabase", "Quest database initialized.")
        __isInitialized = True
        return

    for quest in Quests.quests:
        addQuest(quest)

    FilterManager.executeFiltersForEvent("postInitializeQuestDatabase")
    __isInitialized = True
    Report.trace("questdatabase", "Quest database initialized.")
Beispiel #24
0
def init():
	"""
	Initializes the SkillDatabase. This method should be called before the 
	database is ever accessed as it ensures that the database is populated
	with all of the data it needs.
	"""
	global __isInitialized
	if __isInitialized == True:
		return
	
	Report.trace("skilldatabase", "Initializing the skill database.")
	cxt = FilterManager.executeFiltersForEvent("preInitializeSkillDatabase")
	if "returnCode" in cxt and cxt["returnCode"] == FilterManager.FINISHED:
		Report.trace("skilldatabase", "Skill database initialized.")
		__isInitialized = True
		return
		
	for skill in Skills.skills:
		addSkill(skill)
	
	FilterManager.executeFiltersForEvent("postInitializeSkillDatabase")
	__isInitialized = True
	Report.trace("skilldatabase", "Skill database initialized.")
Beispiel #25
0
def init():
    """
    Initializes the QkillDatabase. This method should be called before the
    database is ever accessed as it ensures that the database is populated
    with all of the data it needs.
    """
    global __isInitialized
    if __isInitialized == True:
        return

    Report.trace("questdatabase", "Initializing the quest database.")
    returnCode = FilterManager.executeFiltersForEvent(
        "preInitializeQuestDatabase")
    if returnCode == FilterManager.FINISHED:
        Report.trace("questdatabase", "Quest database initialized.")
        __isInitialized = True
        return

    for quest in Quests.quests:
        addQuest(quest)

    FilterManager.executeFiltersForEvent("postInitializeQuestDatabase")
    __isInitialized = True
    Report.trace("questdatabase", "Quest database initialized.")
Beispiel #26
0
    # Load the config file
    config = alea.config.AleabotConfig(rng)
    config.load(basepath)

    # Set up console and file logging
    Report.setOutputLevel(config.get("report_level"))
    log_file = config.get("log_file")
    if log_file != "":
        log_file_full_path = os.path.join(basepath, log_file)
        Report.registerLog(
            os.path.dirname(log_file_full_path), os.path.basename(log_file_full_path), ["*"], config.get("log_level")
        )

    # Create and register our custom bot filter
    alea.AleabotFilter.init(rng, config)
    FilterManager.registerFilterForEvent(alea.AleabotFilter, "botProcessChat")
    FilterManager.registerFilterForEvent(alea.AleabotFilter, "botProcessKmail")
    FilterManager.registerFilterForEvent(alea.AleabotFilter, "botEndCycle")
    FilterManager.registerFilterForEvent(alea.AleabotFilter, "botPreLogin")

    # Start the bot manager
    BotManager.init()

    # Create and run the bot
    params = {}
    params["doWork:chat"] = True
    params["doWork:kmail"] = True
    params["userName"] = config.get("username")
    params["userPassword"] = config.get("password")
    params["timeToSleep"] = config.get("time_to_sleep")
    b = Bot(params)