如何修复Telegram机器人自动发群消息时的参数缺失错误?
解决Telegram机器人自动发消息的参数缺失错误
问题原因
你当前的buy()和sell()函数是为Telegram机器人的命令交互场景设计的(比如用户发送指令后触发),所以需要update和context参数来获取对话上下文。但在handle_event中自动调用时,没有传递这两个参数,因此触发TypeError。
解决方案
核心思路是分离消息发送逻辑与Telegram交互逻辑:直接使用机器人实例向指定群组发送消息,不再依赖update和context参数。
步骤1:初始化Telegram机器人实例
先确保你已经获取了机器人Token和目标群组ID,初始化全局可访问的Bot对象:
from telegram import Bot # 替换为你的机器人Token和群组ID TELEGRAM_BOT_TOKEN = "your_bot_token_here" TARGET_CHAT_ID = "your_group_chat_id_here" # 初始化机器人 bot = Bot(token=TELEGRAM_BOT_TOKEN)
步骤2:重构消息发送函数
去掉依赖update和context的函数,改为直接接收交易数据,调用Bot的send_message方法发消息:
def send_buy_notification(eth_amount, token_amount): """发送买入通知到指定群组""" message = f"Buy!!!!\n💴: {eth_amount}\nToken Bought: {token_amount}\n" bot.send_message(chat_id=TARGET_CHAT_ID, text=message) def send_sell_notification(eth_amount, token_amount): """发送卖出通知到指定群组""" message = f"Sell!!!!\n💴: {eth_amount}\nToken Sold: {token_amount}\n" bot.send_message(chat_id=TARGET_CHAT_ID, text=message)
步骤3:修改事件处理函数
在handle_event中计算好格式化后的金额,直接调用新的通知函数,同时修正原条件判断的逻辑漏洞:
def handle_event(event): # 从事件中提取数据 amount0In = event['args']['amount0In'] amount1Out = event['args']['amount1Out'] amount1In = event['args']['amount1In'] amount0Out = event['args']['amount0Out'] # 格式化金额(转换为可读单位) decimals = 10**18 if amount0In != 0 and amount1Out != 0: token_sold = amount0In / decimals eth_got = amount1Out / decimals print(f"Token Sold {token_sold}, and eth {eth_got}") send_sell_notification(eth_got, token_sold) else: token_bought = amount0Out / decimals eth_spent = amount1In / decimals print(f"Token Bought {token_bought}, and eth {eth_spent}") send_buy_notification(eth_spent, token_bought)
关键改进点
- 移除全局变量:通过函数传参传递交易数据,避免全局变量导致的状态混乱
- 修正条件判断:原
if amount0In and amount1Out !=0存在逻辑漏洞,改为明确判断amount0In !=0,避免数字0被误判为布尔False - 解耦逻辑:将Telegram消息发送逻辑独立,不再依赖交互上下文,适合自动触发场景
内容的提问来源于stack exchange,提问作者jimmyblue
相关产品推荐
相关产品推荐

