示例#1
0
文件: bot.py 项目: robhaswell/dropbot
    def cmd_kill(self, args, msg, no_url=False, raw=None, host=None):
        """Returns a summary of a zKillboard killmail"""
        if not raw:
            if len(args) == 0:
                return '!kill <Kill ID/zKillboard URL>'
            kill_id = args[0]
            try:
                kill_id = int(kill_id)
            except ValueError:
                m = zkillboard_regex.match(kill_id)
                if m:
                    kill_id = m.groupdict()['killID']
                    host = m.groupdict()['host']
                else:
                    return 'Invalid kill ID'

            headers, data = ZKillboard(
                base_url='https://{}/api/'.format(host)).killID(kill_id).get()
            kill = data[0]
        else:
            kill = raw
            kill_id = raw['killID']

        if no_url:
            url = ''
        else:
            url = ' - https://{}/kill/{}/'.format(host, kill_id)

        # Ignore kills over an hour old if they're from stomp
        age = (datetime.utcnow() -
               datetime.strptime(kill['killTime'], '%Y-%m-%d %H:%M:%S'))
        if age.total_seconds() > 60 * 60 and raw:
            return

        # Drop kills less than 1mil if they've come from stomp
        if raw and float(kill['zkb']['totalValue']) < 1000000:
            return

        if 'zkb' in kill and 'totalValue' in kill['zkb']:
            value_lost = intword(float(kill['zkb']['totalValue']))
        else:
            value_lost = '???'

        return '{} ({}) in {}, {}, {} attacker(s), {} ISK lost{}'.format(
            kill['victim']['characterName'],
            self.types[unicode(kill['victim']['shipTypeID'])],
            self.map.node[int(kill['solarSystemID'])]['name'],
            naturaltime(age),
            len(kill['attackers']),
            value_lost,
            url,
        )
示例#2
0
文件: bot.py 项目: robhaswell/dropbot
    def cmd_id(self, args, msg):
        """Provides an overview of a character's activity in-game"""
        if len(args) == 0:
            return '!id <character name>'
        char_name = ' '.join(args)

        result = self.get_eveapi().eve.CharacterID(names=char_name.strip())
        char_name = result.characters[0].name
        char_id = result.characters[0].characterID

        if char_id == 0:
            return 'Unknown character {}'.format(char_name)

        headers, res = ZKillboard().characterID(char_id).kills().pastSeconds(
            60 * 60 * 24 * 7).get()

        from collections import defaultdict, Counter

        kill_types = defaultdict(int)
        ship_types = defaultdict(int)
        alli_assoc = defaultdict(int)
        sum_value = 0.0
        for kill in res:
            kill_type_id = int(kill['victim']['shipTypeID'])
            if kill_type_id > 0:
                kill_types[self.types[unicode(kill_type_id)]] += 1
            sum_value += float(kill['zkb']['totalValue'])
            for attk in kill['attackers']:
                if attk['allianceName'].strip(
                ) != '' and attk['allianceName'] is not None:
                    alli_assoc[attk['allianceName']] += 1
                if int(attk['characterID']) == char_id:
                    ship_type_id = int(attk['shipTypeID'])
                    if ship_type_id > 0:
                        ship_types[self.types[unicode(ship_type_id)]] += 1
                    break
        if len(res) == 0:
            return '{} has had no kills in the last week'.format(char_name)

        kill_types = Counter(kill_types).most_common(5)
        ship_types = Counter(ship_types).most_common(5)
        alli_assoc = Counter(alli_assoc).most_common(5)

        return '{}, {} kill(s) ({} ISK) in the last week\nActive Systems: {}\nTop 5 Killed Types: {}\nTop 5 Ship: {}\nTop 5 Associates: {}'.format(
            char_name, len(res), intcomma(sum_value), ', '.join(
                set([
                    self.map.node[int(x['solarSystemID'])]['name'] for x in res
                ])), ', '.join(['{} ({})'.format(x, y)
                                for x, y in kill_types]),
            ', '.join(['{} ({})'.format(x, y) for x, y in ship_types]),
            ', '.join([x for x, y in alli_assoc]))