我正在使用 python-telegram-bot 库开发 Telegram 机器人。该机器人应该将 GIF 和视频转发给另一个用户,而不给原始发件人的 ID 添加水印。虽然 send_animation 工作正常,但 send_video 无法发送视频。这是我的代码的相关部分:
def forward_media(update: Update, context: CallbackContext):
message = update.message
bot = context.bot
chat_id = TARGET_USER_ID
try:
if message.animation:
bot.send_animation(chat_id=chat_id, animation=message.animation.file_id,
caption=message.caption, parse_mode=ParseMode.HTML)
update.message.reply_text("GIF has been forwarded successfully.")
elif message.video:
bot.send_video(chat_id=chat_id, video=message.video.file_id,
caption=message.caption, parse_mode=ParseMode.HTML)
update.message.reply_text("Video has been forwarded successfully.")
else:
update.message.reply_text("Please send a GIF or video.")
except Exception as e:
logging.error(f"Error occurred: {e}")
update.message.reply_text("An error occurred while forwarding the media. Please try again.")
TL;DR:python-telegram-bot 中的 send_video 无法发送视频(不执行任何操作且没有错误),而 send_animation 对于 GIF 效果很好。为什么会发生这种情况,我该如何解决它?
如果视频没有被转发并且没有捕获到异常,那么我想知道指定的条件是否真的被执行了。您可以通过添加一些打印语句来记录执行流程来确认您的代码正在执行吗?
此外,我看到的另一种解决方法是使用
copy_message
方法而不是多种情况。 copy_message
方法可以转发任何类型的消息,无需转发自标签。
它看起来像:
def forward_media(update: Update, context: CallbackContext):
message = update.message
bot = context.bot
chat_id = TARGET_USER_ID
try:
if message.animation or message.video:
bot.copy_message(chat_id=chat_id, from_chat_id=message.chat_id, message_id=message.message_id)
update.message.reply_text("Media has been forwarded successfully.")
else:
update.message.reply_text("Please send a GIF or video.")
except Exception as e:
logging.error(f"Error occurred: {e}")
update.message.reply_text("An error occurred while forwarding the media. Please try again.")
希望这有帮助!