推送新消息时删除旧消息, 不然全是推送通知

This commit is contained in:
wood 2024-09-03 19:17:59 +08:00
parent f48655de19
commit dc6a40d96a

View File

@ -3,7 +3,6 @@ import ccxt
import telebot import telebot
import schedule import schedule
import time import time
import logging
from datetime import datetime, timedelta from datetime import datetime, timedelta
import pytz import pytz
@ -14,6 +13,9 @@ CHAT_ID = os.environ['CHAT_ID']
bot = telebot.TeleBot(BOT_TOKEN) bot = telebot.TeleBot(BOT_TOKEN)
SYMBOLS = os.environ['SYMBOLS'].split(',') SYMBOLS = os.environ['SYMBOLS'].split(',')
# 用于存储上一条消息的ID
last_message_id = None
def get_ticker_info(symbol): def get_ticker_info(symbol):
ticker = exchange.fetch_ticker(symbol) ticker = exchange.fetch_ticker(symbol)
return { return {
@ -27,6 +29,7 @@ def get_ticker_info(symbol):
'bid': ticker['bid'], 'bid': ticker['bid'],
'ask': ticker['ask'] 'ask': ticker['ask']
} }
def format_change(change_percent): def format_change(change_percent):
if change_percent > 0: if change_percent > 0:
return f"🔼 +{change_percent:.2f}%" return f"🔼 +{change_percent:.2f}%"
@ -34,7 +37,9 @@ def format_change(change_percent):
return f"🔽 {change_percent:.2f}%" return f"🔽 {change_percent:.2f}%"
else: else:
return f"◀▶ {change_percent:.2f}%" return f"◀▶ {change_percent:.2f}%"
def send_price_update(): def send_price_update():
global last_message_id
now = datetime.now(singapore_tz) now = datetime.now(singapore_tz)
message = f"市场更新 - {now.strftime('%Y-%m-%d %H:%M:%S')} (SGT)\n\n" message = f"市场更新 - {now.strftime('%Y-%m-%d %H:%M:%S')} (SGT)\n\n"
@ -50,38 +55,38 @@ def send_price_update():
message += f"24h 成交额: ${info['quote_volume']:.2f}\n" message += f"24h 成交额: ${info['quote_volume']:.2f}\n"
message += f"买一/卖一: ${info['bid']:.7f} / ${info['ask']:.7f}\n\n" message += f"买一/卖一: ${info['bid']:.7f} / ${info['ask']:.7f}\n\n"
bot.send_message(CHAT_ID, message, parse_mode='Markdown') # 如果存在上一条消息,则删除它
if last_message_id:
try:
bot.delete_message(chat_id=CHAT_ID, message_id=last_message_id)
except Exception as e:
print(f"Failed to delete previous message: {e}")
# 发送新消息并保存其ID
sent_message = bot.send_message(CHAT_ID, message, parse_mode='Markdown')
last_message_id = sent_message.message_id
def run(): def run():
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s') # 立即执行一次价格更新
logger = logging.getLogger('BinanceUpdater') print("Sending initial price update...")
send_price_update()
# 设置定时任务,每小时整点执行
for hour in range(24):
schedule.every().day.at(f"{hour:02d}:00").do(send_price_update)
print("Scheduled tasks set. Waiting for next hour...")
# 等待下一个整点
now = datetime.now(singapore_tz)
next_hour = (now + timedelta(hours=1)).replace(minute=0, second=0, microsecond=0)
time.sleep((next_hour - now).total_seconds())
print("Starting main loop...")
while True: while True:
try: schedule.run_pending()
# 立即执行一次价格更新 time.sleep(30) # 每30秒检查一次可以根据需要调整
logger.info("Sending initial price update...")
send_price_update()
# 设置定时任务,每小时整点执行
for hour in range(24):
schedule.every().day.at(f"{hour:02d}:00").do(send_price_update)
logger.info("Scheduled tasks set. Waiting for next hour...")
# 等待下一个整点
now = datetime.now(singapore_tz)
next_hour = (now + timedelta(hours=1)).replace(minute=0, second=0, microsecond=0)
time.sleep((next_hour - now).total_seconds())
logger.info("Starting main loop...")
while True:
schedule.run_pending()
time.sleep(30) # 每30秒检查一次可以根据需要调整
except Exception as e:
logger.error(f"An error occurred in BinanceUpdater: {str(e)}")
logger.info("Attempting to restart BinanceUpdater in 60 seconds...")
time.sleep(60) # 等待60秒后重试
if __name__ == '__main__': if __name__ == '__main__':
run() run()