diff --git a/.env b/.env
new file mode 100644
index 0000000..241a887
--- /dev/null
+++ b/.env
@@ -0,0 +1,3 @@
+ADMIN_ID=776149633
+BOT_TOKEN=1491703059:AAEIkkEyx9bB2WxmGdYA2bcXf7eu7h1h_cA
+ip=localhost
\ No newline at end of file
diff --git a/.env.dist b/.env.dist
deleted file mode 100644
index f42c367..0000000
--- a/.env.dist
+++ /dev/null
@@ -1,3 +0,0 @@
-ADMIN_ID=12345678
-BOT_TOKEN=123452345243:Asdfasdfasf
-ip=localhost
\ No newline at end of file
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..ccd2b99
--- /dev/null
+++ b/README.md
@@ -0,0 +1,5 @@
+------------------------------
+
+Телеграм бот
+
+Помощ пользователям в получении кредита
diff --git a/app.py b/app.py
index 08f8cf4..4f54d85 100644
--- a/app.py
+++ b/app.py
@@ -1,3 +1,7 @@
+
+from loader import db
+#from utils.set_bot_commands import set_default_commands
+
async def on_startup(dp):
import filters
import middlewares
@@ -5,9 +9,16 @@ async def on_startup(dp):
middlewares.setup(dp)
from utils.notify_admins import on_startup_notify
- await on_startup_notify(dp)
+ try:
+ db.create_table_users()
+ except Exception as e:
+ print(e)
+ db.delete_users()
+ await on_startup_notify(dp)
+ #await set_default_commands(dp)
+
if __name__ == '__main__':
from aiogram import executor
from handlers import dp
diff --git a/data/main.db b/data/main.db
new file mode 100644
index 0000000..43a8575
Binary files /dev/null and b/data/main.db differ
diff --git a/handlers/users/__init__.py b/handlers/users/__init__.py
index 4f3c9f7..bef86a1 100644
--- a/handlers/users/__init__.py
+++ b/handlers/users/__init__.py
@@ -1,5 +1,6 @@
from .help import dp
from .start import dp
+from .body import dp
from .echo import dp
__all__ = ["dp"]
diff --git a/handlers/users/body.py b/handlers/users/body.py
new file mode 100644
index 0000000..fececbf
--- /dev/null
+++ b/handlers/users/body.py
@@ -0,0 +1,174 @@
+import logging
+
+
+
+import asyncio
+
+from aiogram.types import InputFile
+from aiogram.utils.callback_data import CallbackData
+from aiogram.dispatcher.filters import Command
+from aiogram.dispatcher import FSMContext
+from aiogram.types import Message, CallbackQuery
+from aiogram.types import ContentType, Message
+
+from photos import *
+from photos.credit_image import *
+from keyboards.inline.callback_buttom import *
+
+from loader import dp, bot
+
+
+
+
+@dp.message_handler(text='🛸Поделиться с другом')
+async def send_friends(message: Message):
+ await message.answer('Жми на "Поделиться ботом" 👇', reply_markup=send_bot)
+
+
+@dp.message_handler(text="🏪Подобрать банк")
+async def found_bank(message: Message):
+ photo = InputFile(path_or_bytesio="photos/loading1.jpg")
+ await bot.send_photo(chat_id=message.from_user.id, photo=photo, caption=(f"Приступаю к поиску "))
+
+ await asyncio.sleep(3)
+
+ photo1 = InputFile(path_or_bytesio="photos/loading2.jpg")
+ await bot.send_photo(chat_id=message.from_user.id, photo=photo1, caption=(f"Поиск успешно выполнен!\n"
+ f"Мне было очень сложно найти банки с хорошими условиями\n"
+ f"которые могут продолжать свою работу во время кризиса! \n"
+ f"Поэтому если тебе нужны деньги срочно\n"
+ f"советую тебе заполнить анкеты во всех банках"), reply_markup=show_search)
+
+@dp.message_handler(text='👑Популяриные предложения')
+async def popular_value(message: Message):
+ await message.answer("Выбери подходящее предложение👇🏻", reply_markup=popular_menu)
+
+
+# ВНИЗУ БУДЕ КРЕДИТНЕ МЕНЮ
+@dp.callback_query_handler(text="show_credit")
+async def firs_catalog(call: CallbackQuery):
+ photo2 = InputFile(path_or_bytesio="photos/credit_image/Miloan.jpg")
+ await call.message.reply_photo(photo=photo2, caption=("Miloan - При помощи нашего сервиса, каждый желающий\n"
+ "может получить кредит прямо на свою банковскую карту и \n"
+ "всего за 15 минут. Первый кредит бесплатно (под 0,01%). Сумма\n"
+ "первого займа – до 15000 гривен.\n"
+ "Подробнее👈\n\n"
+ "Условия:\n"
+ "• Сумма займа: Первый займ – до 15000 гривен\n"
+ "• Срок займа: до 30 дней\n"
+ "• Скидки на повторные кредиты\n\n"
+ "Требование к заёмщику:\n"
+ "• Возраст: от 18 до 65 лет\n"
+ "• Гражданство Украины\n"
+ "• Наличие действующей банковской карты любого украинского банка\n"
+ "• Отсутствие просрочек по кредитам"
+ ), reply_markup=first_klick)
+
+
+@dp.callback_query_handler(text="give_next")
+async def second_catalog(call: CallbackQuery):
+ photo3 = InputFile(path_or_bytesio="photos/credit_image/bistro_dengi.jpg")
+ await call.message.reply_photo(photo=photo3, caption=("ШвидкоГроші - лидер украинского рынка моментального\n"
+ "кредитования. Компания предоставляет моментальные \n"
+ "кредиты ОНЛАЙН и наличными до 5000 грн. без залога, справок и\n"
+ "поручителей.\n"
+ "Подробнее👈\n\n"
+ "Условия:\n"
+ "• Сумма займа: от 600 до 10 000 грн.\n"
+ "• Для повторных клиентов - до 20 000 грн. под 1%\n"
+ "• Сроки пользования кредитом можно продлевать, при оплате процентов за пользование\n\n"
+ "Требование к заёмщику:\n"
+ "• Возраст: от 18 до 60 лет\n"
+ "• Гражданство Украины\n"
+ "• Наличие у клиента постоянного трудового дохода (может работать неофициально)"
+ ), reply_markup=second_menu)
+
+
+@dp.callback_query_handler(text="next_variant")
+async def gotovka_catalog(call: CallbackQuery):
+ photo3 = InputFile(path_or_bytesio="photos/credit_image/credit1.jpg")
+ await call.message.reply_photo(photo=photo3, caption=("Ваша Готивочка - Главной составляющей системы \n"
+ "кредитования 'Ваша Готівочка' является удобство! \n"
+ "Мы предлагаем простые и понятные условия займа.\n"
+
+ "Подробнее👈\n\n"
+ "Условия:\n"
+ "• Сумма займа: от 200 до 9000 грн.\n"
+ "• Время рассмотрения заявки – 15 мин.\n"
+ "• Без справки о доходах\n\n"
+
+ "Преимущества.\n"
+ "не просим клиента ксерокопию документов или фото документов\n"
+ "не просим клиента фото с паспортом или банковской картой\n"
+ "не просим клиента указывать аккаунт в социальной сети\n"
+ "не просим у клиента справку о доходах\n"
+ "не просим клиента телефон родственника\n\n"
+
+ "Требование к заёмщику:\n"
+ "• Возраст: от 18 до 60 лет\n"
+ "• Гражданство Украины\n"
+ "• наличие банковской карты (для перечисления кредитных средств) и мобильного телефона"
+ ), reply_markup=there_menu)
+
+
+
+@dp.callback_query_handler(text="gotivochka3")
+async def credit_plus(call: CallbackQuery):
+ photo3 = InputFile(path_or_bytesio="photos/credit_image/credit2.jpg")
+ await call.message.reply_photo(photo=photo3, caption=("CreditPlus - Мы являемся обществом со 100% иностранным \n"
+ "капиталом. Благодаря этому ведем ответственный бизнес в\n"
+ "Украине, который включает набор обязательных целей и \n"
+ "гарантий для всех заинтересованных сторон.\n"
+ "Подробнее👈\n\n"
+ "Условия:\n"
+ "• Сумма займа: до 15 000 грн.\n"
+ "• Время рассмотрения заявки – до 7 минут\n"
+ "• Без справки о доходах\n\n"
+ "Требование к заёмщику:\n"
+ "• Возраст: от 18 до 55 лет\n"
+ "• Гражданство Украины\n"
+ "• наличие банковской карты (для перечисления кредитных средств) и мобильного телефона"
+ ), reply_markup=foo_menu)
+
+
+
+@dp.callback_query_handler(text="crediplus")
+async def evro_groshi(call: CallbackData):
+ photo4 = InputFile(path_or_bytesio="photos/credit_image/evrogroshi.jpg")
+ await call.message.reply_photo(photo=photo4, caption=(
+ 'Eurogroshi - При помощи нашего сервиса, каждый желающий \n'
+ 'может получить кредит прямо на свою банковскую карту и \n'
+ 'всего за 15 минут\n'
+ 'Подробнее👈\n\n'
+ 'Условия:\n'
+ '• Сумма первого займа: до 4500 грн.\n'
+ '• Срок займа: до 30 дней\n'
+ '• Скидки на повторные кредиты\n\n'
+ "Требование к заёмщику:\n"
+ '• Возраст: от 18 лет\n'
+ '• Гражданство Украины\n'
+ '• Наличие действующей банковской карты любого украинского банка\n'
+ '• Отсутствие просрочек по кредитам\n'
+ ), reply_markup=five_menu)
+
+@dp.callback_query_handler(text="evrogroshi")
+async def zecredit(call: CallbackData):
+ photo5 = InputFile(path_or_bytesio="photos/credit_image/zecreditor.jpg")
+ await call.message.reply_photo(photo=photo5, caption=(
+ 'Zecredit - это онлайн сервис благодаря которому наш клиент \n'
+ 'может получить кредит всего за считанные минуты на \n'
+ 'банковскую карту. Благодаря условиям конкуренции рынка т\n' 'Подробнее👈\n\n'
+ 'нашей компанией была выбрана стратегия программы \n'
+ 'лояльности для клиентов. Компания работает прозрачно, что \n'
+ 'формирует доверие у основного сегмента рынка.\n'
+ 'Подробнее👈\n\n'
+ 'Условия:\n'
+ '• Сумма первого займа: до 3000 грн.\n'
+ '• Срок займа: до 30 дней\n'
+ '• Cервис работает круглосуточно, акция 1% на первый кредит\n\n'
+ "Требование к заёмщику:\n"
+ '• Возраст: от 18 лет\n'
+ '• Гражданство Украины\n'
+ '• Наличие действующей банковской карты любого украинского банка\n'
+ '• Отсутствие просрочек по кредитам\n'
+ ), reply_markup=six_menu)
diff --git a/handlers/users/start.py b/handlers/users/start.py
index 54abb72..7dcba25 100644
--- a/handlers/users/start.py
+++ b/handlers/users/start.py
@@ -1,9 +1,75 @@
from aiogram import types
+from aiogram.types import ContentType, Message
+
+from photos import *
+from aiogram.types import InputFile
+from keyboards.default.text_button import start_button, menu
+
+from aiogram.dispatcher import FSMContext
+from aiogram.dispatcher.filters import Command, Text
from aiogram.dispatcher.filters.builtin import CommandStart
-from loader import dp
+from loader import dp, db, bot
+import sqlite3
+
@dp.message_handler(CommandStart())
async def bot_start(message: types.Message):
- await message.answer(f'Привет, {message.from_user.full_name}!')
+ name = message.from_user.full_name
+ try:
+ db.add_user(id=message.from_user.id, name=name)
+ except sqlite3.IntegrityError as err:
+ print(err)
+
+ photo = InputFile(path_or_bytesio="photos/photo1.jpg")
+ await bot.send_photo(chat_id=message.from_user.id,
+ photo=photo,
+ caption=(f'Привет, {message.from_user.full_name}!\n\n'
+ f'Я твой финансовый бот-помошник 😊\n'
+ f'Я могу помочь тебе получить деньги на самых выгодных условиях под 0%!\n'
+ f'Для этого мне нужно задать пару вопросов.\n\n'
+ f'Жми на кнопку «Запустить»👇'), reply_markup=start_button)
+
+
+@dp.message_handler(Command("data"))
+async def database(message: types.Message):
+ count_users = db.count_users()[0]
+ await message.answer(
+ "\n".join([
+ f'Привет, {message.from_user.full_name}!',
+ 'Ти есть в базе',
+ f'В базе {count_users} Пользователей',
+ ])
+ )
+
+
+@dp.message_handler(text="Запустить 🚀")
+async def user_old(message: types.Message, state:FSMContext):
+ await message.answer(f"Сколько вам лет ?\n"
+ f"Напиши свой возраст...")
+ await state.set_state("years")
+
+
+@dp.message_handler(state="years")
+async def enter_old(message: types.Message, state: FSMContext):
+ years = message.text
+ db.update_user_age(age=years, id=message.from_user.id)
+
+ photo = InputFile(path_or_bytesio='photos/photo2.jpg')
+ await bot.send_photo(chat_id=message.from_user.id,
+ photo=photo,
+ caption=(f'Благодарю тебя, {message.from_user.full_name}!\n'
+ f'Чтобы подобрать банк, который готов дать тебе деньги\n'
+ f'на самых лучших условиях\n'
+ f'воспользуйся кнопкой "🏪Подобрать банк"'
+ f'Тестови данние '), reply_markup=menu)
+
+ await state.finish()
+
+@dp.message_handler(text="📝Мои настройки")
+async def My_setting(message: Message):
+ user = db.select_user(id=message.from_user.id)
+ await message.answer(f"Страна: Україна\n"
+ f"Возраст: {user}")
+
diff --git a/handlers/users/update_db.py b/handlers/users/update_db.py
new file mode 100644
index 0000000..e69de29
diff --git a/keyboards/default/text_button.py b/keyboards/default/text_button.py
new file mode 100644
index 0000000..1e51866
--- /dev/null
+++ b/keyboards/default/text_button.py
@@ -0,0 +1,27 @@
+from aiogram.types import ReplyKeyboardMarkup, KeyboardButton
+
+start_button = ReplyKeyboardMarkup(
+ keyboard=[
+ [
+ KeyboardButton(text="Запустить 🚀")
+ ],
+ ],
+ resize_keyboard=True, one_time_keyboard=True
+)
+
+
+menu = ReplyKeyboardMarkup(
+ keyboard=[
+ [
+ KeyboardButton(text="🏪Подобрать банк"),
+ KeyboardButton(text="👑Популяриные предложения")
+ ],
+ [
+ KeyboardButton(text="📝Мои настройки")
+ ],
+ [
+ KeyboardButton(text="🛸Поделиться с другом")
+ ]
+ ],
+ resize_keyboard=True
+)
\ No newline at end of file
diff --git a/keyboards/inline/callback_buttom.py b/keyboards/inline/callback_buttom.py
new file mode 100644
index 0000000..e598fa6
--- /dev/null
+++ b/keyboards/inline/callback_buttom.py
@@ -0,0 +1,112 @@
+from aiogram.types import InlineKeyboardButton, InlineKeyboardMarkup
+from aiogram.utils.callback_data import CallbackData
+
+#Поделится с другом
+send_bot = InlineKeyboardMarkup(inline_keyboard=[
+ [
+ InlineKeyboardButton(text="Поделиться ботом👍🏼", switch_inline_query=f"\n"
+ f"https://t.me/money_zaim_bot\n"
+ f"Смотри какой крутой бот 😊")
+ ]
+])
+
+show_search = InlineKeyboardMarkup(inline_keyboard=[
+ [
+ InlineKeyboardButton(text="🔍Показать результат поиска ", callback_data="show_credit")
+ ]
+])
+
+popular_menu = InlineKeyboardMarkup(inline_keyboard=[
+ [
+ InlineKeyboardButton(text="Под 0%", callback_data="crediplus")
+ ],
+ [
+ InlineKeyboardButton(text="С плохой кредитной историей", callback_data="gotivochka3")
+ ],
+ [
+ InlineKeyboardButton(text="Лучшие займы", callback_data="next_variant")
+ ],
+ [
+ InlineKeyboardButton(text="Все варианты", callback_data="give_next")
+ ]
+])
+
+
+#______________________менюшка для кредитив____________---
+
+first_klick = InlineKeyboardMarkup(inline_keyboard=[
+ [
+ InlineKeyboardButton(text="Получить деньги", url="https://rozetka.com.ua/")
+ ],
+ [
+ InlineKeyboardButton(text="Еще варианты", callback_data="give_next")
+ ],
+
+])
+
+second_menu = InlineKeyboardMarkup(inline_keyboard=[
+ [
+ InlineKeyboardButton(text="Получить деньги", url="https://rozetka.com.ua/")
+ ],
+ [
+ InlineKeyboardButton(text="Назад", callback_data="show_credit"),
+ InlineKeyboardButton(text="Еще варианты", callback_data="next_variant")
+ ],
+
+])
+
+there_menu = InlineKeyboardMarkup(inline_keyboard=[
+ [
+ InlineKeyboardButton(text="Получить деньги", url="https://rozetka.com.ua/")
+ ],
+ [
+ InlineKeyboardButton(text="Назад", callback_data="give_next"),
+ InlineKeyboardButton(text="Еще варианты", callback_data="gotivochka3")
+ ],
+
+])
+
+foo_menu = InlineKeyboardMarkup(inline_keyboard=[
+ [
+ InlineKeyboardButton(text="Получить деньги", url="https://rozetka.com.ua/")
+ ],
+ [
+ InlineKeyboardButton(text="Назад", callback_data="next_variant"),
+ InlineKeyboardButton(text="Еще варианты", callback_data="crediplus")
+ ],
+
+])
+
+five_menu = InlineKeyboardMarkup(inline_keyboard=[
+ [
+ InlineKeyboardButton(text="Получить деньги", url="https://rozetka.com.ua/")
+ ],
+ [
+ InlineKeyboardButton(text="Назад", callback_data="gotivochka3"),
+ InlineKeyboardButton(text="Еще варианты", callback_data="evrogroshi")
+ ],
+
+])
+
+six_menu = InlineKeyboardMarkup(inline_keyboard=[
+ [
+ InlineKeyboardButton(text="Получить деньги", url="https://rozetka.com.ua/")
+ ],
+ [
+ InlineKeyboardButton(text="Назад", callback_data="crediplus"),
+ InlineKeyboardButton(text="Еще варианты", callback_data="zeccredit")
+ ],
+
+])
+
+seven_menu = InlineKeyboardMarkup(inline_keyboard=[
+ [
+ InlineKeyboardButton(text="Получить деньги", url="https://rozetka.com.ua/")
+ ],
+ [
+ InlineKeyboardButton(text="Назад", callback_data="crediplus"),
+ InlineKeyboardButton(text="Еще варианты", callback_data="done")
+ ],
+
+])
+
diff --git a/loader.py b/loader.py
index ba42d33..6d7c720 100644
--- a/loader.py
+++ b/loader.py
@@ -1,8 +1,11 @@
from aiogram import Bot, Dispatcher, types
from aiogram.contrib.fsm_storage.memory import MemoryStorage
+
from data import config
+from utils.db_api.sqlite import Database
bot = Bot(token=config.BOT_TOKEN, parse_mode=types.ParseMode.HTML)
storage = MemoryStorage()
dp = Dispatcher(bot, storage=storage)
+db = Database(path_to_db="data/main.db")
diff --git a/photos/credit_image/Miloan.jpg b/photos/credit_image/Miloan.jpg
new file mode 100644
index 0000000..85b86d0
Binary files /dev/null and b/photos/credit_image/Miloan.jpg differ
diff --git a/photos/credit_image/bistro_dengi.jpg b/photos/credit_image/bistro_dengi.jpg
new file mode 100644
index 0000000..9ee1340
Binary files /dev/null and b/photos/credit_image/bistro_dengi.jpg differ
diff --git a/photos/credit_image/credit1.jpg b/photos/credit_image/credit1.jpg
new file mode 100644
index 0000000..f08b32b
Binary files /dev/null and b/photos/credit_image/credit1.jpg differ
diff --git a/photos/credit_image/credit2.jpg b/photos/credit_image/credit2.jpg
new file mode 100644
index 0000000..b91a4ad
Binary files /dev/null and b/photos/credit_image/credit2.jpg differ
diff --git a/photos/credit_image/evrogroshi.jpg b/photos/credit_image/evrogroshi.jpg
new file mode 100644
index 0000000..0ce2f45
Binary files /dev/null and b/photos/credit_image/evrogroshi.jpg differ
diff --git a/photos/credit_image/zecreditor.jpg b/photos/credit_image/zecreditor.jpg
new file mode 100644
index 0000000..155547a
Binary files /dev/null and b/photos/credit_image/zecreditor.jpg differ
diff --git a/photos/loading1.jpg b/photos/loading1.jpg
new file mode 100644
index 0000000..6acda42
Binary files /dev/null and b/photos/loading1.jpg differ
diff --git a/photos/loading2.jpg b/photos/loading2.jpg
new file mode 100644
index 0000000..9f83a91
Binary files /dev/null and b/photos/loading2.jpg differ
diff --git a/photos/photo1.jpg b/photos/photo1.jpg
new file mode 100644
index 0000000..b731e3f
Binary files /dev/null and b/photos/photo1.jpg differ
diff --git a/photos/photo2.jpg b/photos/photo2.jpg
new file mode 100644
index 0000000..92b7083
Binary files /dev/null and b/photos/photo2.jpg differ
diff --git a/utils/db_api/sqlite.py b/utils/db_api/sqlite.py
new file mode 100644
index 0000000..264fb13
--- /dev/null
+++ b/utils/db_api/sqlite.py
@@ -0,0 +1,99 @@
+import sqlite3
+
+
+class Database:
+ def __init__(self, path_to_db="main.db"):
+ self.path_to_db = path_to_db
+
+ @property
+ def connection(self):
+ return sqlite3.connect(self.path_to_db)
+
+ def execute(self, sql: str, parameters: tuple = None, fetchone=False, fetchall=False, commit=False):
+ if not parameters:
+ parameters = ()
+ connection = self.connection
+ connection.set_trace_callback(logger)
+ cursor = connection.cursor()
+ data = None
+ cursor.execute(sql, parameters)
+
+ if commit:
+ connection.commit()
+ if fetchall:
+ data = cursor.fetchall()
+ if fetchone:
+ data = cursor.fetchone()
+ connection.close()
+ return data
+
+ def create_table_users(self):
+ sql = """
+ CREATE TABLE Users (
+ id int NOT NULL,
+ Name varchar(255) NOT NULL,
+ email varchar(255),
+ age varchar(50),
+ PRIMARY KEY (id)
+ );
+"""
+ self.execute(sql, commit=True)
+
+ @staticmethod
+ def format_args(sql, parameters: dict):
+ sql += " AND ".join([
+ f"{item} = ?" for item in parameters
+ ])
+ return sql, tuple(parameters.values())
+
+ def add_user(self, id: int, name: str, email: str = None, age: str = None):
+ # SQL_EXAMPLE = "INSERT INTO Users(id, Name, email) VALUES(1, 'John', 'John@gmail.com')"
+
+ sql = """
+ INSERT INTO Users(id, Name, email, age) VALUES(?, ?, ?, ?)
+ """
+ self.execute(sql, parameters=(id, name, email, age), commit=True)
+
+ def select_all_users(self):
+ sql = """
+ SELECT * FROM Users
+ """
+ return self.execute(sql, fetchall=True)
+
+ def select_user(self, **kwargs):
+ # SQL_EXAMPLE = "SELECT * FROM Users where id=1 AND Name='John'"
+ sql = "SELECT * FROM Users WHERE "
+ sql, parameters = self.format_args(sql, kwargs)
+
+ return self.execute(sql, parameters=parameters, fetchone=True)
+
+
+ def count_users(self):
+ return self.execute("SELECT COUNT(*) FROM Users;", fetchone=True)
+
+ def update_user_email(self, email, id):
+ # SQL_EXAMPLE = "UPDATE Users SET email=mail@gmail.com WHERE id=12345"
+
+ sql = f"""
+ UPDATE Users SET email=? WHERE id=?
+ """
+ return self.execute(sql, parameters=(email, id), commit=True)
+
+ def update_user_age(self, age, id):
+ sql = f"""
+ UPDATE Users SET age=? WHERE id=?
+ """
+ return self.execute(sql, parameters=(age, id), commit=True)
+
+
+ def delete_users(self):
+ self.execute("DELETE FROM Users WHERE TRUE", commit=True)
+
+
+def logger(statement):
+ print(f"""
+_____________________________________________________
+Executing:
+{statement}
+_____________________________________________________
+""")
diff --git a/utils/db_api/test.py b/utils/db_api/test.py
new file mode 100644
index 0000000..2572b7b
--- /dev/null
+++ b/utils/db_api/test.py
@@ -0,0 +1,6 @@
+from utils.db_api.sqlite import Database
+
+db = Database()
+
+def test():
+
\ No newline at end of file