F
F
fantazy5462020-08-20 15:26:43
Python
fantazy546, 2020-08-20 15:26:43

Why does the output of a message through a telegram bot with push notifications not work?

import telebot
import blockcypher
import pyetherbalance
TOKEN='token'
bot = telebot.TeleBot(TOKEN)

# Декоратор для обработки всех текстовых сообщений
@bot.message_handler(content_types=['text'])
def all_messages(msg):
    # Получаем сообщение пользователя
    message = msg.text
    # Получаем Telegram id пользователя (очевидно, для каждого пользователя он свой)
    user_id = msg.chat.id
    # Отправляем сообщение
    bot.send_message(user_id, f"Вы написали: {message}")

@bot.message_handler(content_types=['text'])
class check():
    # считываем данные из файла с текущими данными
    with open(r'current_data.txt', mode='r', encoding='utf-8') as cur_fl:
        # получим список всех строк
        cur_data_lines = cur_fl.readlines()
        # на основе списка создадим словарь ключ:значение
        cur_data_dict = {
            ln.split(';')[0]:ln.split(';')[1]  # разделение строки по ';' - левая часть в ключ, правая в значение
            for ln in cur_data_lines
        }
    # то же самое, но для файла с предыдущими значениями
    with open(r'prev_data.txt', mode='r', encoding='utf-8') as prev_fl:
        prev_data_lines = prev_fl.readlines()
        prev_data_dict = {ln.split(';')[0]:ln.split(';')[1] for ln in prev_data_lines}

    with open(r'prev_balance.txt', mode='r', encoding='utf-8') as prev_blnc:
        prev_balance_lines = prev_blnc.readlines()

    with open(r'current_balance.txt', mode='w', encoding='utf-8') as cur_blnc:
        for k, v in cur_data_dict.items():
            if k[0:2] == '0x':
                # Sign up for https://infura.io/, and get the url to an ethereum node
                infura_url = 'https://mainnet.infura.io/v3/b482db9fdf2e4e5083198bb029e0d70f'
                # Create an pyetherbalance object , pass the infura_url
                ethbalance = pyetherbalance.PyEtherBalance(infura_url)
                # get ether balance
                cur_balance_eth = ethbalance.get_eth_balance(k)
                cur_balance_in_eth = cur_balance_eth['balance']
                cur_blnc.write(str(cur_balance_in_eth) + '\n')
            else:
                balance = blockcypher.get_total_balance(k, 'btc')
                cur_balance_in_btc = balance / 100000000
                cur_blnc.write(str(cur_balance_in_btc) + '\n')

    # обход по циклу всех пар ключ:значение из файла с текущими данными
    for k, v in cur_data_dict.items():
        # если ключ есть в предыдущем файле и значение не равно предыдущему
        if (k in prev_data_dict.keys()) and (v != prev_data_dict[k]):
            if k[0:2] == '0x':
                line = cur_data_lines.index(k + ';' + v)
                with open("current_data.txt", "r") as f1, open("prev_balance.txt", "r") as f2:
                    rows_1 = f1.readlines()
                    rows_2 = f2.readlines()
                if len(rows_1) > line and len(rows_2) > line:
                    prev_balance_in_eth = rows_2[line]

                # Sign up for https://infura.io/, and get the url to an ethereum node
                infura_url = 'https://mainnet.infura.io/v3/b482db9fdf2e4e5083198bb029e0d70f'
                # Create an pyetherbalance object , pass the infura_url
                ethbalance = pyetherbalance.PyEtherBalance(infura_url)
                # get ether balance
                balance_eth = ethbalance.get_eth_balance(k)
                balance_in_eth = balance_eth['balance']
                telegram_bot.send_message(f'Изменение количества транзакций в адресе {k}. Значение изменилось на {v}.'+"\n"+'Текущий баланс ' + balance_in_eth + ' ETH')
                print("---ETH")
                print('Адресс: ' + k)
                print('Количество транзакций: ' + v)
                try:
                    print('Предыдущий баланс: ' + prev_balance_in_eth)
                except:
                    print('file is empty')
                print('Текущий баланс: ')
                print(balance_in_eth)
                print('====================')
            else:
                line = cur_data_lines.index(k + ';' + v)
                with open("current_data.txt", "r") as f1, open("prev_balance.txt", "r") as f2:
                    rows_1 = f1.readlines()
                    rows_2 = f2.readlines()
                if len(rows_1) > line and len(rows_2) > line:
                    prev_balance_in_btc = rows_2[line]

                balance = blockcypher.get_total_balance(k, 'btc')
                balance_in_btc = balance / 100000000
                telegram_bot.send_message(f'Изменение количества транзакций в адресе {k}. Значение изменилось на {v}.'+"\n"+'Текущий баланс ' + balance_in_btc + ' BTC')
                print("---BTC")
                print('Адресс: ' + k)
                print('Количество транзакций: ' + v)
                try:
                    print('Предыдущий баланс: ' + prev_balance_in_btc)
                except:
                    print('file is empty')
                print('Текущий баланс: ')
                print(balance_in_btc)
                print('====================')
            # переносим значения текущего файла в файл с предыдущими данными
            # открывает файл с предыдущими данными на запись
    with open(r'prev_data.txt', mode='w', encoding='utf-8') as prev_fl:
        # открываем файл с текущими данными на чтение
        with open(r'current_data.txt', mode='r', encoding='utf-8') as cur_fl:
            # записываем в файл с предыдущими файлами то, что прочли из файла с текущими
            prev_fl.write(cur_fl.read())

    with open(r'prev_balance.txt', mode='w', encoding='utf-8') as prev_balance:
        # открываем файл с текущими данными на чтение
        with open(r'current_balance.txt', mode='r', encoding='utf-8') as cur_balance:
            # записываем в файл с предыдущими файлами то, что прочли из файла с текущими
            prev_balance.write(cur_balance.read())
            
