コード例 #1
0
def move(prop, serial=None):
    for file in prop.get_files():
        filename = os.path.split(file)
        push(
            file,
            '/sdcard/{tb}/{filename}'.format(tb=phone_dirs['titanium_backup'],
                                             filename=filename), serial)
コード例 #2
0
ファイル: frontiers.py プロジェクト: buntheun/NanoWalletBot
def frontiers_sendlist():
    if (proxy_url is None):
        bot = Bot(api_key)
    else:
        proxy = Request(proxy_url=proxy_url,
                        urllib3_proxy_kwargs={
                            'username': proxy_user,
                            'password': proxy_pass
                        })
        bot = Bot(token=api_key, request=proxy)
    sendlist = mysql_select_sendlist()
    for send in sendlist:
        time.sleep(5)  # if long push to user
        sendlist_new = mysql_select_sendlist()
        if (send in sendlist_new):
            try:
                push(bot, send[0], send[1].replace("_", "\_"))
                logging.warning('NoCallback From sendlist: {0} :: {1}'.format(
                    send[0], send[1].encode("utf8")))
            except Exception as e:
                logging.warning(
                    'NoCallback From sendlist + exception: {0} :: {1}'.format(
                        send[0], send[1].encode("utf8")))
                logging.error(e)
            mysql_delete_sendlist(send[0])
コード例 #3
0
ファイル: monitoring.py プロジェクト: maruf00/RaiWalletBot
def monitoring_block_count():
    # set bot
    bot = Bot(api_key)
    count = int(rpc({"action": "block_count"}, 'count'))
    reference_count = int(reference_block_count())

    http = urllib3.PoolManager(cert_reqs='CERT_REQUIRED',
                               ca_certs=certifi.where())
    response = http.request('GET', summary_url, timeout=20.0)
    try:
        json_data = json.loads(response.data)
        community_count = int(json_data['blocks'])
    except ValueError as e:
        community_count = reference_count
    difference = int(math.fabs(community_count - count))

    response = http.request('GET', block_count_url, timeout=20.0)
    raiwallet_count = int(response.data)

    if (difference > block_count_difference_threshold):
        # Warning to admins
        for user_id in admin_list:
            push(
                bot, user_id,
                'Block count: {0}\nCommunity: {1}\nDifference: *{2}*\nReference: {3}\nraiwallet.info: {4}'
                .format(count, community_count, difference, reference_count,
                        raiwallet_count))
        # trying to fix
        bootstrap_multi()
コード例 #4
0
def monitoring_block_count():
	# set bot
	if (proxy_url is None):
		bot = Bot(api_key)
	else:
		proxy = Request(proxy_url = proxy_url, urllib3_proxy_kwargs = {'username': proxy_user, 'password': proxy_pass })
		bot = Bot(token=api_key, request = proxy)
	count = int(rpc({"action": "block_count"}, 'count'))
	reference_count = int(reference_block_count())
	
	http = urllib3.PoolManager(cert_reqs='CERT_REQUIRED',ca_certs=certifi.where())
	try:
		response = http.request('GET', nanocrawler_url, headers=header, timeout=20.0)
		json_data = json.loads(response.data)
		nanocrawler_count = int(json_data['send']) + int(json_data['receive']) + int(json_data['open']) + int(json_data['change']) + int(json_data['state'])
	except (ValueError, urllib3.exceptions.ReadTimeoutError, urllib3.exceptions.MaxRetryError) as e:
		nanocrawler_count = reference_count
	difference = int(math.fabs(nanocrawler_count - count))
	
	try:
		response = http.request('GET', block_count_url, headers=header, timeout=20.0)
		raiwallet_count = int(response.data)
	except (urllib3.exceptions.ReadTimeoutError, urllib3.exceptions.MaxRetryError) as e:
		raiwallet_count = reference_count
	
	if (difference > block_count_difference_threshold*3):
		# Warning admins
		for user_id in admin_list:
			push(bot, user_id, 'Block count: {0}\nnanocrawler.cc: {1}\nDifference: *{2}*\nReference: {3}\nraiwallet.info: {4}'.format(count, nanocrawler_count, difference, reference_count, raiwallet_count))
		# trying to fix
		bootstrap_multi()
	elif (difference > block_count_difference_threshold):
		# trying to fix
		bootstrap_multi()
コード例 #5
0
def monitoring_peers():
    # set bot
    bot = bot_start()
    try:
        # list of available peers
        rpc_peers = peers_ip()
        # remote peer peers list
        remote_peers = reference_peers()
        # check in the list of available peers
        for peer in peer_list:
            if (peer not in rpc_peers and peer not in remote_peers):
                # check peers from nanocrawler.cc
                http = urllib3.PoolManager(cert_reqs='CERT_REQUIRED',
                                           ca_certs=certifi.where())
                response = http.request('GET',
                                        peers_url,
                                        headers=header,
                                        timeout=10.0)
                json_data = json.loads(response.data)
                json_peers = json_data['peers']
                if (peer not in json_peers
                        and '::ffff:{0}'.format(peer) not in json_peers):
                    # Warning to admins
                    for user_id in admin_list:
                        push(bot, user_id,
                             'Peer *{0}* is offline'.format(peer))
    except AttributeError as e:
        for user_id in admin_list:
            push(bot, user_id, 'Peers list is empty!')
