initial commit v2 !!
This commit is contained in:
parent
e9decc0ee7
commit
6212d92fc9
3
.gitignore
vendored
3
.gitignore
vendored
@ -1,2 +1,5 @@
|
||||
config.json
|
||||
tasks.json
|
||||
db.json
|
||||
env
|
||||
__pycache__
|
||||
|
13
requirements.txt
Normal file
13
requirements.txt
Normal file
@ -0,0 +1,13 @@
|
||||
APScheduler==3.6.3
|
||||
certifi==2020.12.5
|
||||
cffi==1.14.4
|
||||
cryptography==3.3.1
|
||||
fuzzywuzzy==0.18.0
|
||||
pycparser==2.20
|
||||
pydo.txt==1.1
|
||||
python-Levenshtein==0.12.2
|
||||
python-telegram-bot==13.2
|
||||
pytz==2021.1
|
||||
six==1.15.0
|
||||
tornado==6.1
|
||||
tzlocal==2.1
|
68
src/bot.py
Normal file
68
src/bot.py
Normal file
@ -0,0 +1,68 @@
|
||||
from telegram.ext import Updater
|
||||
from telegram.ext import CommandHandler
|
||||
from telegram.ext import MessageHandler, Filters
|
||||
|
||||
import logging
|
||||
import db
|
||||
import pydo
|
||||
from fuzzywuzzy import process as fuzzyprocess
|
||||
from fuzzywuzzy import utils as fuzzyutils
|
||||
|
||||
|
||||
logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
|
||||
level=logging.INFO)
|
||||
|
||||
|
||||
updater = Updater(token='671191771:AAFx_sGQGoHvjgwCBDROPsj3_VudgfFm2qg', use_context=True)
|
||||
dispatcher = updater.dispatcher
|
||||
|
||||
def start(update, context):
|
||||
context.bot.send_message(chat_id=update.effective_chat.id,
|
||||
text="hiiiiiiiiii. what do you need to get done today?")
|
||||
|
||||
dispatcher.add_handler(CommandHandler('start', start))
|
||||
|
||||
def ls(update, context):
|
||||
tasks = db.get_all_user_tasks(update.effective_user)
|
||||
r = ""
|
||||
for task in tasks:
|
||||
if task.done is ('done' in update.message['text']) or ('all' in update.message['text']):
|
||||
r+= f"{task.id} {str(task)}"
|
||||
r+= '\n'
|
||||
|
||||
r = r if r != "" else "no tasks!"
|
||||
context.bot.send_message(chat_id=update.effective_chat.id,
|
||||
text=r)
|
||||
|
||||
dispatcher.add_handler(CommandHandler('ls', ls))
|
||||
|
||||
def do(update, context):
|
||||
for arg in context.args:
|
||||
if not arg.isnumeric():
|
||||
task_ids = [fuzzy_get_task_id(update.effective_user, ' '.join(context.args))]
|
||||
break
|
||||
else:
|
||||
task_ids = [int(x) for x in context.args]
|
||||
|
||||
for task_id in task_ids:
|
||||
task = db.get_task(update.effective_user, task_id)
|
||||
task.do()
|
||||
db.update_task(update.effective_user, task)
|
||||
|
||||
context.bot.send_message(chat_id=update.effective_chat.id, text=str(task_ids))
|
||||
|
||||
def fuzzy_get_task_id(user, text):
|
||||
task_strs = [str(task) for task in db.get_all_user_tasks(user)]
|
||||
return task_strs.index(fuzzyprocess.extractOne(text, task_strs)[0])
|
||||
|
||||
dispatcher.add_handler(CommandHandler('do', do))
|
||||
|
||||
|
||||
def new_task(update, context):
|
||||
db.add_task(update.effective_user, pydo.Task(update.message.text))
|
||||
context.bot.send_message(chat_id=update.effective_chat.id,
|
||||
text=f"Created task: {update.message.text}")
|
||||
|
||||
dispatcher.add_handler(MessageHandler(Filters.text & (~Filters.command), new_task))
|
||||
|
||||
updater.start_polling()
|
85
src/db.py
Normal file
85
src/db.py
Normal file
@ -0,0 +1,85 @@
|
||||
|
||||
# this is a temporary db to get things working
|
||||
|
||||
import json
|
||||
import pydo
|
||||
import telegram
|
||||
|
||||
DB_FILE="./db.json"
|
||||
|
||||
class DbKeys:
|
||||
USER_TASKS = 'user_tasks'
|
||||
|
||||
def _create_db():
|
||||
db = {
|
||||
DbKeys.USER_TASKS : {}
|
||||
}
|
||||
with open(DB_FILE, "w+") as file:
|
||||
json.dump(db, file)
|
||||
|
||||
def _get_db():
|
||||
with open(DB_FILE) as file:
|
||||
return json.load(file)
|
||||
|
||||
def _set_db(db):
|
||||
with open(DB_FILE, "w") as file:
|
||||
json.dump(db, file)
|
||||
|
||||
def get_all_user_tasks(user) -> "list of pydo.Task":
|
||||
db = _get_db()
|
||||
task_list = db[DbKeys.USER_TASKS][str(user.id)]
|
||||
r = []
|
||||
|
||||
for id, task_str in enumerate(task_list):
|
||||
task = pydo.Task(task_str)
|
||||
task.id = id
|
||||
r.append(task)
|
||||
|
||||
return r
|
||||
|
||||
def export_user_tasks(user: telegram.User) -> str:
|
||||
db = _get_db()
|
||||
print(db)
|
||||
return '\n'.join(db[DbKeys.USER_TASKS][str(user.id)])
|
||||
|
||||
def get_task(user: telegram.User, task_id: int) -> pydo.Task:
|
||||
for task in get_all_user_tasks(user):
|
||||
if int(task.id) == int(task_id):
|
||||
return task
|
||||
|
||||
def create_user(db, user: telegram.User):
|
||||
if str(user.id) not in db[DbKeys.USER_TASKS].keys():
|
||||
db[DbKeys.USER_TASKS][str(user.id)] = []
|
||||
|
||||
return db
|
||||
|
||||
|
||||
def add_task(user: telegram.User, task: pydo.Task) -> pydo.Task:
|
||||
db = _get_db()
|
||||
db = create_user(db, user)
|
||||
|
||||
db[DbKeys.USER_TASKS][str(user.id)].append(str(task))
|
||||
_set_db(db)
|
||||
return task
|
||||
|
||||
def update_task(user: telegram.User, new_task: pydo.Task) -> pydo.Task:
|
||||
db = _get_db()
|
||||
db[DbKeys.USER_TASKS][str(user.id)][new_task.id] = str(new_task)
|
||||
_set_db(db)
|
||||
return new_task
|
||||
|
||||
def remove_task(user: telegram.User, task_id: int) -> int:
|
||||
db = _get_db()
|
||||
# instead of removing an item, set it's text value to nothing, so that all other tasks' ids
|
||||
# don't change
|
||||
db[DbKeys.USER_TASKS][str(user.id)][str(task_id)] = ""
|
||||
_set_db(db)
|
||||
|
||||
def remove_task(user: telegram.User, task: pydo.Task) -> pydo.Task:
|
||||
remove_task(user.id, task.id)
|
||||
return task
|
||||
|
||||
try:
|
||||
_get_db()
|
||||
except:
|
||||
_create_db()
|
Reference in New Issue
Block a user