Except when explicit saying otherwise, use the following base code:

import vindinium

class MyBot(vindinium.bots.BaseBot):
    # stuff here

Random Bot

A random bot:

import random
import vindinium

class RandomBot(vindinium.bots.RawBot):
    moves = [
    def move(self):
        return random.choice(self.moves)

Move to specific position

Uses A* to find a path to some specific location:

def start(self): =

def move(self):
    return self.go_to(3, 4)

def go_to(self, x_, y_):
    x = self.hero.x
    y = self.hero.y

    # Compute path to the mine
    path =, y, x_, y_)

    # Send command to follow that path
    if len(path) > 0:
        x_, y_ = path[0]

    return vin.utils.path_to_command(x, y, x_, y_)

Move to nearest tavern

Consider the go_to method:

def go_to_nearest_tavern(self):
    x = self.hero.x
    y = self.hero.y

    # Order taverns by distance
    taverns = vin.utils.order_by_distance(x, y,
    return self.go_to(taverns[0].x, taverns[1].y)

Move to nearest enemy/neutral mine

Consider the go_to method:

def go_to_nearest_mine(self):
    x = self.hero.x
    y = self.hero.y

    # Order mines by distance
    mines = vin.utils.order_by_distance(x, y,

    for mine in mines:
        # Grab nearest mine that is not owned by this hero
        if mine.owner !=
            return self.go_to(mine.x, mine.y)

    return vindinium.STAY