This Telegram bot is a pamphlet uploader that you can use to receive your academic pamphlets
from aiogram.types import ReplyKeyboardMarkup , InlineKeyboardButton , InlineKeyboardMarkup

person_keyboard = ReplyKeyboardMarkup(resize_keyboard=True, selective=True)
valid_person = {"آیدا احمدزاده":"aida_ahmadzadeh" ,
                 "حنانه یحیایی":"hanane_yahyai",
                "جزوات ترم پیش":"last_semester",
                "برکشت":"back"}
for person_name in valid_person.keys() :person_keyboard.insert(person_name)


course_keyboard = ReplyKeyboardMarkup(resize_keyboard=True, selective=True)
valid_course = {"احتمال":"ehtemal" ,
                "مباني جبر":"mabani_jabr" ,
                "مباني آناليز عددي" : "analiz_adadi",
                "مباني نظريه محاسبه":"nazarie_mohasebe" ,
                "مباني منطق ونظريه مجموعه ها":"manteq_nazarie_majmoeha" }
for course in valid_course.keys() :course_keyboard.insert(course)

bye_me_coffee = InlineKeyboardMarkup().add(
    InlineKeyboardButton(text="برای من قهوه بخر",
                          url="https://coffeebede.com/amirel1te")
)

keys.py
AmirBasuti/jozvekhubot
from aiogram import Bot, Dispatcher, executor, types
from aiogram.types import ReplyKeyboardRemove
import datetime
from dotenv import load_dotenv
from text import start_text, help_text, get_text, supoort_text, error_text
from keys import (
    person_keyboard,
    course_keyboard,
    valid_person,
    valid_course,
    bye_me_coffee,
)
from user_manegment import save_user_data, user_exists
import os

load_dotenv()
TOKEN = os.getenv("TELEGRAM_TOKEN")

# Initialize the bot and dispatcher
bot = Bot(TOKEN)
dp = Dispatcher(bot)


async def send_document_to_user(message, person, tmp_course):
    try:
        wait_message = await message.reply(text="لطفا کمی صبر کنید", reply_markup=ReplyKeyboardRemove())
        file_path = f"jozve/{valid_person[person]}/{valid_course[tmp_course]}.pdf"
        with open(file_path, "rb") as file:
            await message.reply_document(document=file, caption=f"جزوه {tmp_course} توسط {person}", reply_markup=bye_me_coffee)
            await message.answer(text="شما میتوانید برای حمایت از کسی که جزوه را تهیه کرده است, قهوه بخرید D:", reply_markup=ReplyKeyboardRemove())
            await bot.delete_message(message.chat.id, wait_message.message_id)
    except:
        await message.answer(text="/support جزوه مورد نظر یافت نشد. با سازنده در ارتباط باشید", reply_markup=ReplyKeyboardRemove())


async def send_welcome_message(message):
    if not user_exists(message.from_user.id):
        save_user_data(
            message.from_user.id,
            message.from_user.username,
            message.from_user.first_name,
            message.from_user.last_name,
        )
    await message.answer(text=start_text, reply_markup=ReplyKeyboardRemove())


async def send_help_message(message):
    await message.answer(text=help_text, reply_markup=ReplyKeyboardRemove())


async def send_get_message(message):
    await message.answer(text=get_text, reply_markup=course_keyboard)


async def send_support_message(message):
    await message.answer(text=supoort_text, reply_markup=ReplyKeyboardRemove())


@dp.message_handler(commands=['start'])
async def start_command(message: types.Message):
    await send_welcome_message(message)


@dp.message_handler(commands=['help'])
async def help_command(message: types.Message):
    await send_help_message(message)


@dp.message_handler(commands=['get'])
async def get_command(message: types.Message):
    await send_get_message(message)


@dp.message_handler(commands=['support'])
async def support_command(message: types.Message):
    await send_support_message(message)


@dp.message_handler(lambda message: message.text in valid_course.keys())
async def course_handler(message: types.Message):
    global selection_course 
    global course_input
    selection_course = message.text
    course_input = True
    await message.answer(text="فرد مورد نظر خود را انتخاب کنید", reply_markup=person_keyboard)


@dp.message_handler(lambda message: message.text in valid_person.keys())
async def person_handler(message: types.Message):
    global course_input, selection_course 
    if course_input and message.text != "برکشت":
        tmp_course = selection_course
        course_input = False
        person = message.text
        await send_document_to_user(message, person, tmp_course)
    elif message.text == "برکشت":
        await message.answer(text="درس مورد نظر خود را انتخاب کنید", reply_markup=course_keyboard)
    else:
        await message.answer(text="ابتدا درس مورد نظر خود را انتخاب کنید", reply_markup=course_keyboard)


@dp.message_handler()
async def handle_other_messages(message: types.Message):
    await message.answer(text=error_text, reply_markup=ReplyKeyboardRemove())


async def start(_):
    print(datetime.datetime.now(), "Bot Started")


async def shutdown(_):
    print(datetime.datetime.now(), "Bot Stopped")


if __name__ == '__main__':
    executor.start_polling(dp, skip_updates=True ,on_startup=start , on_shutdown=shutdown )

main.py
AmirBasuti/jozvekhubot
start_text ="""
سلام D:

این بات برای ارسال جزوات به دانشجویان میباشد

دریافت جزوه خود از دستور /get استفاده کنید

راهنمایی بیشتر دستور /help را ارسال کنید

ارتباط با ساپورت /supoort

"""
help_text ="""
 1-  در مرحله اول اسم کسی که جزوه را درست کرده را انتخاب کنید

 2- در مرحله دوم درس مورد نظر خود را انتخاب کنید

 3-  و در مرحله سوم جزوه مورد نظر خود را انتخاب کنید


با دستور /get شروع کنید
""" 
get_text ="""
لطفا شخصی که جزوه را تهیه کرده وارد کنید 

اگر راهنمای بات را میخواهید /help

ارتباط با ساپورت /supoort
"""
supoort_text ="""
برای ارتباط با ساپورت را ایدی @amirbasuti ارتباط برقرار کنید
"""
error_text ="""
متوجه نشدم !؟

شما میتوانید از دستور /start برای توضیحات

دستور /help برای نحوه کار کردن

و دستور /get برای گرفتن جزوه استفاده کنید
"""
text.py
AmirBasuti/jozvekhubot
import csv
import os
csv_file = 'user_data.csv'


def save_user_data(user_id, username, first_name, last_name):
    # Check if the CSV file exists, and create it if not
    if not os.path.exists(csv_file):
        with open(csv_file, 'w', newline='') as file:
            csv_writer = csv.writer(file, quoting=csv.QUOTE_MINIMAL)
            # Write the header row
            csv_writer.writerow(["User ID", "Username", "First Name", "Last Name"])

    # Append the user's data to the CSV file with double quotes
    with open(csv_file, 'a', newline='') as file:
        csv_writer = csv.writer(file, quoting=csv.QUOTE_MINIMAL)
        csv_writer.writerow([user_id, username, first_name, last_name])

def user_exists(user_id):
    # Check if the CSV file exists
    if not os.path.exists(csv_file):
        return False

    # Check if the user ID exists in the CSV file
    with open(csv_file, 'r', newline='') as file:
        csv_reader = csv.reader(file)
        next(csv_reader)  # Skip the header row
        for row in csv_reader:
            if row and int(row[0]) == user_id:
                return True
    return False

user_manegment.py
AmirBasuti/jozvekhubot