def miss_event(update, context): chat_id = update.effective_chat.id event_args = context.args db_connector, events_col = db_handler('event') if len(event_args) != 1: message = f"Invalid message, the only parameter should be the event name." return send_message(context, chat_id, message) event_name = event_args[0] query = {"name": event_name.lower(), "chat_id": chat_id} event = events_col.find_one(query) if not event: message = f"Event {event_name} not found." return send_message(context, chat_id, message) not_assisting_users = event['not_assisting'] participants = event['participants'] not_assisting_user = create_participant(update.message.from_user) if not_assisting_user['id'] not in [not_assisting_user['id'] for not_assisting_user in not_assisting_users]: events_col.update_one(query, {"$push": {'not_assisting': not_assisting_user}}, upsert=False) if not_assisting_user['id'] in [participant['id'] for participant in participants]: events_col.update_one(query, {"$pull": {'participants': not_assisting_user}}, upsert=False) message = f"{not_assisting_user['name']} will not assist {event['name'].capitalize()}" return send_message(context, chat_id, message)
def events(update, context): chat_id = update.effective_chat.id db_connector, events_col = db_handler('event') query = {"date": {"$gte": datetime.datetime.today()}, "chat_id": chat_id} events_query = db_connector.search_records(events_col, query) message = list_events(events_query) return send_message(context, chat_id, message)
def birthdays(update, context): chat_id = update.effective_chat.id db_connector, birthdays_col = db_handler('birthday') query = {"chat_id": chat_id} birthdays_query = db_connector.search_records(birthdays_col, query) message = list_birthdays(birthdays_query) return send_message(context, chat_id, message)
def next_birthday(update, context): chat_id = update.effective_chat.id db_connector, birthdays_col = db_handler('birthday') query = {"chat_id": chat_id} next_birthday = db_connector.search_records(birthdays_col, query) distance = 365 nearest_birthday = None now = datetime.now() for birthday in next_birthday: difference_in_days = get_difference_between_dates_in_days(birthday['date'], now) if difference_in_days < distance: distance = difference_in_days nearest_birthday = birthday if not nearest_birthday: return send_message(context, chat_id, "Please load birthdays first.") message = f"Next birthday is in {difference_in_days} day(s): {parse_birthday(nearest_birthday)}" return send_message(context, chat_id, message)
def add_event(update, context): chat_id = update.effective_chat.id event_args = context.args db_connector, events_col = db_handler('event') if len(event_args) < 4: message = f"Invalid message, the format should be exactly: name(One word) dd/mm/yyyy hh:mm place." return send_message(context, chat_id, message) try: parsed_date = parse_date_time(f'{event_args[1]} {event_args[2]}') except: message = f"Invalid date format in message, the format should be exactly: name(One word)" \ f" dd/mm/yyyy hh:mm place." return send_message(context, chat_id, message) event_document = create_event(chat_id, event_args, parsed_date, update.message.from_user) db_connector.insert_record(events_col, event_document) message = f"Event {event_document['name']} created for {event_document['date'].strftime('%d/%m %H:%M')}." return send_message(context, chat_id, message)
def add_birthday(update, context): chat_id = update.effective_chat.id birthday_args = context.args db_connector, birthdays_col = db_handler('birthday') if len(birthday_args) != 2: message = f"Invalid message, the format should be exactly: name(One word) dd/mm/yyyy." return send_message(context, chat_id, message) try: parsed_date = parse_date(f'{birthday_args[1]}') except: message = f"Invalid date format in message, the format should be exactly: name(One word) dd/mm/yyyy." return send_message(context, chat_id, message) birthday_document = create_birthday(chat_id, birthday_args, parsed_date) db_connector.insert_record(birthdays_col, birthday_document) message = f"Birthday for {birthday_document['name'].capitalize()} " \ f"added: {birthday_document['date'].strftime('%d/%m')}." return send_message(context, chat_id, message)
def delete_event(update, context): chat_id = update.effective_chat.id event_args = context.args db_connector, events_col = db_handler('event') message = None if len(event_args) != 1: message = f"Invalid message, the only parameter should be the event name." return send_message(context, chat_id, message) event_name = event_args[0] query = {'name': event_name.lower(), "chat_id": chat_id} event = db_connector.search_record(events_col, query) if not event: message = f"Event {event_name} not found." if not message and event['creator']['id'] == update.message.from_user.id: deleted = db_connector.delete_record(events_col, query) if deleted == 0: message = f"There was an error deleting the event." else: message = f"Event {event_name} deleted." if not message: message = "Only the creator of the event can delete it." return send_message(context, chat_id, message)