コード例 #6
0
ファイル: monitoring.py プロジェクト: maruf00/RaiWalletBot
def monitoring_peers():
    # set bot
    bot = Bot(api_key)
    # list of available peers
    rpc_peers = peers_ip()
    # check in the list of available peers
    for peer in peer_list:
        if (peer not in rpc_peers):
            # check peers from raiblockscommunity.net
            http = urllib3.PoolManager(cert_reqs='CERT_REQUIRED',
                                       ca_certs=certifi.where())
            response = http.request('GET', peers_url, timeout=10.0)
            json_data = json.loads(response.data)
            json_peers = json_data['peers']
            for (i, item) in enumerate(json_peers):
                json_peers[i] = item['ip'].replace("::ffff:", "")
            if (peer not in json_peers):
                # possible peer names
                response = http.request('GET', known_ips_url, timeout=10.0)
                json_data = json.loads(response.data)
                try:
                    peer_name = json_data['::ffff:{0}'.format(peer)][0]
                    # Warning to admins
                    for user_id in admin_list:
                        push(
                            bot, user_id, 'Peer *{0}* ({1}) is offline'.format(
                                peer, peer_name))
                except KeyError:
                    # Warning to admins
                    for user_id in admin_list:
                        push(bot, user_id,
                             'Peer *{0}* is offline'.format(peer))
コード例 #7
0
def frontiers_sendlist():
	bot = Bot(api_key)
	sendlist = mysql_select_sendlist()
	for send in sendlist:
		time.sleep(5) # if long push to user
		sendlist_new = mysql_select_sendlist()
		if (send in sendlist_new):
			try:
				push(bot, send[0], send[1].replace("_", "\_"))
				logging.warning('NoCallback From sendlist: {0} :: {1}'.format(send[0], send[1].encode("utf8")))
			except Exception as e:
				logging.warning('NoCallback From sendlist + exception: {0} :: {1}'.format(send[0], send[1].encode("utf8")))
				logging.error(e)
			mysql_delete_sendlist(send[0])
コード例 #8
0
ファイル: jhu-to-influx.py プロジェクト: horazont/covid
def main():
    import sys

    mapping = [
        (KIND_CASE, "cases.csv"),
        (KIND_DEATH, "deaths.csv"),
        (KIND_RECOVERED, "recovered.csv"),
    ]

    print("loading ...")
    data = {}
    for kind, filename in mapping:
        with (pathlib.Path(sys.argv[1]) / filename).open("r") as f:
            load_jhu_data(f, kind, data)
    print("\x1b[J", end="")

    print("loading population data ...")
    with (pathlib.Path(sys.argv[1]) / "lut.csv").open("r") as f:
        population = load_jhu_population_data(f)

    print("preparing ...")
    counters = load_counters(data)

    print("crunching the numbers ...")
    print("  deriving data")
    out = common.derive_data(counters.data, is_cumsum=True)

    expected_samples = \
        len(population) * out.shape[0] + \
        functools.reduce(operator.mul, out.shape[:-1])

    print("sending ...")
    asyncio.run(
        common.push(
            common.generate_counter_samples(
                dataclasses.replace(
                    counters,
                    data=out,
                    keys=counters.keys,
                ),
                MEASUREMENT_GEOGRAPHICS,
                [("country", )],
                [
                    "ccases", "cdeaths", "crecovered", "d1cases", "d1deaths",
                    "d1recovered", "d7cases", "d7deaths", "d7recovered",
                    "d7cases_s7", "d7deaths_s7", "d7recovered_s7"
                ],
            ),
            generate_population_samples(
                population,
                MEASUREMENT_GEOGRAPHICS,
                counters.first_date,
                out.data.shape[0],
            ),
            expected_samples=expected_samples,
        ))

    import os
    os._exit(0)
コード例 #9
0
ファイル: prices.py プロジェクト: iSC-Labs/NanoWalletBot
def prices_above_below(bot, user_id, price, exchange, above):
	lang_id = mysql_select_language(user_id)
	btc_price = ('%.8f' % (float(price) / (10 ** 8)))
	if (above == 1):
		text = lang_text('prices_above', lang_id).format(exchange, btc_price).encode("utf-8")
	else:
		text = lang_text('prices_below', lang_id).format(exchange, btc_price).encode("utf-8")
	try:
		push(bot, user_id, text)
	except Exception as e:
		print('Exception user_id {0}'.format(user_id))
	print(text)
	if (above == 1):
		mysql_delete_price_high(user_id)
	else:
		mysql_delete_price_low(user_id)
	time.sleep(0.5)
