diff --git a/bot.py b/bot.py
index 2c68afe..fe45714 100644
--- a/bot.py
+++ b/bot.py
@@ -4,7 +4,8 @@ import logging
import telegram
import sqlite3
import questable
-from telegram.ext import Updater, CommandHandler, MessageHandler, Filters
+from telegram.ext import Updater, CommandHandler, MessageHandler, Filters, \
+ RegexHandler
try:
import config
@@ -153,9 +154,10 @@ def send_status(bot, update, player):
completed_side_quests = len(player.get_side_quests(1))
text = (f'{name}\n\n'
- f'🔥XP: {points}\n'
- f'⭐️Quests: {completed_quests}/{total_quests}\n'
- f'💠Side Quests: {completed_side_quests}/{total_side_quests}\n')
+ f'🔥 XP: {points}\n'
+ f'⭐️ Quests: {completed_quests}/{total_quests}\n'
+ f'💠 Side Quests: {completed_side_quests}/'
+ f'{total_side_quests}\n')
chat_id = update.message.chat_id
custom_keyboard = [
['Add Quest', 'Add Side Quest'],
@@ -193,6 +195,41 @@ def list_quests(bot, update, player, type):
bot.send_message(chat_id=chat_id, text=text, parse_mode="HTML")
+def quest(bot, update, player, qid, type):
+ if type == "quest":
+ x = questable.get_quest(player.DB, player.CHAT_ID, qid)
+ elif type == "side_quest":
+ x = questable.get_side_quest(player.DB, player.CHAT_ID, qid)
+ else:
+ raise ValueError('Not quest or side_quest')
+
+ text = ("🗺 " + {"quest": "Quest", "side_quest": "Side Quest"}[type]
+ + f": {x.name}"
+ "\n📌 Priority: " + ["Low", "Medium", "High"][x.imp-1]
+ + "\n📘 Difficulty: " + ["Low", "Medium", "High"][x.diff-1])
+
+ state = {"quest": "eq", "side_quest": "esq"}[type]
+ player.set_state(state, qid)
+ custom_keyboard = [
+ ["Mark as done"],
+ ["Edit Name", "Change Priority", "Change Difficulty"],
+ ["Back"]]
+ reply_markup = telegram.ReplyKeyboardMarkup(custom_keyboard)
+ chat_id = update.message.chat_id
+ bot.send_message(chat_id=chat_id, text=text, parse_mode="HTML",
+ reply_markup=reply_markup)
+
+
+def quest_handling(bot, update, db):
+ text = update.message.text.lower().split("_")
+ chat_id = update.message.chat_id
+ player = questable.player(db, chat_id)
+ if text[0] == "/q":
+ quest(bot, update, player, text[1], "quest")
+ elif text[0] == "/sq":
+ quest(bot, update, player, text[1], "side_quest")
+
+
def message_handling(bot, update, db):
text = update.message.text.lower()
player = questable.player(db, update.message.chat_id)
@@ -205,6 +242,7 @@ def message_handling(bot, update, db):
# requested
# qi / sqi: (Side) Quest importance: User has entered difficulty,
# importance requested
+ # eq / qsq: Edit Quest / Side Quest. the user press /Q_\d+ or /SQ_\d+
if state["state"] == "none":
if text == "add quest":
@@ -263,4 +301,8 @@ dispatcher.add_handler(start_handler)
handler = MessageHandler(Filters.text, lambda x, y: message_handling(x, y, db))
dispatcher.add_handler(handler)
+quest_handler = RegexHandler(r"/[Ss]?[Qq]_\d+", lambda x, y:
+ quest_handling(x, y, db))
+dispatcher.add_handler(quest_handler)
+
updater.start_polling()