def accept_bot_submission(bot, update, of_bot: Bot, category): uid = util.uid_from_update(update) message_id = util.mid_from_update(update) user = User.from_update(update) try: of_bot.category = category of_bot.date_added = datetime.date.today() of_bot.approved = True of_bot.approved_by = user of_bot.save() buttons = [ [ InlineKeyboardButton( "Edit {} details".format(of_bot.username), callback_data=util.callback_for_action( CallbackActions.EDIT_BOT, {"id": of_bot.id} ), ) ] ] reply_markup = InlineKeyboardMarkup(buttons) bot.formatter.send_or_edit( uid, "{} has been accepted to the Botlist. ".format( of_bot ), to_edit=message_id, reply_markup=reply_markup, ) log_msg = "{} accepted by {}.".format(of_bot.username, uid) # notify submittant if of_bot.submitted_by != user: try: bot.sendMessage( of_bot.submitted_by.chat_id, util.success( messages.ACCEPTANCE_PRIVATE_MESSAGE.format( of_bot.username, of_bot.category ) ), ) log_msg += "\nUser {} was notified.".format(str(of_bot.submitted_by)) except TelegramError: log_msg += "\nUser {} could NOT be contacted/notified in private.".format( str(of_bot.submitted_by) ) log.info(log_msg) except: bot.formatter.send_failure(uid, "An error has occured. Bot not added.")
def submit(): if not request.is_json: res = _error('MimeType must be application/json.') res.status_code = 400 return res content = request.get_json() try: access = APIAccess.get(APIAccess.token == content.get('token')) except APIAccess.DoesNotExist: res = _error('The access token is invalid.') res.status_code = 401 return res username = content.get('username') if username is None or not isinstance(username, str): res = _error('You must supply a username.') res.status_code = 400 return res # insert `@` if omitted username = '******' + username if username[0] != '@' else username try: Bot.get(Bot.username == username) res = _error('The bot {} is already in the BotList.'.format(username)) res.status_code = 409 return res except Bot.DoesNotExist: b = Bot(username=username) name = content.get('name') description = content.get('description') inlinequeries = content.get('inlinequeries') try: if name: if isinstance(name, str): b.name = name else: raise AttributeError('The name field must be a string.') if description: if isinstance(description, str): b.description = description else: raise AttributeError('The description field must be a string.') if inlinequeries: if isinstance(inlinequeries, bool): b.inlinequeries = inlinequeries else: raise AttributeError( 'The inlinequeries field must be a boolean.') except Exception as e: res = _error(str(e)) res.status_code = 400 return res b.date_added = datetime.date.today() b.submitted_by = access.user b.approved = False b.save() res = jsonify({'success': '{} was submitted for approval.'.format(b)}) res.status_code = 201 return res