From dd6f3f189c601ef0b1bc4fac3351afadfd295ed6 Mon Sep 17 00:00:00 2001 From: Oliver Hartmann Date: Fri, 12 Mar 2021 15:32:10 +0100 Subject: [PATCH] Added logger, parse_trade and some code format --- trader.py | 65 +++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 54 insertions(+), 11 deletions(-) diff --git a/trader.py b/trader.py index 6991c2b..a78a009 100644 --- a/trader.py +++ b/trader.py @@ -3,14 +3,18 @@ import time import datetime from enum import Enum import re +import logging +log = logging.getLogger(__name__) +logging.basicConfig(level=logging.DEBUG) + class Channel(Enum): WHISPER = 0 GLOBAL = 1 PARTY = 2 - LOCAL = 3 - TRADE = 4 + LOCAL = 3 + TRADE = 4 GUILD = 5 @@ -21,6 +25,24 @@ channel_mapping = {'#': Channel.GLOBAL, '$': Channel.TRADE, '&': Channel.GUILD} + +class Trade(): + def __init__(self, + item: str, + amount: int, + currency: str, + tab: str, + row: int, + col: int, + league: str) -> None: + self.item = item + self.amount = amount + self.currency = currency + self.tab = tab + self.row = row + self.col = col + self.league = league + class Message(): def __init__(self, message: str, @@ -30,17 +52,33 @@ class Message(): guild: str) -> None: self.message = message self.date = date - self.user = user self.channel = channel + if channel is Channel.WHISPER: + user = user.lstrip('From ') + self.user = user self.guild = guild - + def __str__(self) -> str: text = f'{self.date} - {self.channel.name}: ' - if self.guild: + if self.guild: text = text + f'<{self.guild}> ' text = text + f'{self.user}: {self.message}' return text + + def parse_trade(self) -> Trade: + # @From NyhaiPuki: Hi, I would like to buy your level 21 23% Vaal Impurity of Lightning listed for 18 chaos in Ritual (stash tab "$"; position: left 22, top 5) + regex = 'Hi, I would like to buy your (?P.+) listed for (?P\d+) (?P\S+) in (?P\S+) \(stash tab "(?P.+)"; position: left (?P\d+), top (?P\d+)\)' + res = re.search(regex, self.message) + return Trade(item=res['item'], + amount=int(res['amount']), + currency=res['currency'], + tab=res['tab'], + row=int(res['row']), + col=int(res['col']), + league=res['league']) + + def follow(thefile: str): thefile.seek(0, 2) while True: @@ -49,14 +87,16 @@ def follow(thefile: str): time.sleep(0.1) continue yield line - + def parse_string(text: str) -> Message: - # result = parse('{date} {time} {timemicro} {noidea} [{level} {client} {id}]{mess_type:1}{user}: {message}', text) - result = re.search('(?P\d\d\d\d/\d\d/\d\d \d\d:\d\d:\d\d) (\d+) (\S+) \[(?P\S+) (\S+) (\d+)\] (?P[#@%$&]?)(?P<\S+>)? ?(?P[^:]+): (?P.*)', text) - if not result: + result = re.search( + '(?P\d\d\d\d/\d\d/\d\d \d\d:\d\d:\d\d) (\d+) (\S+) \[(?P\S+) (\S+) (\d+)\] (?P[#@%$&]?)(?P<\S+>)? ?(?P[^:]+): (?P.*)', text) + if not result: + log.debug(f'Result is none for text "{text}"') return None - date = datetime.datetime.strptime(result.group('date'), '%Y/%m/%d %H:%M:%S') + date = datetime.datetime.strptime( + result.group('date'), '%Y/%m/%d %H:%M:%S') guild = result.group('guild') if guild: guild = guild.strip('<>') @@ -79,4 +119,7 @@ if __name__ == "__main__": loglines = follow(logfile) for line in loglines: message = parse_string(line) - print(message) + log.debug(message) + if message and message.channel is Channel.WHISPER: + log.info('TRADE') +