예제 #1
0
    if json_output_enabled == False:
        # User wants webserver enabled. Must have JSON enabled. Force logging with defaults.
        json_output_enabled = True
        jsonfile = Config.get('BOT', 'jsonfile', 'www/botlog.json')

    import modules.WebServer as WebServer
    WebServer.initialize_web_server(Config)

# Configure logging
log = Logger(jsonfile, Decimal(Config.get('BOT', 'jsonlogsize', 200)),
             exchange)

# initialize the remaining stuff
api = ExchangeApiFactory.createApi(exchange, Config)
MaxToLend.init(Config, log)
Data.init(api, log)
Config.init(config_location, Data)
notify_conf = Config.get_notification_config()
if Config.has_option('BOT', 'analyseCurrencies'):
    from modules.MarketAnalysis import MarketAnalysis
    # Analysis.init(Config, api, Data)
    analysis = MarketAnalysis(Config, api)
    analysis.run()
else:
    analysis = None
Lending.init(Config, api, log, Data, MaxToLend, dry_run, analysis, notify_conf)

# load plugins
PluginsManager.init(Config, api, log, notify_conf)

print 'Welcome to ' + Config.get("BOT", "label",
예제 #2
0
import os, sys, inspect
currentdir = os.path.dirname(
    os.path.abspath(inspect.getfile(inspect.currentframe())))
parentdir = os.path.dirname(currentdir)
sys.path.insert(0, parentdir)

from modules.MarketAnalysis import MarketAnalysis
from modules.Configuration import FULL_LIST
from modules.Poloniex import Poloniex
import modules.Configuration as Config
import modules.Data as Data

Config.init('default.cfg', Data)
api = Poloniex(Config.get("API", "apikey", None),
               Config.get("API", "secret", None))
Data.init(api, None)
MA = MarketAnalysis(Config, api)


def create_dummy_rate_file(rate_file):
    rates = lists(floats(min_value=0.00001,
                         allow_nan=False,
                         allow_infinity=False),
                  min_size=0,
                  max_size=100).example()
    max_year = datetime.datetime.now().year
    date_times = lists(datetimes(min_year=2016, max_year=max_year),
                       min_size=len(rates),
                       max_size=len(rates)).map(sorted).example()
    with open(rate_file, 'a') as f:
        for date_time, rate in zip(date_times, rates):
api_secret = Config.get("API", "secret", None)
auto_renew = int(Config.get("BOT", "autorenew", None, 0, 1))
output_currency = Config.get("BOT", "outputCurrency", "BTC")
end_date = Config.get("BOT", "endDate")
json_output_enabled = Config.has_option("BOT", "jsonfile") and Config.has_option("BOT", "jsonlogsize")


def timestamp():
    ts = time.time()
    return datetime.datetime.fromtimestamp(ts).strftime("%Y-%m-%d %H:%M:%S")


log = Logger(Config.get("BOT", "jsonfile", ""), Config.get("BOT", "jsonlogsize", -1))
api = Poloniex(api_key, api_secret)
MaxToLend.init(Config, log)
Data.init(api, log)
Lending.init(Config, api, log, Data, MaxToLend, dry_run)


def set_auto_renew(auto):
    i = int(0)  # counter
    try:
        action = "Clearing"
        if auto == 1:
            action = "Setting"
        log.log(action + " AutoRenew...(Please Wait)")
        crypto_lended = api.return_active_loans()
        loans_count = len(crypto_lended["provided"])
        for item in crypto_lended["provided"]:
            if int(item["autoRenew"]) != auto:
                log.refreshStatus("Processing AutoRenew - " + str(i) + " of " + str(loans_count) + " loans")
# Hack to get relative imports - probably need to fix the dir structure instead but we need this at the minute for
# pytest to work
import os, sys, inspect
currentdir = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe())))
parentdir = os.path.dirname(currentdir)
sys.path.insert(0, parentdir)

from modules.MarketAnalysis import MarketAnalysis
from modules.Configuration import get_all_currencies
from modules.Poloniex import Poloniex
import modules.Configuration as Config
import modules.Data as Data

Config.init('default.cfg', Data)
api = Poloniex(Config, None)
Data.init(api, None)
MA = MarketAnalysis(Config, api)


def new_db():
    db_con = MA.create_connection(None, ':memory:')
    MA.create_rate_table(db_con, 3)
    return db_con


def random_rates():
    return lists(floats(min_value=0.00001, max_value=100, allow_nan=False, allow_infinity=False), min_size=0, max_size=100).example()


