Задать вопрос
antonromashka
@antonromashka
"Веб-разработка - наше все"

Почему не работает код?

Не работает данный код по загрузке файла на сервер телеграмм. Прошу не смотреть на сам код, ибо писал с помощью разных источников и официального API. Скорее всего ошибки в импорте библиотек, не понимаю почему не работают. Вот код:
from telegram.ext import Updater, CommandHandler, MessageHandler, Filters
from telegram import ChatAction
import os

TOKEN = "<YOUR_BOT_TOKEN>"

def start(update, context):
    update.message.reply_text("Пришли мне файл, и я загружу его на сервер Telegram.")

def upload_file(update, context):
    context.bot.send_chat_action(chat_id=update.message.chat_id, action=ChatAction.UPLOAD_DOCUMENT)

    file = update.message.document
    file_name = file.file_name

    file_path = f"downloads/{file_name}"
    file.get_file().download(file_path)

    file_id = file.file_id
    download_link = f"https://api.telegram.org/file/bot{TOKEN}/{file_id}"

    update.message.reply_text(f"Файл '{file_name}' успешно загружен на сервер Telegram.\n"
                              f"Ссылка для скачивания: {download_link}")

def main():
    updater = Updater(token=TOKEN, use_context=True)
    dispatcher = updater.dispatcher

    dispatcher.add_handler(CommandHandler("start", start))
    dispatcher.add_handler(MessageHandler(Filters.document, upload_file))

    updater.start_polling()
    updater.idle()

if __name__ == '__main__':
    main()


UPD: Ошибка заключается в 1 строке, а именно:
Traceback (most recent call last):
  File "C:\Users\Anton\Desktop\py.py", line 1, in <module>
    from telegram.ext import Updater, CommandHandler, MessageHandler, Filters
ImportError: cannot import name 'Filters' from 'telegram.ext' (C:\Users\Anton\AppData\Local\Programs\Python\Python312\Lib\site-packages\telegram\ext\__init__.py)


UPD 2: После исправления первых 2 строк на это:
from telegram.ext import Updater, CommandHandler, MessageHandler, filters
from telegram.chataction import ChatAction

Появилась новая проблема:
Traceback (most recent call last):
  File "C:\Users\Anton\Desktop\py.py", line 2, in <module>
    from telegram.chataction import ChatAction
ModuleNotFoundError: No module named 'telegram.chataction'

Полазил в инете, telegram.chataction было самым "лучшим" решением проблемы, но одна проблема сменилась на другую
  • Вопрос задан
  • 828 просмотров
Подписаться 2 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 2
febday
@febday
Код полностью рабочий
Но можно улучшить и не создавать самостоятельность ссылку на скачивание, а взять это из
file.get_file()


Примерно так:
info_file = file.get_file()
info_file.download(file_path)

download_link = info_file.file_path
Ответ написан
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Начиная с версии 20.0 модуль Filters был полностью переписан.
Подробности читате здесь: https://docs.python-telegram-bot.org/en/stable/tel...
P.S.
ChatAction начиная с версии 20.0 является enum'ом в telegram.constants.
https://docs.python-telegram-bot.org/en/stable/tel...
P.P.S. Учитесь работать с документацией.
Ответ написан
Ваш ответ на вопрос

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

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