Пример #1
0
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')
Пример #2
0
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
Пример #3
0
 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️⃣")
Пример #4
0
    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)
Пример #5
0
    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
        }