tweaks
This commit is contained in:
parent
25ec54994e
commit
3e3071b185
33
db.py
33
db.py
@ -14,22 +14,32 @@ class DiscordDB:
|
|||||||
self._db = Database(memory=True)
|
self._db = Database(memory=True)
|
||||||
else:
|
else:
|
||||||
self._db = Database(self._name)
|
self._db = Database(self._name)
|
||||||
self._db.create_table("member", {"id": int, "name": str, "mention_number": int},
|
if "member" not in self._db.table_names():
|
||||||
pk="id", not_null={"id", "name", "mention_number"})
|
self._db.create_table("member", {"id": int, "name": str, "mention_number": int},
|
||||||
|
pk="id", not_null={"id", "name", "mention_number"})
|
||||||
|
|
||||||
self._db.create_table("player", {"id": int, "name": str}, pk="id", not_null={"id", "name"})
|
if "player" not in self._db.table_names():
|
||||||
|
self._db.create_table("player", {"id": int, "name": str}, pk="id", not_null={"id", "name"})
|
||||||
|
|
||||||
self._db.create_table("hunted", {"id": int, "member_id": int, "player_id": int},
|
if "hunted" not in self._db.table_names():
|
||||||
pk="id", not_null={"id", "member_id", "player_id"})
|
self._db.create_table("hunted", {"id": int, "member_id": int, "player_id": int},
|
||||||
|
pk="id", not_null={"id", "member_id", "player_id"})
|
||||||
|
self._db['hunted'].create_index(["member_id", "player_id"], unique=True)
|
||||||
|
|
||||||
self._db.create_table("medals", not_null={"id", "player_id", "battle_id", "division_id", "side_id", "damage"},
|
if "medals" not in self._db.table_names():
|
||||||
columns=dict(id=int, player_id=int, battle_id=int, division_id=int, side_id=int,
|
self._db.create_table("medals",
|
||||||
damage=int), pk="id", defaults={"damage": 0})
|
dict(id=int, player_id=int, battle_id=int, division_id=int, side_id=int, damage=int),
|
||||||
self._db.create_view("hunted_players", "select distinct player_id from hunted")
|
not_null={"id", "player_id", "battle_id", "division_id", "side_id", "damage"},
|
||||||
|
pk="id", defaults={"damage": 0})
|
||||||
|
self._db['medals'].create_index(["player_id", "battle_id", "division_id", "side_id"], unique=True)
|
||||||
|
|
||||||
|
if "hunted_players" not in self._db.view_names():
|
||||||
|
self._db.create_view("hunted_players", "select distinct player_id from hunted")
|
||||||
|
|
||||||
self._db.add_foreign_keys([("hunted", "member_id", "member", "id"),
|
self._db.add_foreign_keys([("hunted", "member_id", "member", "id"),
|
||||||
("hunted", "player_id", "player", "id"),
|
("hunted", "player_id", "player", "id"),
|
||||||
("medals", "player_id", "player", "id")])
|
("medals", "player_id", "player", "id")])
|
||||||
|
self._db.vacuum()
|
||||||
|
|
||||||
self.member = self._db.table("member")
|
self.member = self._db.table("member")
|
||||||
self.player = self._db.table("player")
|
self.player = self._db.table("player")
|
||||||
@ -37,9 +47,6 @@ class DiscordDB:
|
|||||||
self.medals = self._db.table("medals")
|
self.medals = self._db.table("medals")
|
||||||
self.hunted_players = self._db.table("hunted_players")
|
self.hunted_players = self._db.table("hunted_players")
|
||||||
|
|
||||||
self.medals.create_index(["player_id", "battle_id", "division_id", "side_id"], unique=True)
|
|
||||||
self.hunted.create_index(["member_id", "player_id"], unique=True)
|
|
||||||
|
|
||||||
# Player methods
|
# Player methods
|
||||||
|
|
||||||
def get_player(self, pid: int) -> Union[Dict[str, Union[int, str]], None]:
|
def get_player(self, pid: int) -> Union[Dict[str, Union[int, str]], None]:
|
||||||
@ -159,7 +166,7 @@ class DiscordDB:
|
|||||||
return True
|
return True
|
||||||
|
|
||||||
def delete_medals(self, bid: List[int]):
|
def delete_medals(self, bid: List[int]):
|
||||||
self.medals.delete_where("battle_id in (%s)" % "?"*len(bid), bid)
|
self.medals.delete_where("battle_id in (%s)" % "?" * len(bid), bid)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def check_hunt(self, pid: int, member_id: int) -> bool:
|
def check_hunt(self, pid: int, member_id: int) -> bool:
|
||||||
|
@ -31,6 +31,17 @@ COUNTRIES = {1: 'Romania', 9: 'Brazil', 10: 'Italy', 11: 'France', 12: 'Germany'
|
|||||||
78: 'Colombia', 79: 'Republic of Macedonia (FYROM)', 80: 'Montenegro', 81: 'Republic of China (Taiwan)',
|
78: 'Colombia', 79: 'Republic of Macedonia (FYROM)', 80: 'Montenegro', 81: 'Republic of China (Taiwan)',
|
||||||
82: 'Cyprus', 83: 'Belarus', 84: 'New Zealand', 164: 'Saudi Arabia', 165: 'Egypt',
|
82: 'Cyprus', 83: 'Belarus', 84: 'New Zealand', 164: 'Saudi Arabia', 165: 'Egypt',
|
||||||
166: 'United Arab Emirates', 167: 'Albania', 168: 'Georgia', 169: 'Armenia', 170: 'Nigeria', 171: 'Cuba'}
|
166: 'United Arab Emirates', 167: 'Albania', 168: 'Georgia', 169: 'Armenia', 170: 'Nigeria', 171: 'Cuba'}
|
||||||
|
FLAGS = {1: 'flag_ro', 9: 'flag_br', 10: 'flag_it', 11: 'flag_fr', 12: 'flag_de', 13: 'flag_hu', 14: 'flag_cn',
|
||||||
|
15: 'flag_sp', 23: 'flag_ca', 24: 'flag_us', 26: 'flag_mx', 27: 'flag_ar', 28: 'flag_ve', 29: 'flag_gb',
|
||||||
|
30: 'flag_ch', 31: 'flag_nl', 32: 'flag_be', 33: 'flag_at', 34: 'flag_cz', 35: 'flag_pl', 36: 'flag_sk',
|
||||||
|
37: 'flag_no', 38: 'flag_se', 39: 'flag_fi', 40: 'flag_ua', 41: 'flag_ru', 42: 'flag_bg', 43: 'flag_tr',
|
||||||
|
44: 'flag_gr', 45: 'flag_jp', 47: 'flag_sk', 48: 'flag_in', 49: 'flag_id', 50: 'flag_au', 51: 'flag_za',
|
||||||
|
52: 'flag_md', 53: 'flag_pt', 54: 'flag_ie', 55: 'flag_de', 56: 'flag_ir', 57: 'flag_pk', 58: 'flag_il',
|
||||||
|
59: 'flag_th', 61: 'flag_si', 63: 'flag_hr', 64: 'flag_cl', 65: 'flag_sr', 66: 'flag_my', 67: 'flag_ph',
|
||||||
|
68: 'flag_sg', 69: 'flag_ba', 70: 'flag_ee', 71: 'flag_lv', 72: 'flag_lt', 73: 'flag_kp', 74: 'flag_uy',
|
||||||
|
75: 'flag_py', 76: 'flag_bo', 77: 'flag_pe', 78: 'flag_co', 79: 'flag_mk', 80: 'flag_me', 81: 'flag_tw',
|
||||||
|
82: 'flag_cy', 83: 'flag_by', 84: 'flag_nz', 164: 'flag_sa', 165: 'flag_eg', 166: 'flag_ae', 167: 'flag_al',
|
||||||
|
168: 'flag_ge', 169: 'flag_am', 170: 'flag_ng', 171: 'flag_cu'}
|
||||||
|
|
||||||
|
|
||||||
__last_battle_request = None
|
__last_battle_request = None
|
||||||
@ -71,10 +82,13 @@ def get_medals(division: int):
|
|||||||
for division_data in battle.get('div', {}).values():
|
for division_data in battle.get('div', {}).values():
|
||||||
if not division_data.get('end') and division_data.get('div') == division:
|
if not division_data.get('end') and division_data.get('div') == division:
|
||||||
for side, stat in division_data['stats'].items():
|
for side, stat in division_data['stats'].items():
|
||||||
|
data = dict(id=battle.get('id'), country_id=battle.get(side).get('id'),
|
||||||
|
time=request_time - start_time, dmg=0)
|
||||||
if stat:
|
if stat:
|
||||||
yield dict(
|
data.update(dmg=division_data['stats'][side]['damage'])
|
||||||
id=battle.get('id'), country=COUNTRIES[battle.get('inv').get('id')],
|
yield data
|
||||||
dmg=division_data['stats'][side]['damage'], time=request_time - start_time)
|
else:
|
||||||
|
yield data
|
||||||
|
|
||||||
|
|
||||||
class MyClient(discord.Client):
|
class MyClient(discord.Client):
|
||||||
@ -99,10 +113,8 @@ class MyClient(discord.Client):
|
|||||||
|
|
||||||
async def report_medal(self, pid: int, bid: int, div: int, side: int, dmg: int, region_name: str):
|
async def report_medal(self, pid: int, bid: int, div: int, side: int, dmg: int, region_name: str):
|
||||||
for member in DB.get_members_to_notify(pid):
|
for member in DB.get_members_to_notify(pid):
|
||||||
format_data = dict(author=member, player=DB.get_player(pid)['name'], battle=bid,
|
format_data = dict(author=member, player=DB.get_player(pid)['name'], battle=bid, region=region_name,
|
||||||
region=region_name,
|
division=div, dmg=dmg, side=COUNTRIES[side])
|
||||||
division=div, dmg=dmg,
|
|
||||||
side=COUNTRIES[side])
|
|
||||||
await self.get_channel(603527159109124096).send(
|
await self.get_channel(603527159109124096).send(
|
||||||
"<@{author}> {player} detected in battle for {region} on {side} side in d{division} with {dmg:,d}dmg\n"
|
"<@{author}> {player} detected in battle for {region} on {side} side in d{division} with {dmg:,d}dmg\n"
|
||||||
"https://www.erepublik.com/en/military/battlefield/{battle}".format(**format_data)
|
"https://www.erepublik.com/en/military/battlefield/{battle}".format(**format_data)
|
||||||
@ -193,12 +205,14 @@ if __name__ == "__main__":
|
|||||||
cheap_bhs = [] # Battle id, Side, damage, round time
|
cheap_bhs = [] # Battle id, Side, damage, round time
|
||||||
for division_data in get_medals(division):
|
for division_data in get_medals(division):
|
||||||
if division_data['dmg'] < damage:
|
if division_data['dmg'] < damage:
|
||||||
|
division_data['flag'] = FLAGS[division_data['country_id']]
|
||||||
|
division_data['country'] = COUNTRIES[division_data['country_id']]
|
||||||
cheap_bhs.append(division_data)
|
cheap_bhs.append(division_data)
|
||||||
|
|
||||||
if cheap_bhs:
|
if cheap_bhs:
|
||||||
cheap_bhs = sorted(cheap_bhs, key=lambda _: _['time'])
|
cheap_bhs = sorted(cheap_bhs, key=lambda _: _['time'])
|
||||||
cheap_bhs.reverse()
|
cheap_bhs.reverse()
|
||||||
msg = "\n".join(["{dmg:,d}dmg medal for {country}, {time} round time "
|
msg = "\n".join(["{dmg:,d}dmg for :{flag}: {country}, {time} round time "
|
||||||
"https://www.erepublik.com/en/military/battlefield/{id}".format(**bh) for bh in cheap_bhs])
|
"https://www.erepublik.com/en/military/battlefield/{id}".format(**bh) for bh in cheap_bhs])
|
||||||
if len(msg) > 2000:
|
if len(msg) > 2000:
|
||||||
msg = "\n".join(msg[:2000].split('\n')[:-1])
|
msg = "\n".join(msg[:2000].split('\n')[:-1])
|
||||||
|
Loading…
x
Reference in New Issue
Block a user