This commit is contained in:
Eriks Karls 2020-01-02 14:27:40 +02:00
parent 365582dcc3
commit 5fe43c7251
2 changed files with 17 additions and 12 deletions

17
db.py
View File

@ -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

View File

@ -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)