def slack_corgi(): from_name = request.values.get('user_name', '') from_team = request.values.get('team_domain', '') text = request.values.get('text', '') text = text.strip() corgis = {} if text_contains_emoji(text): emoji = text corgis = api.get(emoji) if not corgis['count']: response_content = generate_slack_failure_case_message( 'Oh no! No corgi found for emoji {},' + ' try sending us a different one!'.format(emoji)), return Response(response_content, mimetype='application/json') else: detected_emoji = emojize(text, use_aliases=True) if len(detected_emoji) != len(text): corgis = api.get(detected_emoji) if not corgis or not corgis['count']: response_content = generate_slack_failure_case_message( 'Oh no! No emoji detected in your message! ' + 'Try sending us an emoji!') return Response(response_content, mimetype='application/json') corgi_url = random.choice(corgis['results']) response_content = generate_slack_corgi_case(corgi_url) return Response(response_content, mimetype='application/json')
def create_message(text, phone_number): if emojis_for_emoticons.get(text, None) or text_contains_emoji(text): return EmojiRequest(text, phone_number) if Secrets.get_secret(text): return SecretRequest(text, phone_number) return None
def test_text_contains_emoji(self): assert not text_contains_emoji("") assert not text_contains_emoji("test") assert not text_contains_emoji("lorem ipsum") assert text_contains_emoji("🏀") assert text_contains_emoji("🏀asd") assert text_contains_emoji("asd🏀") assert text_contains_emoji("🇫🇷") assert text_contains_emoji("3️⃣")
def create_reply(self): message = "" text = self.text text = text.strip() if text_contains_emoji(text): emoji = text else: emoji = emojis_for_emoticons.get(text, None) if not emoji: raise RuntimeError("Improperly identified message type") # If it's a multi-emoji that we don't track, just grab the first emoji. # TODO: abstract out use of `keys()`. if len(emoji) > 1 and emoji not in google_spreadsheets.keys(): emoji = text[0] # Check for skin-toned emojis. # (This only handles the one-emoji case for now.) if not emoji_contains_skin_tone(text) and not emoji_is_numeric(text): message = render_template('txt/requested_emoji_does_not_exist.txt', requested_emoji=text, fallback_emoji=emoji) # Time to grab the filepath for the emoji! corgi_urls = api.get(emoji)['results'] # If that still doesn't work, we'll just grab a random one. if not corgi_urls: logger.warn("Couldn't find corgi for {}. Using random one.".format( emoji)) while not corgi_urls: results = api.get() emoji, corgi_urls = results['emoji'], results['results'] message = render_template('txt/requested_emoji_does_not_exist.txt', requested_emoji=text, fallback_emoji=emoji) corgi_url = random.choice(corgi_urls) if message == "": supplements = get_supplement_messsage(self.phone_number, self.text) if supplements: message = supplements return create_response(message, image_url=corgi_url)
def get(self, emoji=None): """Returns an emoji associated with the given emoji. If no emoji is supplied, a random corji is returned.""" if not emoji: emoji = random.choice(google_spreadsheets.keys()) corgi_urls = [] # Check for skin-toned emojis and fallback to the undecorated one. if len(emoji) == 2 and emoji_contains_skin_tone(emoji): emoji = emoji[0] # First we'll try using S3. if settings.Config.REMOTE_CACHE_RETRIEVE: try: corgi_urls = s3.get_all(emoji) except CorgiNotFoundException as e: logger.warn("Corji not found for emoji %s", emoji) # If S3 is a no-go, fall back to Spreadsheets. if not corgi_urls: corgi_urls = google_spreadsheets.get_all(emoji) # TODO: do this smarter somehow. for url in corgi_urls: try: requests.get(url) except Exception as e: logger.warn("URL {} is invalid; not returning.".format(url)) corgi_urls.remove(url) return { "count": len(corgi_urls), "emoji": emoji if text_contains_emoji(emoji) else "", "results": corgi_urls }