/
Artist
/
fin_bot
Обзор
Документация
Войти
/
Artist
/
fin_bot
Код
Запросы
0
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
server.py
117 строк
4 KB
Artist
First commit
01 мар 2024, 15:48
01 мар 2024, 15:48
ba257b9
Код
Авторство
О чём код?
"""Сервер телеграм бота""" import logging import os import aiohttp from aiogram import Bot, Dispatcher, executor, types import exceptions import expenses from categories import Categories from middlewares import AccessMiddleware # Configure logging logging.basicConfig(level=logging.INFO) # Initialize bt and dispatcher ACCESS_ID = os.getenv("TELEGRAM_ACCESS_ID") API_TOKEN = os.getenv("TELEGRAM_API_TOKEN") if not API_TOKEN: exit("Error: no token provided") bot = Bot(token=API_TOKEN) dp = Dispatcher(bot) dp.middleware.setup(AccessMiddleware(ACCESS_ID)) @dp.message_handler(commands=['start','help']) async def send_welcome(message: types.Message): await message.answer( "Бот для учета финансов\n\n" "Добавить расход : 100 такси\n" "Статистика за день: /today\n" "Статистика за месяц: /month\n" "Последние внесенные расходы: /expenses\n" "Категории расходов: /categories\n" "Баланс: /balance" ) @dp.message_handler(lambda message: message.text.startswith('/del')) async def del_expense(message: types.Message): """Удаляет одну запись о расходе по её идентификатору""" row_id = int(message.text[4:]) expenses.delete_expense(row_id) answer_message = "Удалил" await message.answer(answer_message) @dp.message_handler(commands=['categories']) async def categories_list(message: types.Message): """Отправляет список категорий расходов""" categories = Categories().get_all_categories() answer_message = "Категории трат:\n\n* " +\ ("\n* ".join([c.name+' ('+", ".join(c.aliases)+')' for c in categories])) await message.answer(answer_message) @dp.message_handler(commands=['today']) async def today_statistics(message: types.Message): """Отправляет сегодняшнюю статистику трат""" answer_message = expenses.get_today_statistics() await message.answer(answer_message) @dp.message_handler(commands=['month']) async def month_statistics(message: types.Message): """Отправляет статистику трат текущего месяца""" answer_message = expenses.get_month_statistics() await message.answer(answer_message) @dp.message_handler(commands=['expenses']) async def list_expenses(message: types.Message): """Отправляет последние несколько записей о расходах""" last_expenses = expenses.last() if not last_expenses: await message.answer("Расходы ещё не заведены") return last_expenses_rows = [ f"{expense.amount} руб. на {expense.category_name} — нажми " f"/del{expense.id} для удаления" for expense in last_expenses] answer_message = "Последние сохранённые траты:\n\n* " + "\n\n* "\ .join(last_expenses_rows) await message.answer(answer_message) @dp.message_handler(commands=['balance']) async def get_balance(message: types.Message): """Выводит текущий баланс""" balance_now = expenses.get_balance() answer_message = (f"Текущий баланс: {balance_now[0].get('balance')} руб.") await message.answer(answer_message) @dp.message_handler() async def add_expense(message: types.Message): """Добавляет новый расход""" try: expense = expenses.add_expense(message.text) except exceptions.NotCorrectMessage as e: await message.answer(str(e)) return if expense.category_name == '+': answer_message = ( f"Изменен баланс на: {expense.amount} руб.") else: answer_message = ( f"Добавлены траты {expense.amount} руб на {expense.category_name}.\n\n" f"{expenses.get_today_statistics()}") await message.answer(answer_message) if __name__ == '__main__': executor.start_polling(dp, skip_updates=True)