scanner-research / scanner

Efficient video analysis at scale
https://scanner-research.github.io/
Apache License 2.0
615 stars 108 forks source link

ImportError: cannot import name 'Database' from 'db' #301

Open ArtyomMedved opened 8 months ago

ArtyomMedved commented 8 months ago

I don’t know what I did wrong but it gives an error, I’m using a MacBook version of Sonoma, I hope for your help)

import config
import logging

from aiogram import Bot, Dispatcher, executor, types
from aiogram.types.message import ContentType

import markups as nav
from db import Database

# log
logging.basicConfig(level=logging.INFO)

# init
bot = Bot(token=config.TOKEN)
dp = Dispatcher(bot)

db = Database('database.db')

#start
@dp.message_handler(commands=['start'])
async def start(message: types.Message):
    if(not db.user_exists(message.from_user.id)):
        db.add_user(message.from_user.id)
        await bot.send_message(message.from_user.id, "Укажите ваш ник:")
    else:
        await bot.send_message(message.from_user.id, "Вы уже зарегестрированы!", reply_markup=nav.mainMenu)

@dp.message_handler()
async def bot_message(message: types.Message):
    if message.chat.type == 'private':
        if message.text == 'Профиль':
            pass

        else:
            if db.get_singup(message.from_user.id) == "setnickname":
                if(len(message.text) > 15):
                    await bot.send_message(message.from_user.id, "Никнейм не должен превышать 15 символов")
                elif '@' in message.text or '/' in message.text:
                    await bot.send_message(message.from_user.id, "Никнейм не должен содержать @ или /")
                else:
                    db.set_nickname(message.from_user.id, message.text)
                    db.set_singup(message.from_user.id, "done")
                    await bot.send_message(message.from_user.id, "Регистрация успешна!", reply_markup=nav.mainMenu)
            else:
                await bot.send_message(message.from_user.id, "что?")

# prices
PRICE = types.LabeledPrice(label="Подписка на 1 месяц", amount=500*100)  # в копейках (руб)

# buy
@dp.message_handler(commands=['buy'])
async def buy(message: types.Message):
    if config.PAYMENTS_TOKEN.split(':')[1] == 'TEST':
        await bot.send_message(message.chat.id, "Тестовый платеж!!!")

    await bot.send_invoice(message.chat.id,
                           title="Подписка на бота",
                           description="Активация подписки на бота на 1 месяц",
                           provider_token=config.PAYMENTS_TOKEN,
                           currency="rub",
                           photo_url="https://www.aroged.com/wp-content/uploads/2022/12/Telegram-Premium-has-collected-a-million-subscribers-in-five-months.png",
                           photo_width=416,
                           photo_height=234,
                           photo_size=416,
                           is_flexible=False,
                           prices=[PRICE],
                           start_parameter="one-month-subscription",
                           payload="test-invoice-payload")

# pre checkout  (must be answered in 10 seconds)
@dp.pre_checkout_query_handler(lambda query: True)
async def pre_checkout_query(pre_checkout_q: types.PreCheckoutQuery):
    await bot.answer_pre_checkout_query(pre_checkout_q.id, ok=True)

# successful payment
@dp.message_handler(content_types=ContentType.SUCCESSFUL_PAYMENT)
async def successful_payment(message: types.Message):
    print("SUCCESSFUL PAYMENT:")
    payment_info = message.successful_payment.to_python()
    for k, v in payment_info.items():
        print(f"{k} = {v}")

    await bot.send_message(message.chat.id,
                           f"Платеж на сумму {message.successful_payment.total_amount // 100} {message.successful_payment.currency} прошел успешно!!!"
                           f"Скачать скрипт:.....(ссылка одноразовая, не пытайтесь ее кому то отпрвить)")

# run long-polling
if __name__ == "__main__":
    executor.start_polling(dp, skip_updates=False)