From ea87f07471617051cffddc9fec2f3252540a7484 Mon Sep 17 00:00:00 2001 From: Danilo Canalle Date: Mon, 28 Dec 2020 20:41:44 -0300 Subject: [PATCH 1/3] Add support to Discord Listener --- .gitignore | 6 ++++++ README.md | 2 ++ bot/configparser.py | 4 +++- bot/listeners.py | 33 +++++++++++++++++++++++++++++++++ config.yaml | 2 ++ 5 files changed, 46 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 894a44c..de97b56 100644 --- a/.gitignore +++ b/.gitignore @@ -102,3 +102,9 @@ venv.bak/ # mypy .mypy_cache/ + + +# personal things +*.txt +rhea.config.yaml +tarazed.config.yaml \ No newline at end of file diff --git a/README.md b/README.md index a1bdf9c..7978548 100644 --- a/README.md +++ b/README.md @@ -50,6 +50,8 @@ listeners: telegram: api_token: chat_id: + discord: + webhook_url: bot: listeners: [telegram] ``` diff --git a/bot/configparser.py b/bot/configparser.py index 1676dbf..140b2f8 100644 --- a/bot/configparser.py +++ b/bot/configparser.py @@ -3,7 +3,7 @@ import requests import yaml -from bot.listeners import TelegramListener, AlertListener +from bot.listeners import TelegramListener, DiscordListener, AlertListener from bot.protocol import SendExpedition from ogame.game.const import Ship, CoordsType, Resource from ogame.game.model import Coordinates @@ -109,6 +109,8 @@ def load_config(file): def _initialize_listener(name, config): if name == 'telegram': return TelegramListener(**config) + elif name == 'discord': + return DiscordListener(**config) elif name == 'alert': return AlertListener(**config) else: diff --git a/bot/listeners.py b/bot/listeners.py index 2664557..c090fa3 100644 --- a/bot/listeners.py +++ b/bot/listeners.py @@ -70,7 +70,40 @@ def _send_message_url(self): def _api_url(self): return f'https://api.telegram.org/bot{self.api_token}' +class DiscordListener(Listener): + def __init__(self, webhook_url): + self.webhook_url = webhook_url + def notify(self, notification): + message = parse_notification(notification) + if message: + # message = self._escape_markdown_string(message) + self._send_message(message) + + def notify_exception(self, exception): + # print(exception) + message = parse_exception(exception) + self._send_message(message) + + def _send_message(self, message): + try: + response = requests.post( + self.webhook_url, + timeout=5, + data={'content': message}) + if not response.status_code == 204: + response = response.json() + logging.error(f'Failed to send discord message: {response.get("message")}') + except requests.exceptions.RequestException: + logging.exception('Exception thrown while sending a discord message.') + except ValueError: + logging.exception('Exception thrown while parsing the response.') + + @staticmethod + def _escape_markdown_string(string): + for c in '_[]()~>#+-=|{}.!': + string = string.replace(c, f'\\{c}') + return string class AlertListener(Listener): def __init__(self, wakeup_wav=None, error_wav=None): self._check_wav_file(wakeup_wav, raise_exc=True) diff --git a/config.yaml b/config.yaml index be27e68..5b579c2 100644 --- a/config.yaml +++ b/config.yaml @@ -11,6 +11,8 @@ listeners: telegram: api_token: # unique authentication token of the telegram bot; see https://core.telegram.org/bots/api chat_id: # id of the chat between you and the telegram bot + discord: + webhook_url: # discord webhook url alert: wakeup_wav: # path to .wav file which will be played on every wake-up error_wav: # path to .wav file which will be played on every exception From 4cc3daddb649e93bf0b750d2c73d027eff6537b7 Mon Sep 17 00:00:00 2001 From: danilo900 Date: Tue, 29 Dec 2020 08:35:22 -0300 Subject: [PATCH 2/3] Added Mission 10 missile --- ogame/game/const.py | 1 + 1 file changed, 1 insertion(+) diff --git a/ogame/game/const.py b/ogame/game/const.py index 7dfa5ad..89feded 100644 --- a/ogame/game/const.py +++ b/ogame/game/const.py @@ -27,6 +27,7 @@ class Mission(IdEnum): colonization = 7 harvest = 8 destroy = 9 + missile = 10 expedition = 15 trade = 16 From 97ca27b72f689ee4c4d49dfe67ef38ec7e39c075 Mon Sep 17 00:00:00 2001 From: danilo900 Date: Mon, 21 Jun 2021 22:13:25 -0300 Subject: [PATCH 3/3] Fix token and v8 newAjaxToken --- ogame/game/client.py | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/ogame/game/client.py b/ogame/game/client.py index 72d0f46..da09114 100644 --- a/ogame/game/client.py +++ b/ogame/game/client.py @@ -505,7 +505,9 @@ def get_fleet_dispatch(self, planet: Union[Planet, int], delay: int = None) -> FleetDispatch: fleet_dispatch_soup = self._get_fleet_dispatch(planet, delay=delay) - token = find_first_between(str(fleet_dispatch_soup), left='fleetSendingToken = "', right='"') + # token = find_first_between(str(fleet_dispatch_soup), left='fleetSendingToken = "', right='"') + token = find_first_between(str(fleet_dispatch_soup), left='var token = "', right='"') + timestamp = int(fleet_dispatch_soup.find('meta', {'name': 'ogame-timestamp'})['content']) slot_elements = fleet_dispatch_soup.find(id='slots').findAll('div', recursive=False) used_fleet_slots, max_fleet_slots = extract_numbers(slot_elements[0].text) @@ -679,9 +681,32 @@ def _get_event_list(self, headers={'X-Requested-With': 'XMLHttpRequest'}, delay=delay) + def _check_fleet_dispatch(self, + fleet_dispatch_data, + delay: int = None): + return self._post_game_resource( + resource='json', + params={'page': 'ingame', + 'component': 'fleetdispatch', + 'action': 'checkTarget', + 'ajax': 1, + 'asJson': 1}, + headers={'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', + 'X-Requested-With': 'XMLHttpRequest'}, + data=fleet_dispatch_data, + delay=delay) + def _post_fleet_dispatch(self, fleet_dispatch_data, delay: int = None): + + checkRes = self._check_fleet_dispatch(fleet_dispatch_data, delay) + if checkRes["status"] != 'success': + raise ValueError(checkRes["status"]) + + newAjaxToken = checkRes["newAjaxToken"] + fleet_dispatch_data["token"] = newAjaxToken + return self._post_game_resource( resource='json', params={'page': 'ingame',