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('====================')