コード例 #10
0
ファイル: events-to-influx.py プロジェクト: horazont/covid
def main():
    with open("events.toml") as f:
        events = toml.load(f)["event"]

    print("streaming to influx ...")
    asyncio.run(
        common.push(
            generate_events(events),
            expected_samples=len(events),
        ))
コード例 #11
0
def main():
    import sys

    print("streaming ...")
    with (pathlib.Path(sys.argv[1]) / "tests.csv").open("r") as f:
        asyncio.run(common.push(import_samples(f), ))
    print("\x1b[J", end="")

    import os
    os._exit(0)
コード例 #12
0
def receive_messages(bot, account, balance):
    history = rpc(
        {
            "action": "account_history",
            "account": account[1],
            "count": "50"
        }, 'history')
    for item in history:
        if (item['hash'] == account[2]):
            break
        if (item['type'] == 'receive'):
            lang_id = mysql_select_language(account[0])
            sender_account = item['account']
            sender = find_sender(item, account, sender_account, balance,
                                 lang_text)
            received_amount = int(math.floor(int(item['amount']) / (10**24)))
            logging.warning(
                'NoCallback {0} Nano (XRB) received by {1}, hash: {2}'.format(
                    mrai_text(received_amount), account[0], item['hash']))
            text = lang_text('frontiers_receive',
                             lang_id).format(mrai_text(received_amount),
                                             mrai_text(balance), mrai_text(0),
                                             item['hash'], hash_url, sender)
            mysql_set_sendlist(account[0], text)
            #print(text)
            try:
                push(bot, account[0], text)
                mysql_delete_sendlist(account[0])
            except BadRequest as e:
                logging.exception('Bad request account {0}'.format(account[0]))
            time.sleep(0.25)
            if (received_amount >= large_amount_warning):
                try:
                    push(bot, account[0],
                         lang_text('frontiers_large_amount_warning', lang_id))
                except BadRequest as e:
                    logging.exception('Bad request account {0}'.format(
                        account[0]))
                time.sleep(0.25)
コード例 #13
0
ファイル: divi-to-influx.py プロジェクト: horazont/covid
def main():
    import argparse

    parser = argparse.ArgumentParser()
    parser.add_argument(
        "infile",
        type=argparse.FileType("rb"),
    )

    args = parser.parse_args()

    print("streaming to influxdb...")
    with common.magic_open(args.infile) as f:
        asyncio.run(common.push(generate_samples(f), ))
コード例 #14
0
ファイル: monitoring.py プロジェクト: iSC-Labs/NanoWalletBot
def monitoring_peers():
    # set bot
    if (proxy_url is None):
        bot = Bot(api_key)
    else:
        proxy = Request(proxy_url=proxy_url,
                        urllib3_proxy_kwargs={
                            'username': proxy_user,
                            'password': proxy_pass
                        })
        bot = Bot(token=api_key, request=proxy)
    try:
        # list of available peers
        rpc_peers = peers_ip()
        # check in the list of available peers
        for peer in peer_list:
            if (peer not in rpc_peers):
                # check peers from raiblockscommunity.net
                http = urllib3.PoolManager(cert_reqs='CERT_REQUIRED',
                                           ca_certs=certifi.where())
                response = http.request('GET',
                                        peers_url,
                                        headers=header,
                                        timeout=10.0)
                json_data = json.loads(response.data)
                json_peers = json_data['peers']
                for (i, item) in enumerate(json_peers):
                    json_peers[i] = item['ip'].replace("::ffff:", "")
                if (peer not in json_peers):
                    # possible peer names
                    response = http.request('GET',
                                            known_ips_url,
                                            headers=header,
                                            timeout=10.0)
                    json_data = json.loads(response.data)
                    try:
                        peer_name = json_data['::ffff:{0}'.format(peer)][0]
                        # Warning to admins
                        for user_id in admin_list:
                            push(
                                bot, user_id,
                                'Peer *{0}* ({1}) is offline'.format(
                                    peer, peer_name))
                    except KeyError:
                        # Warning to admins
                        for user_id in admin_list:
                            push(bot, user_id,
                                 'Peer *{0}* is offline'.format(peer))
    except AttributeError as e:
        for user_id in admin_list:
            push(bot, user_id, 'Peers list is empty!')
コード例 #15
0
def compute_solution(Q, counts):
    if len(Q) == 0: return 0
    _, m = common.pop(Q)
    k = counts.pop(m)
    best = m
    if m > 1:
        for a in range(1, m):
            child_Q = copy.deepcopy(Q)
            child_counts = copy.deepcopy(counts)
            b = m - a
            common.push(child_Q, child_counts, a, k)
            common.push(child_Q, child_counts, b, k)
            best = min(best, compute_solution(child_Q, child_counts) + k)
    else:
        best = 1
    common.push(Q, counts, m, k)
    return best
コード例 #16
0
    def do_POST(self):
        post_string = self.rfile.read(int(self.headers['Content-Length']))
        post = json.loads(post_string)
        #print(post)
        self.send_response(200)
        self.send_header('Content-Type', 'application/json')
        self.end_headers()
        # Return empty JSON
        self.wfile.write('{}\n')

        xrb_account = post['account']
        account = mysql_select_by_account(xrb_account)
        if (account is False):
            account = mysql_select_by_account_extra(xrb_account)
        if (account is not False):
            block = json.loads(post['block'])
            if ((block['type'] == 'state')
                    and (block['subtype'] == 'receive')):
                bot = bot_start()
                raw_received = int(post['amount'])
                received_amount = int(math.floor(raw_received / (10**24)))

                balance = account_balance(xrb_account)
                try:
                    mysql_balance = int(account[3])
                except Exception as e:
                    mysql_balance = 0
                if (mysql_balance == balance):  # workaround
                    logging.warning(
                        'Warning receive balance change. Old: {0}, new: {1}'.
                        format(mysql_balance, balance))
                    time.sleep(1)
                    balance = account_balance(xrb_account)
                    if (mysql_balance == balance):
                        time.sleep(8)
                        balance = account_balance(xrb_account)
                # workaround
                frontier = post['hash']
                try:
                    z = account[5]
                    mysql_update_frontier_extra(account[1], frontier)
                except IndexError as e:
                    mysql_update_frontier(account[1], frontier)
                logging.info('{0} --> {1}	{2}'.format(mrai_text(account[3]),
                                                      mrai_text(balance),
                                                      frontier))
                # retrieve sender
                send_source = block['link']
                block_account = rpc(
                    {
                        "action": "block_account",
                        "hash": send_source
                    }, 'account')
                lang_id = mysql_select_language(account[0])
                sender = lang_text('frontiers_sender_account',
                                   lang_id).format(block_account)
                # Sender info
                if (block_account == faucet_account):
                    sender = lang_text('frontiers_sender_faucet', lang_id)
                elif ((block_account == fee_account)
                      or (block_account == welcome_account)):
                    sender = lang_text('frontiers_sender_bot', lang_id)
                elif (block_account == account[1]):
                    sender = lang_text('frontiers_sender_self', lang_id)
                else:
                    sender_account = mysql_select_by_account(block_account)
                    if (sender_account is not False):
                        if ((sender_account[4] is not None)
                                and (sender_account[4])):
                            sender = lang_text('frontiers_sender_username',
                                               lang_id).format(
                                                   sender_account[4])
                        else:
                            sender = lang_text('frontiers_sender_users',
                                               lang_id).format(block_account)
                    else:
                        sender_account_extra = mysql_select_by_account_extra(
                            block_account)
                        if (sender_account_extra is not False):
                            user_sender = mysql_select_user(
                                sender_account_extra[0])
                            if ((user_sender[8] is not None)
                                    and (user_sender[8]) and
                                (account[0] != sender_account_extra[0])):
                                sender = lang_text('frontiers_sender_username',
                                                   lang_id).format(
                                                       user_sender[8])
                            elif (account[0] != sender_account_extra[0]):
                                sender = lang_text(
                                    'frontiers_sender_users',
                                    lang_id).format(block_account)
                try:
                    z = account[5]
                    sender = lang_text('frontiers_sender_by', lang_id).format(
                        sender, account[1].replace("_", "\_"))
                    mysql_update_balance_extra(account[1], balance)
                except IndexError as e:
                    mysql_update_balance(account[1], balance)
                logging.info(sender)
                logging.info(block_account)
                logging.info(
                    '{0} Nano (XRB) received by {1}, hash: {2}'.format(
                        mrai_text(received_amount), account[0], frontier))
                text = lang_text('frontiers_receive',
                                 lang_id).format(mrai_text(received_amount),
                                                 mrai_text(balance),
                                                 mrai_text(0), frontier,
                                                 hash_url, sender)
                mysql_set_sendlist(account[0], text)
                #print(text)
                try:
                    push(bot, account[0], text)
                    if (received_amount >= large_amount_warning):
                        time.sleep(0.25)
                        push(
                            bot, account[0],
                            lang_text('frontiers_large_amount_warning',
                                      lang_id))
                except BadRequest as e:
                    logging.exception('Bad request account {0}'.format(
                        account[0]))
                mysql_delete_sendlist(account[0])
        return
