From ec7b57260d0036cd72aed914550b74a673c1dc80 Mon Sep 17 00:00:00 2001 From: KEriks Date: Tue, 10 Aug 2021 09:33:53 +0300 Subject: [PATCH] Added slugs Some fixes --- dbot/constants.py | 224 +++++++++++++++++++++++++++++++++++++------- dbot/discord_bot.py | 2 +- dbot/tests.py | 19 +++- 3 files changed, 208 insertions(+), 37 deletions(-) diff --git a/dbot/constants.py b/dbot/constants.py index eda2f66..fb72644 100644 --- a/dbot/constants.py +++ b/dbot/constants.py @@ -11,94 +11,250 @@ citizen = r"[\w\(\)\-\. \d]+" class EventKind(NamedTuple): + slug: str name: str regex: re.Pattern format: str events = [ - EventKind("Region attacked", re.compile(rf"(?P{country}) attacked (?P{region}), (?P{country})"), "{invader} attacked {defender} ({region})"), EventKind( + "region_attacked", + "Region attacked", + re.compile(rf"(?P{country}) attacked (?P{region}), (?P{country})"), + "{invader} attacked {defender} ({region})", + ), + EventKind( + "region_secured", "Region secured", re.compile(rf"(?P{region}) was secured by (?P{country}) in the war versus (?P{country})?"), "{defender} defended {invader}'s attack ({region})", ), EventKind( + "region_conquered", "Region conquered", re.compile(rf"(?P{region}) was conquered by (?P{country}) in the war versus (?P{country})"), "{invader} conquered {region} from {defender}", ), - EventKind("War declared", re.compile(rf"(?P{country}) declared war on (?P{country})"), "{invader} declared war against {defender}"), EventKind( + "war_declared", + "War declared", + re.compile(rf"(?P{country}) declared war on (?P{country})"), + "{invader} declared war against {defender}", + ), + EventKind( + "war_declaration", "War declaration", re.compile(rf"President of (?P{country}) proposed a war declaration against (?P{country})"), "{invader} proposed a war declaration on {defender}", ), EventKind( - "War rejected", re.compile(rf"The proposal for declaring war against (?P{country}) was rejected."), "{current_country} rejected war declaration on {defender}" - ), - EventKind("MPP proposed", re.compile(rf"President of (?P{country}) proposed an alliance with (?P{country})"), "{country} proposed MPP with {partner}"), - EventKind("MPP approved", re.compile(rf"(?P{country}) signed an alliance with (?P{country})"), "{country} signed a MPP with {partner}"), - EventKind( - "MPP rejected", re.compile(rf"The alliance between (?P{country}) and (?P{country}) was rejected"), "MPP between {country} and {partner} was rejected" + "war_rejected", + "War rejected", + re.compile(rf"The proposal for declaring war against (?P{country}) was rejected."), + "{current_country} rejected war declaration on {defender}", ), EventKind( + "mpp_proposed", + "MPP proposed", + re.compile(rf"President of (?P{country}) proposed an alliance with (?P{country})"), + "{country} proposed MPP with {partner}", + ), + EventKind( + "mpp_approved", + "MPP approved", + re.compile(rf"(?P{country}) signed an alliance with (?P{country})"), + "{country} signed a MPP with {partner}", + ), + EventKind( + "mpp_rejected", + "MPP rejected", + re.compile(rf"The alliance between (?P{country}) and (?P{country}) was rejected"), + "MPP between {country} and {partner} was rejected", + ), + EventKind( + "airstrike_proposed", "Airstrike proposed", re.compile(rf"President of (?P{country}) proposed an airstrike against (?P{country})"), "{invader} proposed an airstrike against {defender}", ), - EventKind("Airstrike approved", re.compile(rf"(?P{country}) prepares an airstrike on (?P{country})"), "{invader} approved an airstrike against {defender}"), - EventKind("Airstrike rejected", re.compile(rf"The airstrike on (?P{country}) was rejected"), "{current_country} rejected the airstrike against {defender}"), EventKind( + "airstrike_approved", + "Airstrike approved", + re.compile(rf"(?P{country}) prepares an airstrike on (?P{country})"), + "{invader} approved an airstrike against {defender}", + ), + EventKind( + "airstrike_rejected", + "Airstrike rejected", + re.compile(rf"The airstrike on (?P{country}) was rejected"), + "{current_country} rejected the airstrike against {defender}", + ), + EventKind( + "ne_proposed", "NE proposed", re.compile(rf"(?P{country}) has declared (?P{country}) as a Natural Enemy"), "{invader} proposed Natural Enemy declaration against {defender}", ), - EventKind("NE approved", re.compile(rf"(?P{country}) has been proposed as Natural Enemy"), "{current_country} declared {defender} as Natural Enemy"), - EventKind("NE rejected", re.compile(rf"(?P{country}) as new Natural Enemy proposal has been rejected"), "{current_country} rejected {defender} as Natural Enemy"), - EventKind("NE stopped", re.compile(rf"(?P{country}) is no longer a Natural Enemy for (?P{country})"), "{invader} removed Natural Enemy from {defender}"), - EventKind("NE cleared", re.compile(rf"(?P{country}) no longer has a Natural Enemy"), "{country} no longer has a Natural Enemy"), - EventKind("NE reset", re.compile("No Natural Enemy law has been proposed."), "{current_country} has proposed to clear Natural Enemy"), EventKind( + "ne_approved", + "NE approved", + re.compile(rf"(?P{country}) has been proposed as Natural Enemy"), + "{current_country} declared {defender} as Natural Enemy", + ), + EventKind( + "ne_rejected", + "NE rejected", + re.compile(rf"(?P{country}) as new Natural Enemy proposal has been rejected"), + "{current_country} rejected {defender} as Natural Enemy", + ), + EventKind( + "ne_stopped", + "NE stopped", + re.compile(rf"(?P{country}) is no longer a Natural Enemy for (?P{country})"), + "{invader} removed Natural Enemy from {defender}", + ), + EventKind( + "ne_cleared", + "NE cleared", + re.compile(rf"(?P{country}) no longer has a Natural Enemy"), + "{country} no longer has a Natural Enemy", + ), + EventKind( + "ne_reset", + "NE reset", + re.compile("No Natural Enemy law has been proposed."), + "{current_country} has proposed to clear Natural Enemy", + ), + EventKind( + "peace_proposal", "Peace proposal", re.compile(rf"President of (?P{country}) proposed a peace in the war against (?P{country})"), "{defender} proposed peace against {invader}", ), - EventKind("Peace proposal", re.compile(rf"(?P{country}) proposed peace in the war against (?P{country})"), "{defender} proposed peace against {invader}"), - EventKind("Peace approved", re.compile(rf"(?P{country}) signed a peace treaty with (?P{country})"), "{invader} and {defender} is not in peace"), EventKind( + "peace_proposal", + "Peace proposal", + re.compile(rf"(?P{country}) proposed peace in the war against (?P{country})"), + "{defender} proposed peace against {invader}", + ), + EventKind( + "peace_approved", + "Peace approved", + re.compile(rf"(?P{country}) signed a peace treaty with (?P{country})"), + "{invader} and {defender} is not in peace", + ), + EventKind( + "peace_rejected", "Peace rejected", re.compile(rf"The proposed peace treaty between (?P{country}) and (?P{country}) was rejected"), "{defender} and {invader} did not sign a peace treaty", ), EventKind( - "Embargo proposed", re.compile(rf"President of (?P{country}) proposed to stop the trade with (?P{country})"), "{major} proposed trade embargo against {minor}" + "embargo_proposed", + "Embargo proposed", + re.compile(rf"President of (?P{country}) proposed to stop the trade with (?P{country})"), + "{major} proposed trade embargo against {minor}", ), - EventKind("Embargo approved", re.compile(rf"(?P{country}) stopped trading with (?P{country})"), "{major} declared trade ambargo against {minor}"), - EventKind("Donation proposed", re.compile(rf"A congress donation to (?P{citizen}) was proposed"), "{current_country} proposed a donation to {org}"), - EventKind("Donation approved", re.compile(rf"(?P{country}) made a donation to (?P{citizen})"), "{current_country} approved a donation to {org}"), - EventKind("Donation rejected", re.compile(rf"The proposal for a congress donation to (?P{citizen}) was rejected"), "{current_country} rejected a donation to {org}"), - EventKind("RW started", re.compile(rf"A resistance has started in (?P{region})"), "Resistance war was opened in {region} ({current_country})"), EventKind( + "embargo_approved", + "Embargo approved", + re.compile(rf"(?P{country}) stopped trading with (?P{country})"), + "{major} declared trade ambargo against {minor}", + ), + EventKind( + "donation_proposed", + "Donation proposed", + re.compile(rf"A congress donation to (?P{citizen}) was proposed"), + "{current_country} proposed a donation to {org}", + ), + EventKind( + "donation_approved", + "Donation approved", + re.compile(rf"(?P{country}) made a donation to (?P{citizen})"), + "{current_country} approved a donation to {org}", + ), + EventKind( + "donation_rejected", + "Donation rejected", + re.compile(rf"The proposal for a congress donation to (?P{citizen}) was rejected"), + "{current_country} rejected a donation to {org}", + ), + EventKind( + "rw_started", + "RW started", + re.compile(rf"A resistance has started in (?P{region})"), + "Resistance war was opened in {region} ({current_country})", + ), + EventKind( + "res_concession", "Res Concession", re.compile( rf"A Resource Concession law to //www.erepublik.com(?P{country}) " - + rf'has been (?P.*?)' + rf'has been (?P.*?)' ), "Resource Concession law between {current_country} and {target} has been {result}", ), EventKind( - "CP impeachment", re.compile(rf"A president impeachment against (?P{citizen}) was proposed"), "Impeachment against {cp} president of {current_country} was proposed" + "cp_impeachment", + "CP impeachment", + re.compile(rf"A president impeachment against (?P{citizen}) was proposed"), + "Impeachment against {cp} president of {current_country} was proposed", + ), + EventKind( + "cp_impeachment", + "CP impeachment", + re.compile("The president impeachment proposal has been rejected"), + "Impeachment against president of {current_country} was rejected", + ), + EventKind( + "min_wage_proposed", + "Minimum Wage proposed", + re.compile("A new minimum wage was proposed"), + "A new minimum wage in {current_country} was proposed", + ), + EventKind( + "min_wage_rejected", + "Minimum Wage rejected", + re.compile("The proposal for a minimum wage change was rejected"), + "The new minimum wage proposal in {current_country} was rejected", + ), + EventKind( + "worktax_approved", + "WorkTax approved", + re.compile(rf"(?P{country}) now has a new Work Tax"), + "{country} has new Work Tax", + ), + EventKind( + "worktax_proposed", + "WorkTax proposed", + re.compile("A new Work Tax was proposed"), + "{country} proposed a new Work Tax", + ), + EventKind( + "worktax_rejected", + "WorkTax rejected", + re.compile("The proposal for a new Work Tax was rejected"), + "{country} rejected new Work Tax", + ), + EventKind( + "product_tax_approved", + "Product Tax approved", + re.compile(r"Taxes for (?P[\w ]+) changed"), + "{current_country} changed taxes for {product}", + ), + EventKind( + "product_tax_rejected", + "Product Tax rejected", + re.compile(r"Tax proposal of tax changes for (?P[\w ]+) were rejected"), + "{current_country} rejected new taxes for {product}", + ), + EventKind( + "product_tax_proposed", + "Product Tax proposed", + re.compile(r"New taxes for (?P[\w ]+) were proposed"), + "{current_country} proposed new taxes for {product}", ), - EventKind("CP impeachment", re.compile("The president impeachment proposal has been rejected"), "Impeachment against president of {current_country} was rejected"), - EventKind("Minimum Wage", re.compile("A new minimum wage was proposed"), "A new minimum wage in {current_country} was proposed"), - EventKind("Minimum Wage", re.compile("The proposal for a minimum wage change was rejected"), "The new minimum wage proposal in {current_country} was rejected"), - EventKind("WorkTax", re.compile(rf"(?P{country}) now has a new Work Tax"), "{country} has new Work Tax"), - EventKind("WorkTax", re.compile("A new Work Tax was proposed"), "{country} proposed a new Work Tax"), - EventKind("WorkTax", re.compile("The proposal for a new Work Tax was rejected"), "{country} rejected new Work Tax"), - EventKind("Product Tax", re.compile(r"Taxes for (?P[\w ]+) changed"), "{current_country} changed taxes for {product}"), - EventKind("Product Tax", re.compile(r"Tax proposal of tax changes for (?P[\w ]+) were rejected"), "{current_country} rejected new taxes for {product}"), - EventKind("Product Tax", re.compile(r"New taxes for (?P[\w ]+) were proposed"), "{current_country} proposed new taxes for {product}"), ] UTF_FLAG = { diff --git a/dbot/discord_bot.py b/dbot/discord_bot.py index 16c40ff..58472b6 100644 --- a/dbot/discord_bot.py +++ b/dbot/discord_bot.py @@ -144,7 +144,7 @@ class MyClient(discord.Client): logger.debug(kind.format.format(**dict(match.groupdict(), **{"current_country": country.name}))) is_latvia = country.id == 71 has_latvia = any("Latvia" in v for v in values.values()) - is_defender = (kind.name == "Region decured" and country.name in values['defender']) + is_defender = kind.name == "Region ecured" and country.name in values["defender"] if is_latvia and has_latvia and is_defender: text = kind.format.format(**dict(match.groupdict(), **{"current_country": country.name})) title = kind.name diff --git a/dbot/tests.py b/dbot/tests.py index d21ff30..1c72c40 100644 --- a/dbot/tests.py +++ b/dbot/tests.py @@ -1,13 +1,14 @@ import unittest +import re from sqlite_utils.db import NotFoundError -from dbot.db import DiscordDB +from dbot import constants, db class TestDatabase(unittest.TestCase): def setUp(self): - self.db = DiscordDB() + self.db = db.DiscordDB() def test_member(self): member = {"id": 1200, "name": "username"} @@ -43,3 +44,17 @@ class TestDatabase(unittest.TestCase): self.assertEqual(self.db.get_rss_feed_timestamp(71), 0.0) self.db.set_rss_feed_timestamp(71, 16000000) self.assertEqual(self.db.get_rss_feed_timestamp(71), 16000000.0) + + +class TestRegexes(unittest.TestCase): + def test_events(self): + for event in constants.events: + self.assertTrue(isinstance(event, constants.EventKind)) + self.assertTrue(event.slug) + self.assertTrue(event.name) + self.assertTrue(isinstance(event.regex, re.Pattern)) + self.assertTrue(event.format) + + +if __name__ == '__main__': + unittest.main()