コード例 #1
0
room_name = sys.argv[1]
room_pass = sys.argv[2]

params = sys.argv[3:]
players = {}

for i in range(0, len(params), 2):
    player_id = params[i]
    team = params[i + 1]
    players[int(player_id)] = {"team": team, "slot": None}


@client.on('logged_on')
def start_dota():
    dota.launch()


@dota.on('ready')
def on_dota_ready():
    manage_lobby(dota, client, room_name, room_pass, players)


@dota.on(dota2.features.Lobby.EVENT_LOBBY_CHANGED)
def lobby_update(lobby):
    manage_lobby_players(dota, lobby, players)


client.cli_login(username="******", password="******")
client.run_forever()
コード例 #2
0
    def start_bot(self, credentials):
        client = SteamClient()
        dota = Dota2Client(client)

        self.bots.append(dota)

        client.verbose_debug = True
        dota.verbose_debug = True

        @client.on('logged_on')
        def start_dota():
            dota.launch()

        # TODO: don't try to relogin if we disconnected by KeyboardInterrupt
        @client.on('disconnected')
        def handle_disconnect():
            print('Disconnected: %s' % credentials['login'])

            delay = 30
            print('Trying to login again in %d sec...' % delay)
            gevent.sleep(delay)

            client.login(credentials['login'], credentials['password'])
            client.run_forever()

        @dota.on('ready')
        def dota_started():
            print('Logged in: %s %s' % (dota.steam.username, dota.account_id))

            # register this bot as a player in db
            player, created = Player.objects.get_or_create(
                dota_id=dota.account_id,
                defaults={
                    'name': dota.steam.username,
                    'dota_mmr': random.randrange(3000, 6000, 500)
                })
            print('Bot %s (%d MMR, %s), was already in DB: %s' %
                  (player.name, player.dota_mmr, player.dota_id, not created))

            # if lobby is hung up from previous session, leave it
            dota.leave_practice_lobby()
            dota.join_practice_lobby(self.lobby, self.password)

        @dota.on(dota2.features.Lobby.EVENT_LOBBY_NEW)
        def lobby_new(lobby):
            print('%s joined lobby %s' % (dota.steam.username, lobby.lobby_id))

            ind = self.bots.index(dota)

            if ind == 0:
                # let first bot listen to lobby chat
                dota.channels.join_lobby_channel()

            team = ind // 5
            slot = ind % 5 + 1
            dota.join_practice_lobby_team(slot, team)

        @dota.on(dota2.features.Lobby.EVENT_LOBBY_CHANGED)
        def lobby_changed(lobby):
            if dota != self.bots[0]:
                return

            players = [
                player for player in lobby.members
                if player.team in (DOTA_GC_TEAM.GOOD_GUYS,
                                   DOTA_GC_TEAM.BAD_GUYS)
            ]

            if len(players) == 0 and self.balance_team1:
                print()
                print('All bots jumped to unassigned')
                self.join_balance_slots()

        @dota.channels.on(dota2.features.chat.ChannelManager.EVENT_MESSAGE)
        def chat_message(channel, msg_obj):
            text = msg_obj.text
            if channel.type != DOTAChatChannelType_t.DOTAChannelType_Lobby:
                return  # ignore postgame and other chats

            # process known commands
            if text.startswith('Team 1'):
                self.balance_ready(text)

        client.login(credentials['login'], credentials['password'])
        client.run_forever()