Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Помогите написать скрипт бота telebot pyton

Shash_29 Мастер (1126), на голосовании 9 месяцев назад
Нужно написать бота-файлообменника
Как он должен работать - человек скидывает файл в бота, он пишет что файл загружен на сервер, файл добавляется в папку "загруженые", и выдает ссылку на загрузку. Любой человек имеющий эту ссылку может вставить её в этого бота и скачать файл. Бот должен записывать все действия(имя пользователя, название файла) в файл logs.log
Голосование за лучший ответ
Professional Professional Мудрец (15210) 10 месяцев назад
Сначала вам понадобится библиотека telebot для Python, которую можно установить с помощью pip, если у вас её ещё нет:

```
pip install pyTelegramBotAPI
```

Потом вы можете использовать следующий скрипт в качестве основы для вашего бота. Он будет работать так, как вы описали. Учтите, что вам нужно будет подставить свой токен бота и путь к папке для загрузки файлов.

```python
import telebot
import os
import logging
from urllib.parse import quote_plus

# Настройка логирования
logging.basicConfig(filename='logs.log', level=logging.INFO)

# Ваш токен бота
TOKEN = 'your_bot_token_here'
bot = telebot.TeleBot(TOKEN)

# Папка для сохранения файлов
UPLOAD_FOLDER = 'uploaded'

# Создание папки для загрузки, если её ещё нет
os.makedirs(UPLOAD_FOLDER, exist_ok=True)


@bot.message_handler(content_types=['document'])
def handle_docs(message):
try:
file_info = bot.get_file(message.document.file_id)
downloaded_file = bot.download_file(file_info.file_path)

filepath = os.path.join(UPLOAD_FOLDER, message.document.file_name)
with open(filepath, 'wb') as new_file:
new_file.write(downloaded_file)

download_link = quote_plus(filepath)

logging.info('User: %s, File: %s', message.from_user, message.document.file_name)

bot.reply_to(message, f"Файл загружен на сервер. Ссылка на загрузку: {download_link}")
except Exception as e:
bot.reply_to(message, f"Произошла ошибка при загрузке файла: {e}")


@bot.message_handler(func=lambda msg: msg.text is not None)
def download_file(message):
try:
filepath = message.text
if os.path.exists(filepath):
with open(filepath, 'rb') as file:
bot.send_document(message.chat.id, file)
else:
bot.reply_to(message, "Файл не найден.")
except Exception as e:
bot.reply_to(message, f"Произошла ошибка при скачивании файла: {e}")


if __name__ == '__main__':
bot.polling(none_stop=True)
```

Обратите внимание, что этот скрипт принимает и обрабатывает только файлы. Кроме того, ссылка на загрузку, которую он предоставляет, - это просто путь к файлу на сервере, а не URL-ссылка для загрузки через веб. Если вы хотите предоставить URL-ссылку для загрузки файла через веб, вам нужно будет настроить веб-сервер для этого.

Важно учесть, что эта реализация не обеспечивает безопасность доступа к файлам - любой, у кого есть ссылка, может загрузить файл. Если вам нужна более сложная система прав доступа, вам нужно будет использовать другой подход.

Последнее, но не менее важное, это скри

пт не обрабатывает ошибки наиболее гибким способом. В зависимости от ваших потребностей, вы, возможно, захотите добавить дополнительные проверки и обработчики ошибок.
СОВА ⭐ [expert]Мастер (2469) 10 месяцев назад
импостер! форсит chatGPT
Professional Professional Мудрец (15210) Дарина Андреевна ⭐, у тебя научился
Shash_29Мастер (1126) 10 месяцев назад
не работает, переделай
Похожие вопросы