diff --git a/db.py b/db.py index 0db4899..600b0dc 100644 --- a/db.py +++ b/db.py @@ -1,4 +1,4 @@ -from typing import List, Union, Dict +from typing import List, Union, Dict, Optional from sqlite_utils import Database from sqlite_utils.db import NotFoundError @@ -26,12 +26,13 @@ class DiscordDB: pk="id", not_null={"id", "member_id", "player_id"}) self._db['hunted'].create_index(["member_id", "player_id"], unique=True) - if "medals" not in self._db.table_names(): - self._db.create_table("medals", - dict(id=int, player_id=int, battle_id=int, division_id=int, side_id=int, damage=int), - 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 "medals" in self._db.table_names(): + self._db['medals'].drop() + self._db.create_table("medals", + dict(id=int, player_id=int, battle_id=int, division_id=int, side_id=int, damage=int), + 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") @@ -49,7 +50,7 @@ class DiscordDB: # Player methods - def get_player(self, pid: int) -> Union[Dict[str, Union[int, str]], None]: + def get_player(self, pid: int) -> Optional[Dict[str, Union[int, str]]]: """Get Player :param pid: int Player ID diff --git a/discord_bot.py b/discord_bot.py index 5e129be..2566900 100644 --- a/discord_bot.py +++ b/discord_bot.py @@ -31,6 +31,7 @@ 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)', 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'} + 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', @@ -123,18 +124,21 @@ class MyClient(discord.Client): for side, side_data in div['stats'].items(): if side_data and side_data['citizenId'] in hunted_ids: pid = side_data['citizenId'] - medal_key = (pid, bid, div['div'], battle[side]['id'], side_data['damage']) + medal_key = (pid, battle['id'], div['div'], battle[side]['id'], side_data['damage']) if not DB.check_medal(*medal_key): for member in DB.get_members_to_notify(pid): + format_data = dict(author=member, player=DB.get_player(pid)['name'], battle=bid, region=battle.get('region').get('name'), - division=div, dmg=side_data['damage'], side=COUNTRIES[side]) + division=div['div'], dmg=side_data['damage'], + side=COUNTRIES[battle[side]['id']]) + 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) ) - DB.add_reported_medal(pid, bid, div, side, side_data['damage']) + DB.add_reported_medal(*medal_key) sleep_seconds = r.get('last_updated') + 60 - self.timestamp await asyncio.sleep(sleep_seconds if sleep_seconds > 0 else 0)