112 lines
3.6 KiB
Python
112 lines
3.6 KiB
Python
|
import telebot
|
||
|
import dataset
|
||
|
import re
|
||
|
|
||
|
bot = telebot.TeleBot("5706001568:AAEldOutDkegAnc3rrIB0nuswTD6xBRy8nk")
|
||
|
db = dataset.connect('sqlite:///mydatabase.db')
|
||
|
budgets_bucket = db.create_table('budgets')
|
||
|
# budgets_bucket = db['budgets']
|
||
|
|
||
|
def extract_args(arg):
|
||
|
if len(arg.split()) == 1: return list()
|
||
|
else: return arg.split()[1:]
|
||
|
|
||
|
@bot.message_handler(commands=['start', 'help'])
|
||
|
def send_welcome(message):
|
||
|
bot.reply_to(message, "Howdy, how are you doing?")
|
||
|
|
||
|
@bot.message_handler(commands=['create'])
|
||
|
def create_budget(message):
|
||
|
args = extract_args(message.text)
|
||
|
if len(args) == 0:
|
||
|
bot.send_message(message.chat.id, "No arguments provided")
|
||
|
return
|
||
|
if budgets_bucket.find_one(user=message.from_user.id, budget_name=' '.join(args)) is not None:
|
||
|
bot.send_message(message.chat.id, "Budget with this name already exists")
|
||
|
return
|
||
|
budgets_bucket.insert(
|
||
|
{
|
||
|
'user': message.from_user.id,
|
||
|
'budget_name': ' '.join(args),
|
||
|
'budget_sum': 0
|
||
|
}
|
||
|
)
|
||
|
bot.reply_to(message, "Budget has been successfully created!")
|
||
|
|
||
|
@bot.message_handler(commands=['list'])
|
||
|
def list_budgets(message):
|
||
|
user_budgets_iter = budgets_bucket.find(user=message.from_user.id, order_by='budget_name')
|
||
|
user_budgets = list(user_budgets_iter)
|
||
|
if len(user_budgets) == 0:
|
||
|
bot.send_message(message.chat.id, "No budgets there")
|
||
|
return
|
||
|
list_budgets_str = "<b>List of your budgets</b>: \n"
|
||
|
for i in range(len(user_budgets)):
|
||
|
list_budgets_str += f"• [{str(i+1)}] {user_budgets[i]['budget_name']}: {user_budgets[i]['budget_sum']}\n"
|
||
|
bot.send_message(message.chat.id, list_budgets_str, parse_mode='HTML')
|
||
|
|
||
|
@bot.message_handler(commands=['remove'])
|
||
|
def remove_budget(message):
|
||
|
args = extract_args(message.text)
|
||
|
if len(args) == 0:
|
||
|
bot.send_message(message.chat.id, "No arguments provided")
|
||
|
return
|
||
|
budget_id = int(args[0])
|
||
|
b = find_budget(message.from_user.id, budget_id)
|
||
|
if b is None:
|
||
|
bot.send_message(message.chat.id, "Such budget doesn't exist")
|
||
|
return
|
||
|
budgets_bucket.delete(id=b['id'])
|
||
|
bot.reply_to(message, "Budget has been successfully removed!")
|
||
|
|
||
|
@bot.message_handler(regexp=r'^[+-][0-9]+(,\s?\w+\s?[\s|\w]*)*')
|
||
|
def simple_message_handler(message):
|
||
|
m = re.findall(r'[+-]|\d+|\w+', message.text)
|
||
|
op = m[0]
|
||
|
amount = int(m[1])
|
||
|
budget_name = 'default'
|
||
|
if len(m) > 2:
|
||
|
budget_name = str(' '.join(m[2:]))
|
||
|
if budget_name == 'default':
|
||
|
budgets_bucket.insert_ignore(
|
||
|
{
|
||
|
'user': message.from_user.id,
|
||
|
'budget_name': budget_name,
|
||
|
'budget_sum': 0
|
||
|
}, ['budget_name']
|
||
|
)
|
||
|
b = budgets_bucket.find_one(user=message.from_user.id, budget_name=budget_name)
|
||
|
if b is None:
|
||
|
bot.send_message(message.chat.id, "no fucking way")
|
||
|
return
|
||
|
new_sum = 0
|
||
|
if op == '-':
|
||
|
new_sum = b['budget_sum']-amount
|
||
|
elif op == '+':
|
||
|
new_sum = b['budget_sum']+amount
|
||
|
budgets_bucket.update({'id':b['id'], 'budget_sum':new_sum}, ['id'])
|
||
|
bot.send_message(message.chat.id, f'Budget sum has been updated! New sum is {new_sum}.')
|
||
|
|
||
|
def find_budget(user_id: int, budget_id: int):
|
||
|
budgets = list(budgets_bucket.find(user=user_id, order_by='budget_name'))
|
||
|
if len(budgets) == 0 or (budget_id-1 > len(budgets)-1):
|
||
|
return None
|
||
|
return budgets[budget_id-1]
|
||
|
|
||
|
@bot.message_handler(commands=['info'])
|
||
|
def budget_info(message):
|
||
|
args = extract_args(message.text)
|
||
|
if len(args) == 0:
|
||
|
bot.send_message(message.chat.id, "No arguments provided")
|
||
|
return
|
||
|
budget_id = int(args[0])
|
||
|
b = find_budget(message.from_user.id, budget_id)
|
||
|
if b is None:
|
||
|
bot.send_message(message.chat.id, "Such budget doesn't exist")
|
||
|
return
|
||
|
bot.send_message(message.chat.id, f"<b>Budget name</b>: {b['budget_name']}\n<b>Current sum</b>: {b['budget_sum']}", parse_mode='HTML')
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
bot.infinity_polling()
|