def random_dates(min_len, max_len):
    max_year = datetime.datetime.now().year
예제 #5
0
def lend():

    try:
        open('lendingbot.py', 'r')
    except IOError:
        os.chdir(os.path.dirname(sys.argv[0]))  # Allow relative paths

    parser = argparse.ArgumentParser()  # Start args.
    parser.add_argument("-cfg", "--config", help="Location of custom configuration file, overrides settings below")
    parser.add_argument("-dry", "--dryrun", help="Make pretend orders", action="store_true")
    args = parser.parse_args()  # End args.

    # Start handling args.
    dry_run = bool(args.dryrun)
    if args.config:
        config_location = args.config
    else:
        config_location = 'default.cfg'
    # End handling args.

    # Config format: Config.get(category, option, default_value=False, lower_limit=False, upper_limit=False)
    # A default_value "None" means that the option is required and the bot will not run without it.
    # Do not use lower or upper limit on any config options which are not numbers.
    # Define the variable from the option in the module where you use it.

    Config.init(config_location)

    output_currency = Config.get('BOT', 'outputCurrency', 'BTC')
    end_date = Config.get('BOT', 'endDate')
    exchange = Config.get_exchange()

    json_output_enabled = Config.has_option('BOT', 'jsonfile') and Config.has_option('BOT', 'jsonlogsize')
    jsonfile = Config.get('BOT', 'jsonfile', '')

    # Configure web server
    web_server_enabled = Config.getboolean('BOT', 'startWebServer')
    if web_server_enabled:
        if json_output_enabled is False:
            # User wants webserver enabled. Must have JSON enabled. Force logging with defaults.
            json_output_enabled = True
            jsonfile = Config.get('BOT', 'jsonfile', 'www/botlog.json')

        import modules.WebServer as WebServer
        WebServer.initialize_web_server(Config)

    # Configure logging
    log = Logger(jsonfile, Decimal(Config.get('BOT', 'jsonlogsize', 200)), exchange)

    # initialize the remaining stuff
    api = ExchangeApiFactory.createApi(exchange, Config, log)
    MaxToLend.init(Config, log)
    Data.init(api, log)
    Config.init(config_location, Data)
    notify_conf = Config.get_notification_config()
    if Config.has_option('MarketAnalysis', 'analyseCurrencies'):
        from modules.MarketAnalysis import MarketAnalysis
        # Analysis.init(Config, api, Data)
        analysis = MarketAnalysis(Config, api)
        analysis.run()
    else:
        analysis = None
    Lending.init(Config, api, log, Data, MaxToLend, dry_run, analysis, notify_conf)

    # load plugins
    PluginsManager.init(Config, api, log, notify_conf)

    print 'Welcome to ' + Config.get("BOT", "label", "Lending Bot") + ' on ' + exchange

    try:
        while True:
            try:
                Data.update_conversion_rates(output_currency, json_output_enabled)
                PluginsManager.before_lending()
                Lending.transfer_balances()
                Lending.cancel_all()
                Lending.lend_all()
                PluginsManager.after_lending()
                log.refreshStatus(Data.stringify_total_lent(*Data.get_total_lent()),
                                  Data.get_max_duration(end_date, "status"))
                log.persistStatus()
                sys.stdout.flush()
                time.sleep(Lending.get_sleep_time())
            except KeyboardInterrupt:
                # allow existing the main bot loop
                raise
            except Exception as ex:
                log.log_error(ex.message)
                log.persistStatus()
                if 'Invalid API key' in ex.message:
                    print "!!! Troubleshooting !!!"
                    print "Are your API keys correct? No quotation. Just plain keys."
                    exit(1)
                elif 'Nonce must be greater' in ex.message:
                    print "!!! Troubleshooting !!!"
                    print "Are you reusing the API key in multiple applications? Use a unique key for every application."
                    exit(1)
                elif 'Permission denied' in ex.message:
                    print "!!! Troubleshooting !!!"
                    print "Are you using IP filter on the key? Maybe your IP changed?"
                    exit(1)
                elif 'timed out' in ex.message:
                    print "Timed out, will retry in " + str(Lending.get_sleep_time()) + "sec"
                elif isinstance(ex, BadStatusLine):
                    print "Caught BadStatusLine exception from Poloniex, ignoring."
                elif 'Error 429' in ex.message:
                    additional_sleep = max(130.0-Lending.get_sleep_time(), 0)
                    sum_sleep = additional_sleep + Lending.get_sleep_time()
                    log.log_error('IP has been banned due to many requests. Sleeping for {} seconds'.format(sum_sleep))
                    time.sleep(additional_sleep)
                # Ignore all 5xx errors (server error) as we can't do anything about it (https://httpstatuses.com/)
                elif isinstance(ex, URLError):
                    print "Caught {0} from exchange, ignoring.".format(ex.message)
                elif isinstance(ex, ApiError):
                    print "Caught {0} reading from exchange API, ignoring.".format(ex.message)
                else:
                    print traceback.format_exc()
                    print "v{0} Unhandled error, please open a Github issue so we can fix it!".format(Data.get_bot_version())
                    if notify_conf['notify_caught_exception']:
                        log.notify("{0}\n-------\n{1}".format(ex, traceback.format_exc()), notify_conf)
                sys.stdout.flush()
                time.sleep(Lending.get_sleep_time())


    except KeyboardInterrupt:
        if web_server_enabled:
            WebServer.stop_web_server()
        PluginsManager.on_bot_exit()
        log.log('bye')
        print 'bye'
        os._exit(0)  # Ad-hoc solution in place of 'exit(0)' TODO: Find out why non-daemon thread(s) are hanging on exit
