При создании бота пришел к тому что хранить все в одной файле не разумно и не удобно, решил разделить по разным.
Но столкнулся с проблемой.
Использую библиотеку aiogram.
Вот моя директория, код __init__.py :
from handlers import text
from handlers import tiktok
Вот код create_bot.py :
import os
import config
from aiogram import Bot, types
from aiogram.dispatcher import Dispatcher
bot = Bot(token=config.TOKEN)
dp = Dispatcher(bot)
main1.py
from aiogram.utils import executor
from create_bot import dp
async def on_startup(_):
print('Бот запущен')
from handlers import text
from handlers import tiktok
text.register_handlers_text(dp)
tiktok.register_handlers_tiktok(dp)
if __name__ == "__main__":
executor.start_polling(dp, skip_updates=True, on_startup=on_startup)
text.py :
from aiogram import types, Dispatcher
from create_bot import dp, bot
#@dp.message_handler()
async def text1(message:types.Message):
if "привет" in message.text.lower():
await bot.send_message(message.chat.id, "привет!")
def register_handlers_text(dp : Dispatcher):
dp.register_message_handler(text1)
И вот основной код который скачивает тиктоки
tiktok.py :
import requests
import os
from aiogram import Dispatcher, types
from tiktok_downloader import snaptik
from create_bot import dp, bot
def download_video(video_url, name):
r = requests.get(video_url, allow_redirects=True)
content_type = r.headers.get('content-type')
if content_type == 'video/mp4':
open(f'./videos/video{name}.mp4', 'wb').write(r.content)
else:
pass
if not os.path.exists('videos'):
os.makedirs('videos')
#@dp.message_handler(commands=['start', 'help'])
async def start(message: types.Message):
await bot.send_message(message.chat.id, text='привет')
#@dp.message_handler(content_types=['text'])
async def tiktokdownloader(message: types.Message):
message_id_to_delete = message.message_id
if message.text.startswith('https://www.tiktok.com'):
await bot.send_message(chat_id=message.chat.id, text='скачиваю')
video_url = message.text
try:
snaptik(video_url).get_media()[0].download(f"./videos/result_{message.from_user.id}.mp4")
path = f'./videos/result_{message.from_user.id}.mp4'
with open(f'./videos/result_{message.from_user.id}.mp4', 'rb') as file:
await bot.send_video(
chat_id=message.chat.id,
video=file.read(),
)
await bot.delete_message(message.chat.id, message_id_to_delete)
await bot.delete_message(message.chat.id, message.message_id + 1)
os.remove(path)
except Exception as e:
print(e)
await bot.send_message(chat_id=message.chat.id,
text='я не могу это скачать')
elif message.text.startswith('https://vm.tiktok.com') or message.text.startswith('http://vm.tiktok.com'):
await bot.send_message(chat_id=message.chat.id, text='скачиваю')
video_url = message.text
try:
snaptik(video_url).get_media()[0].download(f"./videos/result_{message.from_user.id}.mp4")
path = f'./videos/result_{message.from_user.id}.mp4'
with open(f'./videos/result_{message.from_user.id}.mp4', 'rb') as file:
await bot.send_video(
chat_id=message.chat.id,
video=file.read(),
)
await bot.delete_message(message.chat.id, message_id_to_delete)
await bot.delete_message(message.chat.id, message.message_id + 1)
os.remove(path)
except Exception as e:
print(e)
await bot.send_message(chat_id=message.chat.id,
text='я не могу это скачать')
elif message.text.startswith('https://vt.tiktok.com') or message.text.startswith('http://vt.tiktok.com'):
await bot.send_message(chat_id=message.chat.id, text='скачиваю')
video_url = message.text
try:
snaptik(video_url).get_media()[0].download(f"./videos/result_{message.from_user.id}.mp4")
path = f'./videos/result_{message.from_user.id}.mp4'
with open(f'./videos/result_{message.from_user.id}.mp4', 'rb') as file:
await bot.send_video(
chat_id=message.chat.id,
video=file.read(),
)
await bot.delete_message(message.chat.id, message_id_to_delete)
await bot.delete_message(message.chat.id, message.message_id + 1)
os.remove(path)
except Exception as e:
print(e)
await bot.send_message(chat_id=message.chat.id,
text='я не могу это скачать')
def register_handlers_tiktok(dp : Dispatcher):
dp.register_message_handler(start, commands=['start', 'help'])
dp.register_message_handler(tiktokdownloader)
При запуске бота, не работает tiktok.py, но работает text.py .
Если убрать импорт text'a начинает работать и tiktok.
Пожалуйста помогите решить проблему.