Upgrading to Scheduler Bot MVP

Slide 1 of 12
๐Ÿค–๐Ÿ“…

From Basic Bot to Professional MVP

Transform your simple scheduler into a robust, user-friendly application

What You'll Build

A complete scheduler bot MVP with:

  • Database for user-specific schedules
  • Interactive setup wizard
  • Multiple schedule management
  • Better error handling and UX

Analyzing Current Code Issues

Slide 2 of 12
๐Ÿ”

Major Problems in Current Code:

  • No Database: Single CSV file for all users
  • Fixed Schedule: Can't customize per user
  • Wrong Period Time: Period_7 has incorrect time (10:00-10:40)
  • Missing Periods: Only 7 periods instead of 13
  • No Error Handling: Crashes easily
  • Basic Features: Limited commands

Critical Bug Found!

In your current code, Period_7 has wrong times:

'Period_7': ('10:00', '10:40'), # WRONG! Should be 14:20-15:00

Also missing Periods 8-13 from your CSV template!

MVP Architecture Design

Slide 3 of 12
๐Ÿ—๏ธ

Choose: SQLite vs NoSQL

For our scheduler, SQLite is better because:

  • Structured schedule data (days, periods, classes)
  • Easy queries (find classes by day/time)
  • Built into Python - no extra setup
  • Reliable and ACID compliant

Database Schema

  • users table (user info)
  • classes table (schedule entries)
  • Simple, clean structure

Key Features

  • User-specific schedules
  • Interactive setup wizard
  • Multiple schedule support
  • Better error handling

Step 1: Fix Period Times

Slide 4 of 12
โฐ

Current (WRONG):