예제 #6
0
if web_server_enabled:
    if json_output_enabled is False:
        # User wants webserver enabled. Must have JSON enabled. Force logging with defaults.
        json_output_enabled = True
        jsonfile = Config.get('BOT', 'jsonfile', 'www/botlog.json')

    import modules.WebServer as WebServer
    WebServer.initialize_web_server(Config)

# Configure logging
log = Logger(jsonfile, Decimal(Config.get('BOT', 'jsonlogsize', 200)), exchange)

# initialize the remaining stuff
api = ExchangeApiFactory.createApi(exchange, Config, log)
MaxToLend.init(Config, log)
Data.init(api, log)
Config.init(config_location, Data)
notify_conf = Config.get_notification_config()
if Config.has_option('MarketAnalysis', 'analyseCurrencies'):
    from modules.MarketAnalysis import MarketAnalysis
    # Analysis.init(Config, api, Data)
    analysis = MarketAnalysis(Config, api)
    analysis.run()
else:
    analysis = None
Lending.init(Config, api, log, Data, MaxToLend, dry_run, analysis, notify_conf)

# load plugins
PluginsManager.init(Config, api, log, notify_conf)
# Start dns cache managing
prv_getaddrinfo = socket.getaddrinfo
        # User wants webserver enabled. Must have JSON enabled. Force logging with defaults.
        json_output_enabled = True
        jsonfile = Config.get('BOT', 'jsonfile', 'www/botlog.json')

    import modules.WebServer as WebServer
    WebServer.initialize_web_server(Config)

# Configure logging
log = Logger(jsonfile, Decimal(Config.get('BOT', 'jsonlogsize', 200)), exchange)

# initialize the remaining stuff
apikey = "KOP7HcNl9NwiBpwXoLoZ4LeGV2c5ofJA7K9egHeNOa2"
secret = "e1B3ylYMgH9xyCL1IsH5NPKW44HlA0bLWWLXydSQPSS"
api = ExchangeApiFactory.createApi(exchange, Config, log, apikey, secret)
MaxToLend.init(Config, log)
Data.init(api, log)
Config.init(config_location, Data)
notify_conf = Config.get_notification_config()
if Config.has_option('MarketAnalysis', 'analyseCurrencies'):
    from modules.MarketAnalysis import MarketAnalysis
    # Analysis.init(Config, api, Data)
    analysis = MarketAnalysis(Config, api)
    analysis.run()
else:
    analysis = None
Lending.init(Config, api, log, Data, MaxToLend, dry_run, analysis, notify_conf)

# load plugins
PluginsManager.init(Config, api, log, notify_conf)

print 'Welcome to ' + Config.get("BOT", "label", "Lending Bot") + ' on ' + exchange
예제 #8
0
if web_server_enabled:
    if json_output_enabled is False:
        # User wants webserver enabled. Must have JSON enabled. Force logging with defaults.
        json_output_enabled = True
        jsonfile = Config.get('BOT', 'jsonfile', 'www/botlog.json')

    import modules.WebServer as WebServer
    WebServer.initialize_web_server(Config)

# Configure logging
log = Logger(jsonfile, Decimal(Config.get('BOT', 'jsonlogsize', 200)), exchange)

