def choose_new_name(self, update: Update, context: CallbackContext): Queue.add(update.message.chat.id, update.message.message_id) chat_id = update.message.chat.id new_team_name = update.message.text old_team_name = context.user_data['old_team_name'] if App.db.get_teams().find_one({'chat_id': chat_id, 'name': new_team_name}): message = update.message.reply_text( f'Team wasn\'t renamed, cause "{new_team_name}" already exists, send new name for team "{old_team_name}" again', ) Queue.add(message.chat.id, message.message_id) return RenameTeam.CHOOSING_NEW_NAME if not re.match(r'^[0-9a-zа-яё._-]{2,16}$', new_team_name.lower(), re.IGNORECASE): message = update.message.reply_text( f'Team wasn\'t renamed, cause name "{new_team_name}" contains incorrect symbols, try again', ) Queue.add(message.chat.id, message.message_id) return RenameTeam.CHOOSING_NEW_NAME if App.db.get_teams().find_one_and_update({'chat_id': chat_id, 'name': old_team_name}, {'$set': {'name': new_team_name}}): message = update.message.reply_text( f'Team "{old_team_name}" was renamed to "{new_team_name}"' ) Queue.add(message.chat.id, message.message_id) else: message = update.message.reply_text( f'Team "{old_team_name}" wasn\'t renamed to "{new_team_name}" due to some errors, try again later', reply_markup=ReplyKeyboardRemove(remove_keyboard=True), ) Queue.add(message.chat.id, message.message_id) Queue.clean(update.message.chat.id, timeout=30) return RenameTeam.CHOOSING_END
def start(self, update: Update, context: CallbackContext): Queue.add(update.message.chat.id, update.message.message_id) message = update.message.reply_text('Choose a team name') Queue.add(message.chat.id, message.message_id) return AddTeam.CHOOSING_NAME
def choose_team(self, update: Update, context: CallbackContext): Queue.add(update.message.chat.id, update.message.message_id) chat_id = update.message.chat.id team = update.message.text if not re.match(f'^({HandlerHelpers.make_teams_regex(chat_id)})$', team): message = update.message.reply_text(f'Team "{team}" wasn\'t found, try again') Queue.add(message.chat.id, message.message_id) return RemoveTeam.CHOOSING_TEAM document = App.db.get_teams().find_one_and_delete({ 'chat_id': chat_id, 'name': team, }) if document: message = update.message.reply_text( f'Team "{team}" was successfully removed', reply_markup=ReplyKeyboardRemove(remove_keyboard=True), ) Queue.add(message.chat.id, message.message_id) else: message = update.message.reply_text( f'Team "{team}" wasn\'t removed due to some errors, try again later', reply_markup=ReplyKeyboardRemove(remove_keyboard=True), ) Queue.add(message.chat.id, message.message_id) Queue.clean(update.message.chat.id, timeout=30) return RemoveTeam.CHOOSING_END
def start(self, update: Update, context: CallbackContext): Queue.add(update.message.chat.id, update.message.message_id) chat_id = update.message.chat.id if not HandlerHelpers.check_teams_existence(update): return AddMembers.CHOOSING_END markup = ReplyKeyboardMarkup(map(lambda x: [x], HandlerHelpers.get_teams(chat_id)), one_time_keyboard=True) message = update.message.reply_text( f'Choose a team', reply_markup=markup ) Queue.add(message.chat.id, message.message_id) return AddMembers.CHOOSING_TEAM
def mention(self, update, context: CallbackContext): Queue.add(update.message.chat.id, update.message.message_id) chat_id = update.message.chat.id team = update.message.text if not re.match(f'^({HandlerHelpers.make_teams_regex(chat_id)})$', team): message = update.message.reply_text(f'Team "{team}" wasn\'t found, try again') Queue.add(message.chat.id, message.message_id) return Mention.MENTION members = HandlerHelpers.get_team_members(chat_id, team) if members: update.message.reply_text( ' '.join(members), reply_markup=ReplyKeyboardRemove(remove_keyboard=True) ) else: message = update.message.reply_text( 'Members weren\'t found or something went wrong', reply_markup=ReplyKeyboardRemove(remove_keyboard=True) ) Queue.add(message.chat.id, message.message_id) Queue.clean(update.message.chat.id, timeout=30) return Mention.CHOOSING_END
def help(self, update: Update, context: CallbackContext): timeout = 120 Queue.add(update.message.chat.id, update.message.message_id, timeout=timeout) message = update.message.reply_text( '*Commands for admins:*\n' '/addteam – Add team\n' '/addmembers – Add members to the chosen team\n' '/removeteam – Remove team\n' '/removemembers – Remove members from the chosen team\n' '/renameteam – Rename team to the new given name\n' '\n' '*Commands for all members:*\n' '/mention – Choose a team to mention\n' '/getteams – List of all added teams\n' '/help – Get some basic info about bot and commands\n' '/cancel – Prevent any running command\n', parse_mode=ParseMode.MARKDOWN) Queue.add(message.chat.id, message.message_id, timeout=timeout) Queue.clean(update.message.chat.id)
def get(self, update: Update, context: CallbackContext): Queue.add(update.message.chat.id, update.message.message_id) chat_id = update.message.chat.id teams = HandlerHelpers.get_teams(chat_id) if len(teams) > 0: message = update.message.reply_text(', '.join(teams)) Queue.add(message.chat.id, message.message_id, timeout=300) else: message = update.message.reply_text('No teams were found') Queue.add(message.chat.id, message.message_id) Queue.clean(update.message.chat.id) return GetTeams.GETTING_END
def choose_name(self, update: Update, context: CallbackContext): Queue.add(update.message.chat.id, update.message.message_id) name = update.message.text if re.match(r'^[0-9a-zа-яё._-]{2,16}$', name.lower(), re.IGNORECASE): if App.db.get_teams().find_one({ 'name': re.compile(f'^{name.lower()}$', re.IGNORECASE), 'chat_id': update.message.chat.id }): message = update.message.reply_text( f'Team "{name}" already exists, try another name' ) Queue.add(message.chat.id, message.message_id) return AddTeam.CHOOSING_NAME else: App.db.get_teams().insert_one({ 'name': name, 'chat_id': update.message.chat.id, 'members': [], }) message = update.message.reply_text( f'Team "{name}" was successfully created' ) Queue.add(message.chat.id, message.message_id) else: message = update.message.reply_text( f'Team "{name}" wasn\'t created cause name contains incorrect symbols, try again' ) Queue.add(message.chat.id, message.message_id) return AddTeam.CHOOSING_NAME Queue.clean(update.message.chat.id, timeout=30) return AddTeam.CHOOSING_END
def choose_team(self, update: Update, context: CallbackContext): Queue.add(update.message.chat.id, update.message.message_id) chat_id = update.message.chat.id context.user_data['old_team_name'] = old_team_name = update.message.text if not re.match(f'^({HandlerHelpers.make_teams_regex(chat_id)})$', old_team_name): message = update.message.reply_text(f'Team "{old_team_name}" wasn\'t found, try again') Queue.add(message.chat.id, message.message_id) return RenameTeam.CHOOSING_TEAM message = update.message.reply_text( f'Now send new name for the team "{old_team_name}"', reply_markup=ReplyKeyboardRemove(remove_keyboard=True), ) Queue.add(message.chat.id, message.message_id) return RenameTeam.CHOOSING_NEW_NAME
def choose_team(self, update, context: CallbackContext): Queue.add(update.message.chat.id, update.message.message_id) chat_id = update.message.chat.id context.user_data['team'] = team = update.message.text if not re.match(f'^({HandlerHelpers.make_teams_regex(chat_id)})$', team): message = update.message.reply_text( f'Team "{team}" wasn\'t found, try again') Queue.add(message.chat.id, message.message_id) return RemoveMembers.CHOOSING_TEAM message = update.message.reply_text( f'Now, send user @logins separated by space to remove them from the team "{team}" (with leading @)', reply_markup=ReplyKeyboardRemove(remove_keyboard=True)) Queue.add(message.chat.id, message.message_id) return RemoveMembers.CHOOSING_MEMBERS
def choose_members(self, update: Update, context: CallbackContext): Queue.add(update.message.chat.id, update.message.message_id) chat_id = update.message.chat.id team = context.user_data['team'] # set is used to remove duplicated members = list( set(filter( lambda x: re.match(r'^@[0-9a-z._-]{5,32}$', x.lower(), re.IGNORECASE) and x not in HandlerHelpers.get_team_members(chat_id, team), update.message.text.split(' ') )) ) if members: App.db.get_teams().find_one_and_update({ 'chat_id': chat_id, 'name': team, }, { '$push': { 'members': { '$each': members, }, }, }) message = update.message.reply_text( f'Greeting new members of the "{team}" team: {" ".join(members)}' ) Queue.add(message.chat.id, message.message_id) else: message = update.message.reply_text( f'No members were added to the team "{team}"' ) Queue.add(message.chat.id, message.message_id) Queue.clean(update.message.chat.id, timeout=30) return AddMembers.CHOOSING_END
def choose_members(self, update, context: CallbackContext): Queue.add(update.message.chat.id, update.message.message_id) chat_id = update.message.chat.id team = context.user_data['team'] members = list( filter( lambda x: x.startswith('@') and x in HandlerHelpers.get_team_members(chat_id, team), update.message.text.split(' '))) if members: App.db.get_teams().find_one_and_update( { 'chat_id': chat_id, 'name': team, }, { '$pull': { 'members': { '$in': members, }, }, }) message = update.message.reply_text( f'Members who were removed from "{team}" team: {" ".join(members)}' ) Queue.add(message.chat.id, message.message_id) else: message = update.message.reply_text( f'No members were removed from the team "{team}"') Queue.add(message.chat.id, message.message_id) Queue.clean(update.message.chat.id, timeout=30) return RemoveMembers.CHOOSING_END