コード例 #17
0
def frontiers():
	time_start = int(time.time())
	# set bot
	bot = Bot(api_key)
	# list from MySQL
	accounts_list = mysql_select_accounts_list()
	# list from node. Replace with wallet_frontiers once released
	frontiers = rpc({"action":"frontiers","account":"xrb_1111111111111111111111111111111111111111111111111117353trpda","count":65536}, 'frontiers')
	#print(len(frontiers))
	
	faucet_account = 'xrb_13ezf4od79h1tgj9aiu4djzcmmguendtjfuhwfukhuucboua8cpoihmh8byo'
	
	for account in accounts_list:
		try:
			frontier = frontiers[account[1]]
		#if ((account[1] == r.keys()[0]) and (account[2] != frontier)):
			if (account[2] != frontier):
				# update frontier
				balance = account_balance(account[1])
				# check if balance changed
				mysql_update_frontier(account[1], frontier)
				#print('{0} --> {1}	{2}'.format(account[3], balance, frontier))
				logging.info('{0} --> {1}	{2}'.format(account[3], balance, frontier))
				#print(balance)
				if (int(account[3]) < int(balance)):
					received_amount = int(balance) - int(account[3])
					max_send = int(balance) - int(fee_amount)
					if (max_send < 0):
						max_send = 0
					# retrieve sender
					send_tx = json.loads(rpc({"action":"block","hash":frontier}, 'contents'))
					#print (send_tx)
					send_source = send_tx['source']
					#print (send_source)
					block_account = rpc({"action":"block_account","hash":send_source}, 'account')
					#print (block_account)
					sender = ''
					if (block_account == faucet_account):
						sender = ' from Faucet/Landing'
					elif (block_account == fee_account):
						sender = ' from @RaiWalletBot itself'
					elif (block_account == account[1]):
						sender = ' from you'
					else:
						for sender_account in accounts_list:
							if (sender_account[1] == block_account):
								if ((sender_account[4] is not None) and (sender_account[4])):
									sender = ' from @{0}'.format(sender_account[4])
								else:
									sender = ' from one of our users'
					#print (sender)
					logging.info(sender)
					# receive fee protection
					mysql_update_balance(account[1], int(balance))
					logging.info('{0} Mrai (XRB) received by {1}, hash: {2}'.format(received_amount, account[0], frontier))
					if (incoming_fee >= 1):
						fee = rpc({"action": "send", "wallet": wallet, "source": account[1], "destination": fee_account, "amount": raw_incoming_fee}, 'block')
						balance = account_balance(account[1])
						push(bot, account[0], '*{0} Mrai (XRB)* received{7}. Transaction hash: [{5}]({6}{5})\nIncoming fee: *{4} Mrai (XRB)*. Your current balance: {1} Mrai (XRB). Send limit: {2} Mrai (XRB)'.format("{:,}".format(received_amount), "{:,}".format(balance), "{:,}".format(max_send), incoming_fee, frontier, hash_url, sender))
						logging.info('Incoming fee deducted')
					else:
						#print(account[0])
						#print('*{0} Mrai (XRB)* received{5}. Transaction hash: [{3}]({4}{3})\nYour current balance: *{1} Mrai (XRB)*. Send limit: {2} Mrai (XRB)'.format("{:,}".format(received_amount), "{:,}".format(balance), "{:,}".format(max_send), frontier, hash_url, sender))
						push(bot, account[0], '*{0} Mrai (XRB)* received{5}. Transaction hash: [{3}]({4}{3})\nYour current balance: *{1} Mrai (XRB)*. Send limit: {2} Mrai (XRB)'.format("{:,}".format(received_amount), "{:,}".format(balance), "{:,}".format(max_send), frontier, hash_url, sender))
					time.sleep(0.1)
		# no frontier. No transactions
		except KeyError:
			# doesn't exist
			x = 0 # do something
	time_end = int(time.time())
	total_time = time_end - time_start 
	#print(total_time)
	if (total_time > 20):
		logging.warning(('WARNING!!! \nMore than 20 seconds execution time!!!'))
	return total_time