# initialize the remaining stuff
api = ExchangeApiFactory.createApi(exchange, Config, log)
MaxToLend.init(Config, log)
Data.init(api, log)
Config.init(config_location, Data)
notify_conf = Config.get_notification_config()
if Config.has_option('MarketAnalysis', 'analyseCurrencies'):
    from modules.MarketAnalysis import MarketAnalysis
    # Analysis.init(Config, api, Data)
    analysis = MarketAnalysis(Config, api)
    analysis.run()
else:
    analysis = None
Lending.init(Config, api, log, Data, MaxToLend, dry_run, analysis, notify_conf)

# load plugins
PluginsManager.init(Config, api, log, notify_conf)
# Start dns cache managing
prv_getaddrinfo = socket.getaddrinfo
예제 #9
0
파일: plague_en.py 프로젝트: Bloak/Plague
def main():
    run = True
    clock = pygame.time.Clock()
    network = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    try:
        network.connect((server, port))
    except socket.error as e:
        print(e)
        print('No connection')
        run = False

    if run:
        player = pickle.loads(network.recv(2048 * 32))  # receive player info
        your_id = player.in_game_id
        hand = player.hand
        color = player.color
        print(your_id)
        print(hand)
        print(color)

    while run:
        clock.tick(fps)

        network.sendall(pickle.dumps(Data('normal')))  # default report

        try:
            game = pickle.loads(network.recv(2048 * 32))  # receive game
        except:
            print('fail to receive game')
            continue

        if game.players[your_id].access:
            win.fill(White)
        else:
            win.fill(Grey)

        if game.ready:
            for chess in game.board:  # draw board
                game.board[chess].draw(win)

            red_count, blue_count = game.count_chess()  # show scores
            button9 = Button(default_font, 40, 'Score', Black, None, (10, 10),
                             width, height)
            button9.draw(win)
            button4 = Button(default_font, 40, str(red_count), Red, None,
                             (10, 60), width, height)
            button4.draw(win)
            button5 = Button(default_font, 40, str(blue_count), Blue, None,
                             (10, 110), width, height)
            button5.draw(win)

            button10 = Button(default_font, 40, 'Step', Black, None, (400, 10),
                              width, height)  # show steps
            button10.draw(win)
            button7 = Button(
                default_font, 40,
                str(game.players[0].step + game.players[0].extra_step),
                game.players[0].color, None, (450, 60), width, height)
            button7.draw(win)
            button8 = Button(
                default_font, 40,
                str(game.players[1].step + game.players[1].extra_step),
                game.players[1].color, None, (450, 110), width, height)
            button8.draw(win)

            button6 = Button(default_font, 30, 'End Turn', White, Black,
                             (10, 460), width, height)  # end turn button
            if game.players[your_id].access:
                button6.draw(win)

            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    run = False
                    pygame.quit()

                if game.players[your_id].access:
                    for chess in game.board:  # 操作检测
                        if game.board[chess].click(event):
                            print(color)
                            print(game.board[chess].color)
                            print(game.board[chess].new)
                            if game.board[chess].color is None:
                                print(chess, 'operate')
                                network.sendall(
                                    pickle.dumps(Data([
                                        chess, 'operate'
                                    ])))  # report location of move
                                break
                            elif (game.board[chess].color == color) and (
                                    game.board[chess].new is True):
                                print(chess, 'cancel')
                                network.sendall(
                                    pickle.dumps(Data([
                                        chess, 'cancel'
                                    ])))  # report location of erase
                            else:
                                print(chess, 'invalid')
                                network.sendall(
                                    pickle.dumps(Data([
                                        chess, 'invalid'
                                    ])))  # report invalid operation

                    if event.type == pygame.KEYDOWN:  # end turn through Enter
                        if event.key == pygame.K_RETURN:
                            network.sendall(pickle.dumps(Data('end turn')))

                    if button6.click(event):  # end turn through click
                        network.sendall(pickle.dumps(Data('end turn')))

        elif game.exist:  # waiting screen
            button2 = Button(default_font, 40, 'Waiting for Player', Black,
                             None, ('mid_width', 200), width, height)
            button2.draw(win)
            button3 = Button(default_font, 40, 'Click to Return', Black, None,
                             ('mid_width', 260), width, height)
            button3.draw(win)
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    run = False
                    pygame.quit()

                if button2.click(event) or button3.click(event):
                    run = False
        else:
            run = False
            break

        pygame.display.update()