PERIOD_TIMES = { 'Period_1': ('09:00', '09:40'), 'Period_2': ('10:00', '10:40'), 'Period_3': ('11:00', '11:40'), 'Period_4': ('11:50', '12:30'), 'Period_5': ('12:40', '13:20'), 'Period_6': ('13:30', '14:10'), 'Period_7': ('10:00', '10:40'), # WRONG! }

Fixed Version:

PERIODS = [ (1, "09:00-09:40"), (2, "10:00-10:40"), (3, "11:00-11:40"), (4, "11:50-12:30"), (5, "12:40-13:20"), (6, "13:30-14:10"), (7, "14:20-15:00"), (8, "15:20-16:00"), (9, "16:15-16:55"), (10, "17:05-17:45"), (11, "17:55-18:35"), (12, "18:45-19:20"), (13, "19:20-20:00") ]

Why This Matters:

Your current Period_7 (10:00-10:40) overlaps with Period_2! This causes wrong class detection.

The correct times match your CSV template with all 13 periods.

Step 2: Database Setup

Slide 5 of 12
๐Ÿ—„๏ธ

Create SQLite Database

Add this database class to your code:

import sqlite3 import datetime class SimpleDatabase: def __init__(self, db_file="schedule_bot.db"): self.db_file = db_file self.init_database() def init_database(self): """Initialize database with tables""" conn = sqlite3.connect(self.db_file) cursor = conn.cursor() # Users table cursor.execute(''' CREATE TABLE IF NOT EXISTS users ( user_id INTEGER PRIMARY KEY, username TEXT, first_name TEXT, last_name TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) ''') # Classes table - one row per class entry cursor.execute(''' CREATE TABLE IF NOT EXISTS classes ( id INTEGER PRIMARY KEY AUTOINCREMENT, user_id INTEGER, day TEXT, period INTEGER, period_time TEXT, subject TEXT, class_group TEXT, room TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (user_id) REFERENCES users (user_id) ) ''') conn.commit() conn.close()

Test Database Setup:

# Initialize database
db = SimpleDatabase()
# Check if database file was created
print("Database initialized successfully")

Step 3: Interactive Setup Wizard

Slide 6 of 12
๐Ÿง™โ€โ™‚๏ธ

Add Conversation Handler

Replace your simple commands with an interactive setup:

from telegram.ext import ConversationHandler from telegram import ReplyKeyboardMarkup, KeyboardButton # Conversation states SELECT_DAY, SELECT_PERIOD, ENTER_SUBJECT, ENTER_GROUP, ENTER_ROOM = range(5) async def setup_start(update: Update, context: ContextTypes.DEFAULT_TYPE): """Start the setup conversation""" await update.message.reply_text( "๐Ÿ“… Let's add a class to your schedule.\n" "First, select the day:", reply_markup=ReplyKeyboardMarkup( [["Monday"], ["Tuesday"], ["Wednesday"], ["Thursday"], ["Friday"], ["Cancel"]], resize_keyboard=True, one_time_keyboard=True ) ) return SELECT_DAY

Benefits:

  • Users can create their own schedules
  • No need for CSV files
  • Interactive and user-friendly
  • Multiple schedules per user

Step 4: Enhanced Commands

Slide 7 of 12
๐ŸŽฏ

Current Commands:

  • /start - Basic welcome
  • /whereami - Current class
  • /schedule - Today's schedule
  • /tomorrow - Tomorrow's schedule
  • /help - Basic help

Enhanced MVP Commands:

  • /setup - Interactive schedule setup
  • /whereami - Enhanced with next class info
  • /today - Today's detailed schedule
  • /tomorrow - Tomorrow's schedule
  • /week - Full weekly overview
  • /clear - Remove all classes
  • /help - Comprehensive help
async def where_am_i(update: Update, context: ContextTypes.DEFAULT_TYPE): """Enhanced: Show current OR next class""" user_id = update.effective_user.id now = datetime.datetime.now() current_day = now.strftime("%A") current_time = now.strftime("%H:%M") # Get current class from database current_class = db.get_current_class(user_id, current_day, current_time) if current_class: response = f"๐ŸŽฏ You should be in class now!\n๐Ÿ“š {current_class['subject']}" else: # Find next class next_class = db.get_next_class(user_id, current_day, current_time) if next_class: response = f"โœ… Free period!\nโžก๏ธ Next: {next_class['subject']} at {next_class['time']}" else: response = f"๐ŸŽ‰ No more classes today!"

Step 5: Better Error Handling

Slide 8 of 12
๐Ÿ›ก๏ธ

Current Issues:

  • Crashes if CSV file missing
  • No user input validation
  • Poor error messages
  • No logging for debugging

Add Professional Error Handling:

import logging # Setup logging logging.basicConfig( format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', level=logging.INFO ) logger = logging.getLogger(__name__) def save_class(user_id, day, period, subject, group, room): """Save class with error handling""" try: if not all([day, period, subject]): raise ValueError("Missing required fields") db.save_class(user_id, day, period, subject, group, room) logger.info(f"Class saved for user {user_id}") return True except Exception as e: logger.error(f"Error saving class: {e}") return False

Step 6: Update Requirements

Slide 9 of 12
๐Ÿ“ฆ

Current requirements.txt:

# Missing file or minimal content

Updated requirements.txt:

python-telegram-bot==20.3 python-dotenv==1.0.0 pandas==2.1.0 # Optional for CSV import

Environment Variables (.env file):

# Create .env file in project root
BOT_TOKEN=your_actual_bot_token_here
# Remove token from code for security!

Install Dependencies:

pip install -r requirements.txt
# Or install individually:
pip install python-telegram-bot python-dotenv

Complete MVP Structure

Slide 10 of 12
๐Ÿ“

Project Structure:

scheduler_bot_mvp/ โ”œโ”€โ”€ scheduler_bot.py # Main bot file โ”œโ”€โ”€ requirements.txt # Dependencies โ”œโ”€โ”€ .env # Environment variables โ”œโ”€โ”€ schedule_bot.db # SQLite database (auto-created) โ”œโ”€โ”€ simple_database.py # Database class (optional) โ””โ”€โ”€ README.md # Documentation

Database Functions:

  • save_user() - Store user info
  • save_class() - Add class entry
  • get_user_classes() - Get schedule
  • get_current_class() - Find current
  • clear_schedule() - Remove all

Bot Commands:

  • /setup - Interactive wizard
  • /whereami - Smart detection
  • /today - Daily schedule
  • /week - Weekly overview
  • /clear - Clean slate

Testing Your MVP

Slide 11 of 12
๐Ÿงช

Step-by-Step Testing:

  1. Run the bot: python scheduler_bot.py
  2. Open Telegram and find your bot
  3. Send /start command
  4. Use /setup to add classes
  5. Test /whereami throughout day
  6. Try /today and /week
  7. Test error cases (wrong inputs)

Expected Behavior:

  • โœ… Database file created automatically
  • โœ… Interactive setup works with keyboards
  • โœ… /whereami shows current or next class
  • โœ… /week displays full schedule
  • โœ… /clear removes all classes
  • โœ… Error messages are user-friendly

Next Steps & Challenges

Slide 12 of 12
๐Ÿš€

Enhancement Challenges:

Easy Enhancements:

  • Add /edit command to modify classes
  • Implement /export to generate CSV
  • Add /import from CSV feature
  • Create /reminders for upcoming classes

Advanced Features:

  • Multiple schedule versions
  • Class notifications (10 min before)
  • Teacher/room-specific searches
  • Web interface for management

Key Improvements Made:

  1. โœ… Fixed period times (all 13 periods)
  2. โœ… Added SQLite database
  3. โœ… Created interactive setup wizard
  4. โœ… Enhanced commands with better UX
  5. โœ… Added proper error handling
  6. โœ… Implemented user-specific schedules