コード例 #18
0
ファイル: frontiers.py プロジェクト: junqueira/RaiWalletBot
def frontiers():
    time_start = int(time.time())
    # set bot
    bot = Bot(api_key)
    # list from MySQL
    accounts_list_orig = mysql_select_accounts_list()
    accounts_list_extra = mysql_select_accounts_list_extra()
    accounts_list = accounts_list_orig + accounts_list_extra
    # list from node
    frontiers = rpc({
        "action": "wallet_frontiers",
        "wallet": wallet
    }, 'frontiers')
    frontiers_old = json.loads(mysql_select_frontiers())
    mysql_set_frontiers(json.dumps(frontiers))

    for account in accounts_list:
        try:
            frontier = frontiers[account[1]]
            frontier_old = frontiers_old[account[1]]
            if ((account[2] != frontier) and (frontier == frontier_old)):
                # update frontier
                try:
                    z = account[5]
                    account_mysql = mysql_select_by_account_extra(account[1])
                    if (account[2] == account_mysql[2]):  # no changes in MySQL
                        mysql_update_frontier_extra(account[1], frontier)
                    else:
                        account = account_mysql
                except IndexError as e:
                    account_mysql = mysql_select_by_account(account[1])
                    if (account[2] == account_mysql[2]):  # no changes in MySQL
                        mysql_update_frontier(account[1], frontier)
                    else:
                        account = account_mysql
                # check if balance changed
                balance = account_balance(account[1])
                logging.info('{0} --> {1}	{2}'.format(mrai_text(account[3]),
                                                      mrai_text(balance),
                                                      frontier))
                #print(balance)
                if (int(account[3]) < balance):
                    received_amount = balance - int(account[3])
                    # FEELESS
                    if ((account[0] in LIST_OF_FEELESS) or
                        (mysql_select_send_time(account[0]) is not False)):
                        final_fee_amount = 0
                    else:
                        final_fee_amount = fee_amount
                    # FEELESS
                    max_send = balance - final_fee_amount
                    if (max_send < 0):
                        max_send = 0
                    # retrieve sender
                    send_tx = json.loads(
                        rpc({
                            "action": "block",
                            "hash": frontier
                        }, 'contents'))
                    send_source = send_tx['source']
                    block_account = rpc(
                        {
                            "action": "block_account",
                            "hash": send_source
                        }, 'account')
                    lang_id = mysql_select_language(account[0])
                    sender = lang_text('frontiers_sender_account',
                                       lang_id).format(block_account)
                    # Sender info
                    if (block_account == faucet_account):
                        sender = lang_text('frontiers_sender_faucet', lang_id)
                    elif ((block_account == fee_account)
                          or (block_account == welcome_account)):
                        sender = lang_text('frontiers_sender_bot', lang_id)
                    elif (block_account == account[1]):
                        sender = lang_text('frontiers_sender_self', lang_id)
                    else:
                        for sender_account in accounts_list_orig:
                            if (sender_account[1] == block_account):
                                if ((sender_account[4] is not None)
                                        and (sender_account[4])):
                                    sender = lang_text(
                                        'frontiers_sender_username',
                                        lang_id).format(sender_account[4])
                                else:
                                    sender = lang_text(
                                        'frontiers_sender_users',
                                        lang_id).format(block_account)
                        for sender_account in accounts_list_extra:
                            if (sender_account[1] == block_account):
                                user_sender = mysql_select_user(
                                    sender_account[0])
                                if ((user_sender[8] is not None)
                                        and (user_sender[8])
                                        and (account[0] != sender_account[0])):
                                    sender = lang_text(
                                        'frontiers_sender_username',
                                        lang_id).format(user_sender[8])
                                elif (account[0] != sender_account[0]):
                                    sender = lang_text(
                                        'frontiers_sender_users',
                                        lang_id).format(block_account)
                    try:
                        z = account[5]
                        sender = lang_text('frontiers_sender_by',
                                           lang_id).format(
                                               sender,
                                               account[1].replace("_", "\_"))
                        mysql_update_balance_extra(account[1], balance)
                    except IndexError as e:
                        mysql_update_balance(account[1], balance)
                    logging.info(sender)
                    logging.info(block_account)
                    logging.warning(
                        'NoCallback {0} Mrai (XRB) received by {1}, hash: {2}'.
                        format(mrai_text(received_amount), account[0],
                               frontier))
                    text = lang_text('frontiers_receive', lang_id).format(
                        mrai_text(received_amount), mrai_text(balance),
                        mrai_text(max_send), frontier, hash_url, sender)
                    mysql_set_sendlist(account[0], text.encode("utf8"))
                    #print(text)
                    push(bot, account[0], text)
                    mysql_delete_sendlist(account[0])
                    time.sleep(0.25)
        # no frontier. No transactions
        except KeyError:
            # doesn't exist
            x = 0  # do something
    time_end = int(time.time())
    total_time = time_end - time_start
    #print(total_time)
    if (total_time > 15):
        logging.warning(
            ('WARNING!!! \nMore than 15 seconds execution time!!!'))
    return total_time
