Пример #1
0
def add_user(bot: Bot, update: Update, user_data: dict) -> (int, str):
    uid = update.message.from_user.id
    message = update.message.text
    username = update.message.from_user.username
    if is_cancelled(message):
        user_data['reply_markup'] = ReplyKeyboardMarkup(
            REGISTER_KEYBOARD, True)
        send_cancel(bot, uid, user_data)
        return ConversationHandler.END
    elif is_stopped(message):
        on_stop(message),
        return ConversationHandler.END

    user = Users.create(telegram_id=uid, username=username)
    user.set_city(user_data['reg_city'])
    user.set_email(user_data['reg_email'])
    user.set_status(user_data['reg_email'])
    user.save()  # TODO: check email is valid

    for key, val in user_data.items():
        del key, val

    thread = Thread(name=f"get_and_save::{uid}, {user.email}",
                    target=get_and_save,
                    args=((user.email, user.is_student, uid), ))
    thread.start()

    bot.send_message(uid,
                     MESSAGES['add_user:msg'],
                     ParseMode.HTML,
                     reply_markup=ReplyKeyboardMarkup(START_KEYBOARD, True))
    return ConversationHandler.END
Пример #2
0
def get_city(bot: Bot, update: Update) -> (int, str):
    uid = update.message.from_user.id
    message = update.message.text
    if is_cancelled(message):
        send_cancel(bot, uid, user_data={
            'reply_markup': ReplyKeyboardMarkup(START_KEYBOARD, True)
        })
        return ConversationHandler.END
    elif is_stopped(message):
        on_stop(bot, update)
        return ConversationHandler.END
    elif is_back(message):
        bot.send_message(
            uid,
            MESSAGES['get_city:back'],
            ParseMode.HTML,
            reply_markup=ReplyKeyboardMarkup(SETTINGS_KEYBOARD, True)
        )
    elif message not in CITIES:
        bot.send_message(
            uid,
            MESSAGES['get_city:incorrect'],
            ParseMode.HTML,
            reply_markup=ReplyKeyboardMarkup(SETTINGS_KEYBOARD, True)
        )
    else:
        user = Users.get(Users.telegram_id == uid)
        user.set_city(message, is_update=True)
        user.save()

        bot.send_message(uid, MESSAGES['get_city:correct'], ParseMode.HTML)
        send_current(bot, uid, user.email, user.city)
    return SETTINGS
Пример #3
0
def create_users():
    """ Create sample records in Users database """
    # add students to Users
    for idx, email in enumerate(CORRECT_EMAILS['students']):
        Users.create(telegram_id=idx,
                     username=re.sub(r"@.*", r'', email),
                     email=email,
                     dt=datetime.now(),
                     city="moscow")
    # add lecturers to Users
    for idx, email in enumerate(CORRECT_EMAILS['lecturers']):
        Users.create(telegram_id=idx + len(CORRECT_EMAILS['students']),
                     username=re.sub(r"@.*", r'', email),
                     email=email,
                     dt=datetime.now(),
                     city="moscow",
                     student=False)
Пример #4
0
def get_email(bot: Bot, update: Update) -> (int, str):
    uid = update.message.from_user.id
    message = update.message.text
    if is_cancelled(message):
        send_cancel(bot, uid, user_data={
            'reply_markup': ReplyKeyboardMarkup(START_KEYBOARD, True)
        })
        return ConversationHandler.END
    elif is_stopped(message):
        on_stop(bot, update)
        return ConversationHandler.END
    elif is_back(message):
        bot.send_message(
            uid,
            MESSAGES['get_email:back'],
            ParseMode.HTML,
            reply_markup=ReplyKeyboardMarkup(SETTINGS_KEYBOARD, True)
        )
    elif not Users.check_email(message):
        bot.send_message(
            uid,
            MESSAGES['get_email:incorrect'],
            ParseMode.HTML,
            reply_markup=ReplyKeyboardMarkup(SETTINGS_KEYBOARD, True)
        )
    else:
        user = Users.get(Users.telegram_id == uid)
        user.set_email(message)
        user.set_status(message)
        user.save()  # TODO: check email is correct

        thread = Thread(
            name=f"get_and_save::{uid}, {message}",
            target=get_and_save,
            args=((user.email, user.is_student, uid), )
        )
        thread.start()

        bot.send_message(uid, MESSAGES['get_email:correct'], ParseMode.HTML)
        send_current(bot, uid, user.email, user.city)
    return SETTINGS
Пример #5
0
def on_settings(bot: Bot, update: Update) -> str:
    uid = update.message.from_user.id
    try:
        user = Users.get(Users.telegram_id == uid)
    except BaseException as excinfo:
        print(excinfo)
        bot.send_message(
            uid,
            MESSAGES['on_settings:unregistered'],
            ParseMode.HTML,
            reply_markup=ReplyKeyboardMarkup(REGISTER_KEYBOARD, True)
        )
        return ASK_EMAIL
    send_current(bot, uid, user.email, user.city)
    return SETTINGS
