Пример #1
0
def init_db(user):
    """Инициализирует БД"""
    global conn
    global cursor
    conn = sqlite3.connect(f"db/{user}.db")
    cursor = conn.cursor()
    lets_logging("info", f"База данных {user} инициализирована")
Пример #2
0
def new_table(name):
    """Создание нового кошелька(таблицы)"""
    cursor.execute(f"""CREATE TABLE {name}(
    amount FLOAT ,
    type TEXT ,
    comment TEXT ,
    date TEXT)""")
    lets_logging("info", f"Создана новая таблица - {name}")
    conn.commit()
Пример #3
0
async def wallet_list(message: types.Message):
    """Отображает список всех кошельков у данного пользователя"""
    try:
        loggings.lets_logging('info', 'Вызвана команда "список кошелько"')
        all_wallets = '\n'.join(db.wallet_list())
        if not all_wallets:
            raise exceptions.EmptyWalletList
        await message.answer(f"Список всех кошельков:\n\n{all_wallets}")
    except Exception as e:
        loggings.lets_logging('warning', f'Ошибка:{e}"')
        await message.answer(f"{str(e)}")
Пример #4
0
async def all_balances(message: types.Message):
    """Показывает общий баланс и баланс каждого кошелька отдельно"""
    try:
        loggings.lets_logging('info', 'Вызвана команда "общий баланс"')
        result = wallets.all_balances()
        if result == exceptions.EmptyWalletList:
            raise result
        balance, result = result[1], result[0]
        await message.answer('\n\n'.join(result),
                             parse_mode=types.ParseMode.HTML)
        await message.answer(
            f'Общий баланс по всем кошелькам: <b>{str(round(balance))}р</b>',
            parse_mode=types.ParseMode.HTML)
    except Exception as e:
        loggings.lets_logging('warning', f'Ошибка:{str(e)}"')
        await message.answer(f"{str(e)}")
Пример #5
0
async def del_wallet(message: types.Message):
    """Удаляет кошелек из базы данных"""
    try:
        loggings.lets_logging('info', 'Вызвана команда "удалить кошелек"')
        text = message.text.split()
        if len(text) != 3:
            raise exceptions.IncorrectCommand
        wallet_name = text[2]
        wallet = wallets.delete_wallet(wallet_name)
        if ('no such table' in str(wallet)) or ('syntax error' in str(wallet)):
            raise exceptions.WalletNotFound
        else:
            await message.answer(f'Кошелек "<b>{wallet_name}</b>" удален',
                                 parse_mode=types.ParseMode.HTML)
    except Exception as e:
        loggings.lets_logging('warning', f'Ошибка:{e}"')
        await message.answer(f"{str(e)}")
Пример #6
0
async def add_wallet(message: types.Message):
    """Добавляет кошелек в базу данных"""
    try:
        loggings.lets_logging('info', 'Вызвана команда "добавить кошелек"')
        text = message.text.split()
        wallet_name = text[2]
        if wallet_name in illegal_wallet_names:
            raise exceptions.NotCorrectWalletName
        wallet = wallets.add_wallet(wallet_name)
        if wallet is None:
            raise exceptions.WalletNameAlreadyUsed
        else:
            await message.answer(
                f'Кошелек "<b>{wallet.name}</b>" создан в {db.deparse_date(str(wallet.date))}',
                parse_mode=types.ParseMode.HTML)
    except Exception as e:
        loggings.lets_logging('warning', f'Ошибка:{e}"')
        await message.answer(f"{str(e)}")
Пример #7
0
async def show_expenses_year(message: types.Message):
    """Показывает все изменения кошелька/всех кошельков за год"""
    try:
        loggings.lets_logging('info',
                              'Вызвана команда "показать изменения за год"')
        text = message.text.split()
        if len(text) != 6:
            raise exceptions.IncorrectCommand
        wallet_name = text[5]
        result = db.get_expenses_year(wallet_name)
        if 'no such table' in str(result):
            raise exceptions.WalletNotFound
        if result:
            await message.answer('\n\n'.join(result),
                                 parse_mode=types.ParseMode.HTML)
        else:
            raise exceptions.EmptyExpenses
    except Exception as e:
        loggings.lets_logging('warning', f'Ошибка:{e}"')
        await message.answer(f"{str(e)}")
Пример #8
0
async def login(message: types.Message):
    """Авторизация пользователя"""
    try:
        global Log
        text = message.text.split()
        if len(text) != 3:
            raise exceptions.IncorrectCommand
        email = text[1]
        password = text[2]
        checked = authorization.check_user(password, email)
        if checked:
            Log = True
            db.init_db(email)
            await message.answer('Успешно')
            loggings.lets_logging('info', f'Пользователь {email} - вошел')
            await send_help(message)
        else:
            await message.answer('Некорректные данные')
    except Exception as e:
        loggings.lets_logging('warning', f'Ошибка:{e}"')
        await message.answer(f"{str(e)}")
Пример #9
0
async def register(message: types.Message):
    """Регистрация пользователя"""
    try:
        global Log
        text = message.text.split()
        if len(text) != 3:
            raise exceptions.IncorrectCommand
        email = text[1]
        password = text[2]
        checked = authorization.add_user(password, email)
        if checked:
            await message.answer(
                "Пользователь с таким Email уже зарегистрирован")
        else:
            Log = True
            db.init_db(email)
            await message.answer('Успешно')
            loggings.lets_logging('info', f'Пользователь {email} - вошел')
            await send_help(message)
    except Exception as e:
        loggings.lets_logging('warning', f'Ошибка:{e}"')
        await message.answer(f"{str(e)}")
Пример #10
0
async def add_expense(message: types.Message):
    """Добавляет доход/расход в базу данных"""
    try:
        loggings.lets_logging('info',
                              'Вызвана команда "добавить доход/расход"')
        text = message.text.split()
        if len(text) < 6:
            raise exceptions.IncorrectCommand
        wallet_name = text[2]
        exp_type = text[3]
        amount = text[4]
        comment = ' '.join(text[5:])
        expensive = expenses.add_expense(wallet_name, exp_type.lower(), amount,
                                         comment)
        if expensive == exceptions.WalletNotFound:
            raise exceptions.WalletNotFound
        await message.answer(
            f'В "<b>{expensive.wallet}</b>" добавлен {expensive.type} {expensive.amount}',
            parse_mode=types.ParseMode.HTML)
    except Exception as e:
        loggings.lets_logging('warning', f'Ошибка:{e}"')
        await message.answer(f"{str(e)}")
Пример #11
0
import loggings
from aiogram import Bot, Dispatcher, executor, types

import authorization
import exceptions
import wallets
import db
import expenses

loggings.lets_logging("info", "\n\nЗапуск")
API_TOKEN = "1592423126:AAHQvZ1hQbHrKu3mwprW8uWEmWefRr9bB-A"

if API_TOKEN == "1592423126:AAHQvZ1hQbHrKu3mwprW8uWEmWefRr9bB-A":
    print("http://t.me/ODFinancebbBot")

bot = Bot(token=API_TOKEN)
dp = Dispatcher(bot)

Log = False

illegal_wallet_names = "'/^(?![_.])(?!.*[-_.]{2})+(?<![-_.])$/" + '"' + 'всех все общий баланс'


# Декораторы для проверки авторизации пользователя
def is_login(func):
    async def wrapper(message: types.Message):
        if Log is False:
            await start(message)
        else:
            await func(message)