|
|
import os
|
|
|
import asyncio
|
|
|
from dotenv import load_dotenv
|
|
|
from telebot import types
|
|
|
from telebot.async_telebot import AsyncTeleBot
|
|
|
|
|
|
load_dotenv()
|
|
|
BOT_TOKEN = os.getenv("BOT_TOKEN")
|
|
|
|
|
|
bot = AsyncTeleBot(BOT_TOKEN)
|
|
|
|
|
|
def is_mathematician(user_id) -> bool:
|
|
|
return True
|
|
|
|
|
|
# Handle '/start' and '/help'
|
|
|
@bot.message_handler(commands=['help', 'start'])
|
|
|
async def send_welcome(message):
|
|
|
markup = types.InlineKeyboardMarkup()
|
|
|
btn = types.InlineKeyboardButton('Autenticati', callback_data='authenticate')
|
|
|
markup.add(btn)
|
|
|
await bot.reply_to(message, """\
|
|
|
Benvenuto nel bot di ingresso per i gruppi telegram del dipartimento di matematica dell'università di Pisa! Per poter accedere, fai l'autenticazione con il tuo account di ateneo tramite Google. Clicca il pulsante qui sotto!\
|
|
|
""", reply_markup=markup)
|
|
|
|
|
|
buttons = { # {name of the button: courses}
|
|
|
'Primo Anno 📚': 'Analisi 1 🧮: http://example.com/matematica\n Fisica 🧲: http://example.com/fisica\n Informatica 💻: http://example.com/informatica',
|
|
|
'Secondo Anno 📚': 'Algebra 1 ➕: http://example.com/algebra\n Analisi 2 🧮: http://example.com/analisi2\n Programmazione 💻: http://example.com/programmazione',
|
|
|
'Terzo Anno 📚': 'Meccanica Razionale 🧲: http://example.com/meccraz\n Calcolo Scientifico 🧮: http://example.com/cs\n LPL 💻: http://example.com/lpl',
|
|
|
'Magistrale 🎓': 'Intelligenza Artificiale 🤖: http://example.com/intelligenzaartificiale\n Data Science 📊: http://example.com/datascience\n Cyber Security 🔒: http://example.com/cybersecurity',
|
|
|
'Miscellanea 📝': 'Spam 📬: http://example.com/spam\n Eventi 🎉: http://example.com/eventi\n• PHC 🏥: http://example.com/phc',
|
|
|
}
|
|
|
|
|
|
# Handle button click
|
|
|
@bot.callback_query_handler(func=lambda call: call.data == 'authenticate')
|
|
|
async def handle_authenticate(call):
|
|
|
await bot.answer_callback_query(call.id, text="Autenticazione completata") # Avoids to leave the button pressed and sends a message on screen (not in chat)
|
|
|
if is_mathematician(call.from_user.id):
|
|
|
|
|
|
markup = types.InlineKeyboardMarkup()
|
|
|
for button in buttons:
|
|
|
markup.add(types.InlineKeyboardButton(button, callback_data=button))
|
|
|
|
|
|
await bot.send_message(call.message.chat.id, 'Autenticazione riuscita! Adesso puoi accedere a tutti i gruppi disponibili presenti', reply_markup=markup)
|
|
|
|
|
|
else:
|
|
|
await bot.send_message(call.message.chat.id, 'Sembra che tu non sia iscritto al corso di Laurea in matematica. Se pensi che sia un errore o desideri essere aggiunto, manda una mail a macchinisti@phc.dm.unipi.it. Altrimenti puoi chiedere di farti aggiungere manualmente ai gruppi a cui sei interessato da altri studenti di matematica che sono già iscritti.')
|
|
|
|
|
|
# Handle button click
|
|
|
@bot.callback_query_handler(func=lambda call: call.data in buttons)
|
|
|
async def handle_buttons(call):
|
|
|
await bot.answer_callback_query(call.id) # Avoids to leave the button pressed, no message is sent on screen
|
|
|
await bot.send_message(call.message.chat.id, buttons[call.data])
|
|
|
|
|
|
asyncio.run(bot.polling()) |