@fantazy546

Почему не работает вывод сообщения через телеграмм бота с push-уведомлениями?

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)

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

А в этой не выводит сообщения через библиотеку telebot (все остальное в ней работает)
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('====================')
  • Вопрос задан
  • 176 просмотров
Пригласить эксперта
Ответы на вопрос 1
tumbler
@tumbler Куратор тега Python
бекенд-разработчик на python
Тут только отладчик поможет.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы