From 389a0baa9c8706e216042d5df7ad19176b721c57 Mon Sep 17 00:00:00 2001 From: root Date: Thu, 15 Jan 2026 00:13:51 +0300 Subject: [PATCH] Added new codes --- .DS_Store | Bin 0 -> 6148 bytes ...ding a Professional Scheduler Bot MVP.html | 1111 +++++++++++++++++ scheduler_bots/.DS_Store | Bin 0 -> 6148 bytes scheduler_bots/README.md | 60 + scheduler_bots/requirements.txt | 13 + scheduler_bots/schedule_template RS.csv | 11 + scheduler_bots/telegram_scheduler_v2.py | 196 +++ 7 files changed, 1391 insertions(+) create mode 100644 .DS_Store create mode 100644 Building a Professional Scheduler Bot MVP.html create mode 100644 scheduler_bots/.DS_Store create mode 100644 scheduler_bots/README.md create mode 100644 scheduler_bots/requirements.txt create mode 100644 scheduler_bots/schedule_template RS.csv create mode 100644 scheduler_bots/telegram_scheduler_v2.py diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..584ee46a92f48ae9fd9f7be7e8d204e48614ef42 GIT binary patch literal 6148 zcmeHK!AiqG5S?wSZ750)3VK`cS}?H+f|pS14_MKIN==$VgE3p0lpabUcl{xM#P4xt zcPo~v2M;1;24>&v>`XTMHtb{pK(r^32hae38Y*GQ!R8C0ancnjSr4Jm&xl|G2@GHi zy_INo{6_|8@3tX>J`8c+KJQ-$3UbK8X*LQI6=K|LI7;FycilHpDpxi(t5v63uikfu zYTC_%e3G?;@h$bPluE*d9fa5MVA^Z!oU1es;&d?932`*Qkh_~WjnuTQCTW!E+^!jL zoSM^X?9XPN*J?`d*qt}!%sV=DoATteHJ>}R-Gjrk%id%1l&WXLtiX>@%a+9jyrA*p zBBQLIg!s~n1V(0n8DIw1n*n=V*6QoMOkN!`zzqC?0XiQfDxq(&FsP3XZ0Prq#w&y* zXwzMSP+IgY76x$yMVM4XlPc^LLzr~*OB?4~EDV}-5PD{Oj-6T98;a1gqhIQ95WYcf znE_^CnSrwDHmLqze1HF6PU0RjzznPv1ESLDcG|ckTU%EaN3~X>KA@6NTw(Ad1r1$_ gF_ud49;z1fOEM6Bi-ke-pzx1?rhyw~;7=KN2hgTbN&o-= literal 0 HcmV?d00001 diff --git a/Building a Professional Scheduler Bot MVP.html b/Building a Professional Scheduler Bot MVP.html new file mode 100644 index 0000000..bc6ffbf --- /dev/null +++ b/Building a Professional Scheduler Bot MVP.html @@ -0,0 +1,1111 @@ + + + + + + Building a Professional Scheduler Bot MVP + + + +
+ +
+
+

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. +
  3. Open Telegram and find your bot
  4. +
  5. Send /start command
  6. +
  7. Use /setup to add classes
  8. +
  9. Test /whereami throughout day
  10. +
  11. Try /today and /week
  12. +
  13. Test error cases (wrong inputs)
  14. +
+
+ +
+

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. +
  3. βœ… Added SQLite database
  4. +
  5. βœ… Created interactive setup wizard
  6. +
  7. βœ… Enhanced commands with better UX
  8. +
  9. βœ… Added proper error handling
  10. +
  11. βœ… Implemented user-specific schedules
  12. +
+
+ + +
+ + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + \ No newline at end of file diff --git a/scheduler_bots/.DS_Store b/scheduler_bots/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..661d402ba514ca403abbc1f43cc8a5fd73fdeeec GIT binary patch literal 6148 zcmeH~JqiLr422WjLa^D=avBfd4F=H@cmeUJ6D>sRIl3=D2(H#5@&d^>$xK-G6+0Ud z(dF&15a~r^0yoOs!oU=HCwDo@S?-7H{SKu2 zy&Wuht|nVB+C_8t(0sDm6a&*}7cEF&S{)2jfC>y07)RdQ{lA8Pn*RqaOsN1B_%j8x zTWwZLyj0$;Z?9+dZB}jF;GiEzc=-uHVps7D?uPwh3$P|z5EU4I1Y8CND)3bW9)AK7 A!T