# Запускаем бота, чтобы работал 24/7
if __name__ == '__main__':
    bot.polling(none_stop=True)

It is necessary that notifications be displayed through the bot when the data in the files changes.
This function works:
def all_messages(msg):
    # Получаем сообщение пользователя
    message = msg.text
    # Получаем Telegram id пользователя (очевидно, для каждого пользователя он свой)
    user_id = msg.chat.id
    # Отправляем сообщение
    bot.send_message(user_id, f"Вы написали: {message}")

And in this one it does not display messages through the telebot library (everything else works in it)
for k, v in cur_data_dict.items():
        # если ключ есть в предыдущем файле и значение не равно предыдущему
        if (k in prev_data_dict.keys()) and (v != prev_data_dict[k]):
            if k[0:2] == '0x':
                line = cur_data_lines.index(k + ';' + v)
                with open("current_data.txt", "r") as f1, open("prev_balance.txt", "r") as f2:
                    rows_1 = f1.readlines()
                    rows_2 = f2.readlines()
                if len(rows_1) > line and len(rows_2) > line:
                    prev_balance_in_eth = rows_2[line]

                # Sign up for https://infura.io/, and get the url to an ethereum node
                infura_url = 'https://mainnet.infura.io/v3/b482db9fdf2e4e5083198bb029e0d70f'
                # Create an pyetherbalance object , pass the infura_url
                ethbalance = pyetherbalance.PyEtherBalance(infura_url)
                # get ether balance
                balance_eth = ethbalance.get_eth_balance(k)
                balance_in_eth = balance_eth['balance']
                telegram_bot.send_message(f'Изменение количества транзакций в адресе {k}. Значение изменилось на {v}.'+"\n"+'Текущий баланс ' + balance_in_eth + ' ETH')
                print("---ETH")
                print('Адресс: ' + k)
                print('Количество транзакций: ' + v)
                try:
                    print('Предыдущий баланс: ' + prev_balance_in_eth)
                except:
                    print('file is empty')
                print('Текущий баланс: ')
                print(balance_in_eth)
                print('====================')
            else:
                line = cur_data_lines.index(k + ';' + v)
                with open("current_data.txt", "r") as f1, open("prev_balance.txt", "r") as f2:
                    rows_1 = f1.readlines()
                    rows_2 = f2.readlines()
                if len(rows_1) > line and len(rows_2) > line:
                    prev_balance_in_btc = rows_2[line]

                balance = blockcypher.get_total_balance(k, 'btc')
                balance_in_btc = balance / 100000000
                telegram_bot.send_message(f'Изменение количества транзакций в адресе {k}. Значение изменилось на {v}.'+"\n"+'Текущий баланс ' + balance_in_btc + ' BTC')
                print("---BTC")
                print('Адресс: ' + k)
                print('Количество транзакций: ' + v)
                try:
                    print('Предыдущий баланс: ' + prev_balance_in_btc)
                except:
                    print('file is empty')
                print('Текущий баланс: ')
                print(balance_in_btc)
                print('====================')

Answer the question

In order to leave comments, you need to log in

1 answer(s)
S
Sergey Tikhonov, 2020-08-20
@tumbler

Only a debugger will help here.

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question