def test_mixing_together(self): message = RefAttach('user1') + ImageAttach('http://image.url') + LocationAttach('home', 32, 83) + SplitAttach( 'token') + EmojiAttach(13, 9) self.assertEqual(message.get_text(), 'hometoken\ufffd') self.assertEqual(message.get_attachments(), [ { 'type': 'mentions', 'loci': [[0, 0]], 'user_ids': ['user1'], }, { 'type': 'image', 'url': 'http://image.url', }, { 'type': 'location', 'name': 'home', 'lat': 32, 'long': 83, }, { 'type': 'split', 'token': 'token', }, { 'type': 'emoji', 'charmap': [[13, 9]], 'placeholder': '\ufffd', } ])
def test_multiple_in_order(self): message = 'Test ' + RefAttach('user1', '@1') + RefAttach('user2', '@2') + RefAttach('user3', '@3') self.assertEqual(message.get_text(), 'Test @1@2@3') self.assertEqual(message.get_attachments(), [{ 'loci': [[5, 2], [7, 2], [9, 2]], 'type': 'mentions', 'user_ids': ['user1', 'user2', 'user3'] }])
def test_multiple_split(self): message = RefAttach('red_id', '@red') + ' vs. ' + RefAttach('blue_id', '@blue') self.assertEqual(message.get_text(), '@red vs. @blue') self.assertEqual(message.get_attachments(), [{ 'type': 'mentions', 'loci': [[0, 4], [9, 5]], 'user_ids': ['red_id', 'blue_id'] }])
def test_dynamic_creation_reverse_order(self): message = RefAttach('user_id_here', '@world') + ' how are you?' self.assertEqual(message.get_text(), '@world how are you?') self.assertEqual(message.get_attachments(), [{ 'loci': [[0, 6]], 'type': 'mentions', 'user_ids': ['user_id_here'] }])
def test_dynamic_creation_reverse_order(self) -> None: message = RefAttach("user_id_here", "@world") + " how are you?" self.assertEqual(message.get_text(), "@world how are you?") self.assertEqual( message.get_attachments(), [{ "loci": [[0, 6]], "type": "mentions", "user_ids": ["user_id_here"] }], )
def test_multiple_split(self) -> None: message = RefAttach("red_id", "@red") + " vs. " + RefAttach( "blue_id", "@blue") self.assertEqual(message.get_text(), "@red vs. @blue") self.assertEqual( message.get_attachments(), [{ "type": "mentions", "loci": [[0, 4], [9, 5]], "user_ids": ["red_id", "blue_id"], }], )
def test_multiple_in_order(self) -> None: message = ("Test " + RefAttach("user1", "@1") + RefAttach("user2", "@2") + RefAttach("user3", "@3")) self.assertEqual(message.get_text(), "Test @1@2@3") self.assertEqual( message.get_attachments(), [{ "loci": [[5, 2], [7, 2], [9, 2]], "type": "mentions", "user_ids": ["user1", "user2", "user3"], }], )
def user_named_saucerbot(bot: Bot, message: Message, force_random: bool = False) -> bool: """ Chastise people who make their name saucerbot """ if message.name != 'saucerbot': return False # Send something dumb user_attach = RefAttach(message.user_id, f'@{message.name}') msg = random.choice(SAUCERBOT_MESSAGE_LIST) if force_random or msg == 'random': insult = get_insult() prefix = "Stop being a" if insult[0].lower() in ['a', 'e', 'i', 'o', 'u']: prefix = prefix + 'n' msg = prefix + ' ' + insult + ', ' if isinstance(msg, str): msg = msg + user_attach bot.post(msg) return True
def test_hidden(self): message = 'Test' + RefAttach('user_id_here') self.assertEqual(message.get_text(), 'Test') self.assertEqual(message.get_attachments(), [{ 'loci': [[4, 0]], 'type': 'mentions', 'user_ids': ['user_id_here'] }])
def test_visible(self): message = 'Test ' + RefAttach('user_id_here', '@all') self.assertEqual(message.get_text(), 'Test @all') self.assertEqual(message.get_attachments(), [{ 'loci': [[5, 4]], 'type': 'mentions', 'user_ids': ['user_id_here'] }])
def test_manual_creation(self): message = ComplexMessage(['Hello, ', RefAttach('user_id_here', '@world')]) self.assertEqual(message.get_text(), 'Hello, @world') self.assertEqual(message.get_attachments(), [{ 'loci': [[7, 6]], 'type': 'mentions', 'user_ids': ['user_id_here'] }])
def test_dynamic_creation(self): message = 'Hello, ' + RefAttach('user_id_here', '@world') self.assertEqual(message.get_text(), 'Hello, @world') self.assertEqual(message.get_attachments(), [{ 'loci': [[7, 6]], 'type': 'mentions', 'user_ids': ['user_id_here'] }])
def test_complex_message(self): message = ComplexMessage(['Hello, ', RefAttach('user_id_here', '@world')]) text, attachments = smart_split_complex_message(message) self.assertEqual(text, 'Hello, @world') self.assertEqual(attachments, [{ 'loci': [[7, 6]], 'type': 'mentions', 'user_ids': ['user_id_here'] }])
def test_hidden(self) -> None: message = "Test" + RefAttach("user_id_here") self.assertEqual(message.get_text(), "Test") self.assertEqual( message.get_attachments(), [{ "loci": [[4, 0]], "type": "mentions", "user_ids": ["user_id_here"] }], )
def test_visible(self) -> None: message = "Test " + RefAttach("user_id_here", "@all") self.assertEqual(message.get_text(), "Test @all") self.assertEqual( message.get_attachments(), [{ "loci": [[5, 4]], "type": "mentions", "user_ids": ["user_id_here"] }], )
def test_dynamic_creation(self) -> None: message = "Hello, " + RefAttach("user_id_here", "@world") self.assertEqual(message.get_text(), "Hello, @world") self.assertEqual( message.get_attachments(), [{ "loci": [[7, 6]], "type": "mentions", "user_ids": ["user_id_here"] }], )
def save_seats_message(self, message: Message): user_id_map = {m.user_id: m.nickname for m in self.bot.bot.group.members} attachments: List[RefAttach] = [] for user_id in message.favorited_by: if user_id in user_id_map: attachments.append(RefAttach(user_id, f'@{user_id_map[user_id]}')) if attachments: mes: Union[str, ComplexMessage] = "Save seats for:" for att in attachments: mes = mes + '\n ' + att self.bot.post_message(mes)
def test_manual_creation(self) -> None: message = ComplexMessage( ["Hello, ", RefAttach("user_id_here", "@world")]) self.assertEqual(message.get_text(), "Hello, @world") self.assertEqual( message.get_attachments(), [{ "loci": [[7, 6]], "type": "mentions", "user_ids": ["user_id_here"] }], )
def test_complex_message(self) -> None: message = ComplexMessage( ["Hello, ", RefAttach("user_id_here", "@world")]) text, attachments = smart_split_complex_message(message) self.assertEqual(text, "Hello, @world") self.assertEqual( attachments, [{ "loci": [[7, 6]], "type": "mentions", "user_ids": ["user_id_here"] }], )
def mars(bot: Bot, message: Message, chances: float = PICTURE_RESPONSE_CHANCE) -> bool: """ Sends a message about mars if a user posts an image """ for attachment in message.attachments: if attachment['type'] == 'image' and random.random() < chances: user_attach = RefAttach(message.user_id, f'@{message.name}') response = random.choice(PICTURE_RESPONSES) bot.post(response[:-1] + ", " + user_attach + response[-1]) return True return False
def get_quip(message: Message) -> Optional[Union[ComplexMessage, str]]: matches = [] for word in re.split(r'[^a-zA-Z]', message.text): if word.strip().lower() in matching_words: matches.append(word.strip().lower()) if matches: match = max(matches, key=str.__len__) quip = random.choice(list(quips.keys())) emoji = random.choice(quips[quip]) split_quip = quip.format(match=match).split('<person>') if len(split_quip) > 1: user_ref = RefAttach(message.user_id, f'@{message.name}') return split_quip[0] + user_ref + split_quip[1] + ' ' + emoji else: return split_quip[0] + ' ' + emoji return None
def test_mixing_together(self) -> None: message = (RefAttach("user1") + ImageAttach("http://image.url") + LocationAttach("home", 32, 83) + SplitAttach("token") + EmojiAttach(13, 9) + QueuedAttach("queue", "url") + LinkedImageAttach("linked_image_url")) self.assertEqual(message.get_text(), "hometoken\ufffdqueuelinked_image_url") self.assertEqual( message.get_attachments(), [ { "type": "mentions", "loci": [[0, 0]], "user_ids": ["user1"] }, { "type": "image", "url": "http://image.url" }, { "type": "location", "name": "home", "lat": 32, "long": 83 }, { "type": "split", "token": "token" }, { "type": "emoji", "charmap": [[13, 9]], "placeholder": "\ufffd" }, { "queues": ["url", "linked_image"], "type": "postprocessing" }, ], ) self.assertEqual(message.just_str(), "") self.assertEqual( str(message), "[R:, I:, L:home, S:token, E:�, Q: queue, Q: linked_image_url]", )
def on_fields_loaded(self): if self.text is None: self.text = "" from lowerpines.message import ComplexMessage, RefAttach self.complex_text = ComplexMessage('') doing_mentions = False for attachment in self.attachments: if attachment['type'] == 'mentions': doing_mentions = True prev_index = 0 for i in range(len(self.text)): for loci, user_id in zip(attachment['loci'], attachment['user_ids']): if loci[0] == i: self.complex_text += self.text[prev_index:loci[0]] + \ RefAttach(user_id, self.text[loci[0]:loci[0] + loci[1]]) prev_index = loci[0] + loci[1] self.complex_text = self.complex_text + self.text[prev_index:] if not doing_mentions: self.complex_text = ComplexMessage(self.text)
def save_saucer_id(bot: Bot, message: Message, match) -> None: """ Save a person's saucer ID, so we can lookup tasted beers later """ saucer_id = match.group('saucer_id') tasted_beers = get_tasted_brews(saucer_id) if not tasted_beers: bot.post(f"Hmmm, it looks like {saucer_id} isn't a valid Saucer ID.") return # Otherwise it's valid. Just update or create _, created = SaucerUser.objects.update_or_create(groupme_id=message.user_id, defaults={'saucer_id': saucer_id}) user_attach = RefAttach(message.user_id, f'@{message.name}') action = 'saved' if created else 'updated' bot.post("Thanks, " + user_attach + f"! I {action} your Saucer ID.")
def on_fields_loaded(self) -> None: if self.text is None: self.text = "" from lowerpines.message import ComplexMessage, RefAttach # noqa: F811 self.complex_text = ComplexMessage("") doing_mentions = False for attachment in self.attachments: if attachment["type"] == "mentions": doing_mentions = True prev_index = 0 for i in range(len(self.text)): for loci, user_id in zip(attachment["loci"], attachment["user_ids"]): if loci[0] == i: self.complex_text += self.text[ prev_index:loci[0]] + RefAttach( user_id, self.text[loci[0]:loci[0] + loci[1]]) prev_index = loci[0] + loci[1] self.complex_text = self.complex_text + self.text[prev_index:] if not doing_mentions: self.complex_text = ComplexMessage(self.text)
def test_forward_add(self) -> None: message = RefAttach("user_id", "@test") + ComplexMessage(", whats up?") self.assertEqual(message.get_text(), "@test, whats up?")
def test_str_func(self) -> None: message = "test str " + RefAttach("user_id", "with attachment") self.assertEqual( str(message), str(["test str ", RefAttach("user_id", "with attachment")]))
def get_member(bot: Bot, member_id: str) -> Union[RefAttach, None]: for member in bot.group.members: if member.user_id == member_id: return RefAttach(member_id, f'@{member.nickname}') return None