コード例 #19
0
async def websockets_receive():
    async with websockets.connect(ws_url) as websocket:
        bot = bot_start()

        await websocket.send(
            json.dumps(
                subscription("confirmation",
                             options={
                                 "include_election_info": "false",
                                 "include_block": "true",
                                 "all_local_accounts": "true"
                             },
                             ack=True)))
        connect = json.loads(await websocket.recv())  # ack
        print(connect)
        logging.info(connect)

        while 1:
            rec = json.loads(await websocket.recv())
            topic = rec.get("topic", None)
            if topic:
                item = rec["message"]
                if topic == "confirmation":
                    item['type'] = item['block']['subtype']
                    if (item['type'] == 'receive' or item['type'] == 'change'
                            or item['type'] == 'epoch'):
                        balance = int(
                            math.floor(
                                int(item['block']['balance']) / (10**24)))
                        account_mysql = mysql_select_by_account(
                            item['account'])
                        extra = False
                        if (account_mysql is False):
                            account_mysql = mysql_select_by_account_extra(
                                item['account'])
                            extra = True
                        if (account_mysql[2] !=
                                item['hash']):  # Compare frontiers
                            if (extra):
                                mysql_update_frontier_extra(
                                    item['account'], item['hash'])
                            else:
                                mysql_update_frontier(item['account'],
                                                      item['hash'])
                            if (item['type'] == 'receive'):  # Receive blocks
                                sender_account = rpc(
                                    {
                                        "action": "block_info",
                                        "hash": item['block']['link']
                                    }, 'block_account')
                                lang_id = mysql_select_language(
                                    account_mysql[0])
                                #logging.info('{0} --> {1}	{2}'.format(mrai_text(account_mysql[3]), mrai_text(balance), item['hash']))
                                sender = find_sender(item, account_mysql,
                                                     sender_account, balance,
                                                     lang_text)
                                received_amount = int(
                                    math.floor(int(item['amount']) / (10**24)))
                                text = lang_text(
                                    'frontiers_receive',
                                    lang_id).format(mrai_text(received_amount),
                                                    mrai_text(balance),
                                                    mrai_text(0), item['hash'],
                                                    hash_url, sender)
                                try:
                                    push(bot, account_mysql[0], text)
                                except BadRequest as e:
                                    logging.exception(
                                        'Bad request account {0}'.format(
                                            account_mysql[0]))
                                logging.info(
                                    '{0} Nano (XRB) received by {1}, hash: {2}'
                                    .format(mrai_text(received_amount),
                                            account_mysql[0], item['hash']))
                                #print(text)
                                # Large amount check
                                if (received_amount >= large_amount_warning):
                                    time.sleep(0.1)
                                    try:
                                        push(
                                            bot, account_mysql[0],
                                            lang_text(
                                                'frontiers_large_amount_warning',
                                                lang_id))
                                    except BadRequest as e:
                                        logging.exception(
                                            'Bad request account {0}'.format(
                                                account_mysql[0]))
                            elif (item['type'] == 'change'):  # Change blocks
                                logging.warning(
                                    'Change block {0} for account {1}'.format(
                                        item['hash'], item['account']))
                                if (balance != int(account_mysql[3])):
                                    logging.error(
                                        'Balance change: {0} --> {1}'.format(
                                            mrai_text(balance),
                                            mrai_text(int(account_mysql[3]))))
                            elif (item['type'] == 'epoch'):  # Epoch blocks
                                logging.warning(
                                    'Epoch block {0} for account {1}'.format(
                                        item['hash'], item['account']))
                                if (balance != int(account_mysql[3])):
                                    logging.error(
                                        'Balance change: {0} --> {1}'.format(
                                            mrai_text(balance),
                                            mrai_text(int(account_mysql[3]))))
                            # Previous block check
                            previous_zero = (
                                item['block']['previous'] ==
                                '0000000000000000000000000000000000000000000000000000000000000000'
                                and account_mysql[2] is None)
                            if ((previous_zero is False)
                                    and item['block']['previous'] !=
                                    account_mysql[2]):
                                logging.error(
                                    'Mismatch for previous block. Expected {0}, received {1}'
                                    .format(account_mysql[2],
                                            item['block']['previous']))
                                if (item['type'] == 'receive'):
                                    time.sleep(0.1)
                                    try:
                                        push(
                                            bot, account_mysql[0],
                                            'Please check received block in explorer, you can receive notification for some older block'
                                        )
                                    except BadRequest as e:
                                        logging.exception(
                                            'Bad request account {0}'.format(
                                                account_mysql[0]))
                else:
                    logging.warning(
                        'Unexpected WebSockets message: {0}'.format(
                            json.dumps(item)))