Пример #6
0
def on_schedule(bot: Bot, update: Update) -> str:
    uid = update.message.from_user.id
    try:
        user = Users.get(Users.telegram_id == uid)
    except BaseException as excinfo:
        print(excinfo)
        bot.send_message(uid,
                         MESSAGES['on_schedule:unregistered'],
                         ParseMode.HTML,
                         reply_markup=ReplyKeyboardMarkup(
                             REGISTER_KEYBOARD, True))
        return ASK_EMAIL

    bot.send_message(update.message.chat.id,
                     MESSAGES['on_schedule:ask'],
                     ParseMode.HTML,
                     reply_markup=ReplyKeyboardMarkup(SCHEDULE_KEYBOARD, True))
    return SCHEDULE
Пример #7
0
def get_email(bot: Bot, update: Update, user_data: dict) -> (int, str):
    chat_id = update.message.chat.id
    message = update.message.text
    if is_cancelled(message):
        user_data['reply_markup'] = ReplyKeyboardMarkup(
            REGISTER_KEYBOARD, True)
        send_cancel(bot, chat_id, user_data)
        return ConversationHandler.END
    elif is_stopped(message):
        on_stop(message),
        return ConversationHandler.END

    if not Users.check_email(message):
        bot.send_message(chat_id, MESSAGES['get_email:incorrect'],
                         ParseMode.HTML)
        return

    user_data['reg_email'] = message

    bot.send_message(chat_id, MESSAGES['get_email:correct'], ParseMode.HTML)
    return ask_city(bot, update)
Пример #8
0
def on_stop(bot: Bot, update: Update) -> int:
    uid = update.message.from_user.id
    user = None
    try:
        user = Users.get(Users.telegram_id == uid)
    except BaseException as excinfo:
        logging.debug(excinfo)
    if not user:
        bot.send_message(uid,
                         MESSAGES['on_stop:unregistered'],
                         ParseMode.HTML,
                         reply_markup=ReplyKeyboardMarkup(
                             REGISTER_KEYBOARD, True))
        return
    lessons = get_lessons(uid)
    if lessons:
        lessons.delete_instance()
    user.delete_instance()
    bot.send_message(uid,
                     MESSAGES['on_stop:complete'],
                     ParseMode.HTML,
                     reply_markup=ReplyKeyboardRemove())
    return ConversationHandler.END
Пример #9
0
def start(bot: Bot, update: Update) -> None:
    uid = update.message.from_user.id
    username = update.message.from_user.username
    message = update.message.text
    user = None
    try:
        user = Users.get(Users.telegram_id == uid)
    except BaseException as excinfo:
        logging.debug(excinfo)
    if not user:
        bot.send_message(uid,
                         MESSAGES['start:greetings_new'],
                         ParseMode.HTML,
                         reply_markup=ReplyKeyboardMarkup(
                             REGISTER_KEYBOARD, True))
        return ConversationHandler.END
    user.username = username
    user.save()
    bot.send_message(uid,
                     MESSAGES['start:greetings'],
                     ParseMode.HTML,
                     reply_markup=ReplyKeyboardMarkup(START_KEYBOARD, True))
    return ConversationHandler.END
Пример #10
0
def prepare_mailing(bot: Bot, update: Update, user_data: dict) -> (int, str):
    uid = update.message.from_user.id
    message = update.message.text
    if is_cancelled(message):
        bot.send_message(**user_data['recipients_sp'])
        return WHOM_TO_SEND

    recipients = Users.select()
    if user_data['recipients'] == 'students':
        recipients = recipients.where(Users.is_student == 1)
    elif user_data['recipients'] == 'lecturers':
        recipients = recipients.where(Users.is_student == 0)

    for key, val in user_data.items():
        del key, val

    if recipients.exists():
        thread = Thread(
            name=f"mailing::{uid}",
            target=do_mailing,
            args=(bot, recipients, message, uid)
        )
        thread.start()
        bot.send_message(
            uid,
            MESSAGES['prepare_mailing:start'],
            ParseMode.HTML
        )
        start(bot, update)
    else:
        bot.send_message(
            uid,
            MESSAGES['prepare_mailing:empty'],
            ParseMode.HTML
        )
    return ConversationHandler.END
Пример #11
0
def add_user(update):
    user = Users.objects.filter(telegram_id=update.message.chat.id)
    if user.count() is 0:
        invated = update.message.text.split(' ')
        if len(invated) > 1 and invated[1] != str(update.message.from_user.id):
            invated_user = Users.objects.filter(telegram_id=invated[1])
            if invated_user.count() != 0:
                invated_user = invated_user.get(telegram_id=invated[1])
                user = Users(telegram_id=update.message.chat.id,
                             username=update.message.chat.username,
                             first_name=update.message.chat.first_name,
                             last_name=update.message.chat.last_name,
                             invited_by=invated_user.id)
                user.save()
                return
        user = Users(telegram_id=update.message.chat.id,
                     username=update.message.chat.username,
                     first_name=update.message.chat.first_name,
                     last_name=update.message.chat.last_name)
        user.save()
    else:
        user = user.get(telegram_id=update.message.chat.id)
        if not user.banned:
            user.first_name = update.message.chat.first_name
            user.last_name = update.message.chat.last_name
            user.params = '[]'
            user.rules = False
            user.blocked = False
            user.save()
        else:
            return None
    return user