From 6aec10fb56f0b453e4ded146b78af8baa177887e Mon Sep 17 00:00:00 2001 From: Minidodo Date: Thu, 16 Dec 2021 17:41:41 +0100 Subject: [PATCH] Fix for !lc; invalid parameters (site, PF) nolonger trigger [ERROR]'s Remove more debugging Stuff Fix for penalty timers --- core/igncore.py | 2 +- modules/core/help/about.txt | 1 - modules/onlinebot/online/org_controller.py | 2 -- modules/standard/tower/hot_controller.py | 16 +++++++++++-- modules/standard/tower/land_controller.py | 23 +++++++++++++++++-- modules/standard/tower/tower_events.py | 10 ++++---- .../standard/tower/tower_spam_controller.py | 3 --- 7 files changed, 41 insertions(+), 16 deletions(-) diff --git a/core/igncore.py b/core/igncore.py index fbf0d5f..abf93d4 100644 --- a/core/igncore.py +++ b/core/igncore.py @@ -43,7 +43,7 @@ class IgnCore: self.last_timer_event = 0 self.start_time = int(time.time()) self.major_version = "IGNCore v2.8" - self.minor_version = "1" + self.minor_version = "2" self.incoming_queue = FifoQueue() self.mass_message_queue = None self.conns = DictObject() diff --git a/modules/core/help/about.txt b/modules/core/help/about.txt index 5d7b696..914a288 100644 --- a/modules/core/help/about.txt +++ b/modules/core/help/about.txt @@ -1,4 +1,3 @@ -Our Home: https://www.aoalliance.org/ Gitlab Repository: https://gitlab.com/CynderGames/igncore IGNCore is a performance oriented Anarchy Online chatbot, diff --git a/modules/onlinebot/online/org_controller.py b/modules/onlinebot/online/org_controller.py index cd49b82..446eb16 100644 --- a/modules/onlinebot/online/org_controller.py +++ b/modules/onlinebot/online/org_controller.py @@ -164,8 +164,6 @@ class OrgController: RK5 """, result.text) for match in matches: - if int(match[2]) < 6: - continue data.append((int(match[0]), match[1], int(match[2]), match[4], start)) count += 1 self.logger.info(f"Batch {letter} done!") diff --git a/modules/standard/tower/hot_controller.py b/modules/standard/tower/hot_controller.py index 7e726e7..9b6f8c0 100644 --- a/modules/standard/tower/hot_controller.py +++ b/modules/standard/tower/hot_controller.py @@ -37,8 +37,20 @@ class TowerHotController(BaseModule): is_enabled=False) def tower_victory_event(self, _, event_data): if event_data.attacker.org_id: - self.db.exec("UPDATE towers SET penalty_until=? where org_id=?", - [time.time() + 60 * 60, event_data.attacker.org_id]) + data = self.db.query( + """SELECT pf_id, site_number, t.org_id, t.faction, penalty_until, planted, close_time + FROM towers t + LEFT JOIN all_orgs a ON a.org_id = t.org_id WHERE a.org_name = ? AND t.faction = ? AND close_time IS NOT NULL""", [event_data.attacker.org_name, event_data.attacker.faction.lower()]) + blob = [] + for row in data: + blob.append((((row.planted - time.time()) % 3600) + 3600+time.time(), row.pf_id, row.site_number, row.org_id)) + if blob: + with self.db.lock: + with self.db.pool.get_connection() as conn: + with conn.cursor() as cur: + cur.executemany("UPDATE towers SET penalty_until=? WHERE pf_id=? AND site_number=? AND org_id=?", blob) + # self.db.exec("UPDATE towers SET penalty_until=? where org_id=?", + # [time.time() + 60 * 60, event_data.attacker.org_id]) @command(command="hot", params=[Options(['tl1', 'tl2', 'tl3', 'tl4', 'tl5', 'tl6', 'tl7']), Any('faction', is_optional=True), diff --git a/modules/standard/tower/land_controller.py b/modules/standard/tower/land_controller.py index d6795f2..8a76927 100644 --- a/modules/standard/tower/land_controller.py +++ b/modules/standard/tower/land_controller.py @@ -117,6 +117,8 @@ class LandController: return ChatBlob(f"Orgs matching your search criteria ({num_orgs})", blob) data = self.get_towers_by_org(org_id) + if not data: + return f"The org {search} does not own any sites or does not exist." blob = "" ql = 0 for x in data: @@ -134,6 +136,8 @@ class LandController: return f"Could not find playfield {playfield_name}." data = self.get_towers(playfield.id, site_number) + if not data: + return f"The Site {site_number} does not exist in playfield {playfield_name}." blob = "" t = int(time.time()) @@ -157,15 +161,18 @@ class LandController: def free(self, _, ): blob = "" data = self.get_free() + if not data: + return "Currently there are no free sites. Go kill some." for row in data: blob += f"{self.format_site_info(row, time.time(), len(data))}\n" - - return ChatBlob(f"FREE Towersites ({len(data)})", blob) if blob else f"No free towersites found." + return ChatBlob(f"FREE Towersites ({len(data)})", blob) def format_site_info(self, row, t, count=0): data = row if count == 0 and data: row = data[0] + if not row: + return "Site does not exist." blob = f"{row.short_name} x{row.site_number} ({row.site_name})\n" blob += f"Level Range: {row.min_ql} - {row.max_ql} " if row.timing == 0: @@ -273,6 +280,18 @@ class LandController: "LEFT JOIN all_orgs e on a.org_id = e.org_id " "WHERE a.org_id=? GROUP BY a.pf_id, a.site_number ORDER BY ql, close_time IS NOT NULL", [org_id]) + # For some reason the Code above broke... and apparently works again now? leaving this one here, just in case. + # return self.db.query("""SELECT * FROM (SELECT COUNT(CASE WHEN name LIKE '%Turret%' THEN 1 WHEN name LIKE '%SAM Battery%' THEN 1 END) turrets, + # COUNT(CASE WHEN name LIKE '%Guard%' THEN 1 END) guard, a.pf_id, a.org_id, e.org_name, c.*, d.* FROM towers a + # LEFT JOIN aodb b ON a.high_id = b.highid + # LEFT JOIN playfields c on a.pf_id = c.id + # LEFT JOIN tower_sites d on a.pf_id = d.playfield_id and a.site_number = d.site_number + # LEFT JOIN all_orgs e on a.org_id = e.org_id + # WHERE a.org_id=? GROUP BY a.pf_id, a.site_number ORDER BY ql, close_time IS NOT NULL) t1 + # LEFT JOIN + # (SELECT * from towers a WHERE a.org_id=? AND close_time IS NOT NULL) t2 + # ON t1.pf_id=t2.pf_id AND t1.site_number = t2.site_number""", [org_id, org_id]) + def find_orgs(self, search): return self.db.query("SELECT DISTINCT a.org_name, a.org_id FROM all_orgs a " "LEFT JOIN towers b ON a.org_id = b.org_id WHERE org_name ? AND b.org_id IS NOT NULL", diff --git a/modules/standard/tower/tower_events.py b/modules/standard/tower/tower_events.py index 36f78ce..a615fda 100644 --- a/modules/standard/tower/tower_events.py +++ b/modules/standard/tower/tower_events.py @@ -94,18 +94,18 @@ class TowerEventController: faction = attack.attacker.faction org_name = attack.attacker.org_name char_info = self.pork_service.get_character_info(name) - print(attack, name, faction, org_name) - print(char_info) + # print(attack, name, faction, org_name) + # print(char_info) attack.attacker = char_info or DictObject() attack.attacker.name = name attack.attacker.faction = faction or attack.attacker.get("faction", "Unknown") attack.attacker.org_name = org_name if char_info: - print("ATTK", attack) + # print("ATTK", attack) self.event_service.fire_event(self.TOWER_ATTACK_EVENT, attack) - else: - print("WARNING", attack) + # else: + # print("WARNING", attack) def get_attack_event(self, packet: server_packets.PublicChannelMessage): diff --git a/modules/standard/tower/tower_spam_controller.py b/modules/standard/tower/tower_spam_controller.py index 6b25354..367c44a 100644 --- a/modules/standard/tower/tower_spam_controller.py +++ b/modules/standard/tower/tower_spam_controller.py @@ -24,10 +24,7 @@ class TowerSpamController: self.db = registry.get_instance("db") self.text: Text = registry.get_instance("text") self.util: Util = registry.get_instance("util") - self.tower: TowerEventController = registry.get_instance("tower_controller") - self.tc: TowerController = registry.get_instance("tower_controller") self.tac: TowerAttackController = registry.get_instance("tower_attack_controller") - self.playfield_controller: PlayfieldController = registry.get_instance("playfield_controller") self.msg_hub: MessageHubService = registry.get_instance("message_hub_service") def pre_start(self):