コード例 #20
0
	def do_POST(self):
		post_string = self.rfile.read(int(self.headers['Content-Length']))
		post = json.loads(post_string)
		#print(post)
		self.send_response(200)
		self.send_header('Content-Type','application/json')
		self.end_headers()
		# Return empty JSON
		self.wfile.write('{}\n')
		
		xrb_account = post['account']
		account = mysql_select_by_account(xrb_account)
		if (account is False):
			account = mysql_select_by_account_extra(xrb_account)
		if (account is not False):
			block = json.loads(post['block'])
			if ((block['type'] == 'receive') or (block['type'] == 'open')):
				bot = Bot(api_key)
				raw_received = int(post['amount'])
				received_amount = int(math.floor(raw_received / (10 ** 24)))
				balance = account_balance(xrb_account)
				frontier = post['hash']
				# FEELESS
				if ((account[0] in LIST_OF_FEELESS) or (mysql_select_send_time(account[0]) is not False)):
					final_fee_amount = 0
				else:
					final_fee_amount = fee_amount
				# FEELESS
				max_send = balance - final_fee_amount
				if (max_send < 0):
					max_send = 0
				try:
					z = account[4]
					mysql_update_frontier_extra(account[1], frontier)
				except IndexError as e:
					mysql_update_frontier(account[1], frontier)
				logging.info('{0} --> {1}	{2}'.format(mrai_text(account[3]), mrai_text(balance), frontier))
				# retrieve sender
				send_source = block['source']
				block_account = rpc({"action":"block_account","hash":send_source}, 'account')
				lang_id = mysql_select_language(account[0])
				sender = lang_text('frontiers_sender_account', lang_id).format(block_account)
				# Sender info
				if (block_account == faucet_account):
					sender = lang_text('frontiers_sender_faucet', lang_id)
				elif ((block_account == fee_account) or (block_account == welcome_account)):
					sender = lang_text('frontiers_sender_bot', lang_id)
				elif (block_account == account[1]):
					sender = lang_text('frontiers_sender_self', lang_id)
				else:
					accounts_list = mysql_select_accounts_list()
					for sender_account in accounts_list:
						if (sender_account[1] == block_account):
							if ((sender_account[4] is not None) and (sender_account[4])):
								sender = lang_text('frontiers_sender_username', lang_id).format(sender_account[4])
							else:
								sender = lang_text('frontiers_sender_users', lang_id).format(block_account)
					accounts_list_extra = mysql_select_accounts_list_extra()
					for sender_account in accounts_list_extra:
							if (sender_account[1] == block_account):
								user_sender = mysql_select_user(sender_account[0])
								if ((user_sender[8] is not None) and (user_sender[8]) and (account[0] != sender_account[0])):
									sender = lang_text('frontiers_sender_username', lang_id).format(user_sender[8])
								elif (account[0] != sender_account[0]):
									sender = lang_text('frontiers_sender_users', lang_id).format(block_account)
				try:
					z = account[4]
					sender = lang_text('frontiers_sender_by', lang_id).format(sender, account[1].replace("_", "\_"))
					mysql_update_balance_extra(account[1], balance)
				except IndexError as e:
					mysql_update_balance(account[1], balance)
				logging.info(sender)
				logging.info(block_account)
				logging.info('{0} Mrai (XRB) received by {1}, hash: {2}'.format(mrai_text(received_amount), account[0], frontier))
				text = lang_text('frontiers_receive', lang_id).format(mrai_text(received_amount), mrai_text(balance), mrai_text(max_send), frontier, hash_url, sender)
				mysql_set_sendlist(account[0], text.encode("utf8"))
				#print(text)
				push(bot, account[0], text)
				mysql_delete_sendlist(account[0])
		return
コード例 #21
0
ファイル: frontiers.py プロジェクト: megamcloud/NanoWalletBot
def receive_messages(bot, account, balance):
    history = rpc(
        {
            "action": "account_history",
            "account": account[1],
            "count": "50"
        }, 'history')
    for item in history:
        if (item['hash'] == account[2]):
            break
        if (item['type'] == 'receive'):
            received_amount = int(math.floor(int(item['amount']) / (10**24)))
            # retrieve sender
            block_account = item['account']
            lang_id = mysql_select_language(account[0])
            sender = lang_text('frontiers_sender_account',
                               lang_id).format(block_account)
            # Sender info
            if (block_account == faucet_account):
                sender = lang_text('frontiers_sender_faucet', lang_id)
            elif ((block_account == fee_account)
                  or (block_account == welcome_account)):
                sender = lang_text('frontiers_sender_bot', lang_id)
            elif (block_account == account[1]):
                sender = lang_text('frontiers_sender_self', lang_id)
            else:
                # Sender from bot
                account_mysql = mysql_select_by_account_extra(block_account)
                if (account_mysql is False):
                    # sender from users accounts
                    account_mysql = mysql_select_by_account(block_account)
                    if (account_mysql is not False):
                        if ((account_mysql[4] is not None)
                                and (account_mysql[4])):
                            sender = lang_text('frontiers_sender_username',
                                               lang_id).format(
                                                   account_mysql[4])
                        elif (block_account != account[1]):
                            sender = lang_text('frontiers_sender_users',
                                               lang_id).format(block_account)
                else:
                    # sender from extra accounts
                    user_sender = mysql_select_user(account_mysql[0])
                    if ((user_sender[8] is not None) and (user_sender[8])
                            and (account[0] != account_mysql[0])):
                        sender = lang_text('frontiers_sender_username',
                                           lang_id).format(user_sender[8])
                    elif (block_account != account[1]):
                        sender = lang_text('frontiers_sender_users',
                                           lang_id).format(block_account)
            try:
                z = account[5]
                sender = lang_text('frontiers_sender_by', lang_id).format(
                    sender, account[1].replace("_", "\_"))
                mysql_update_balance_extra(account[1], balance)
            except IndexError as e:
                mysql_update_balance(account[1], balance)
            logging.info(sender)
            logging.info(block_account)
            logging.warning(
                'NoCallback {0} Nano (XRB) received by {1}, hash: {2}'.format(
                    mrai_text(received_amount), account[0], item['hash']))
            text = lang_text('frontiers_receive',
                             lang_id).format(mrai_text(received_amount),
                                             mrai_text(balance), mrai_text(0),
                                             item['hash'], hash_url, sender)
            mysql_set_sendlist(account[0], text)
            #print(text)
            push(bot, account[0], text)
            mysql_delete_sendlist(account[0])
            time.sleep(0.25)
            if (received_amount >= large_amount_warning):
                push(bot, account[0],
                     lang_text('frontiers_large_amount_warning', lang_id))
                time.sleep(0.25)