Задать вопрос
@ArtyomMedved

Почему Из базы данных импорта базы данных ImportError: невозможно импортировать имя «Database» из «db»?

Не знаю, что я сделал не так, но выдает ошибку, я использую версию Sonoma для MacBook, надеюсь на вашу помощь)
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)


Вывод:From db import Database ImportError: cannot import name 'Database' from 'db' .
  • Вопрос задан
  • 110 просмотров
Подписаться 1 Простой 11 комментариев
Пригласить эксперта
Ваш ответ на вопрос

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

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