mirror of https://github.com/stijndcl/didier
				
				
				
			
						commit
						3d429f21cc
					
				|  | @ -13,6 +13,7 @@ from didier.data.apis.xkcd import fetch_xkcd_post | |||
| from didier.exceptions.no_match import expect | ||||
| from didier.menus.memes import MemeSource | ||||
| from didier.utils.discord import constants | ||||
| from didier.utils.types.string import mock | ||||
| from didier.views.modals import GenerateMeme | ||||
| 
 | ||||
| 
 | ||||
|  | @ -133,6 +134,30 @@ class Fun(commands.Cog): | |||
|         """Autocompletion for the 'template'-parameter""" | ||||
|         return self.client.database_caches.memes.get_autocomplete_suggestions(current) | ||||
| 
 | ||||
|     @app_commands.command() | ||||
|     @app_commands.describe(message="The text to convert.") | ||||
|     async def mock(self, interaction: discord.Interaction, message: str): | ||||
|         """Mock a message. | ||||
| 
 | ||||
|         This returns the mocked version ephemerally so that you can copy-paste it easily, | ||||
|         instead of the old version where Didier would send a public message. | ||||
| 
 | ||||
|         The mocked message escapes all Markdown syntax. | ||||
|         """ | ||||
|         await interaction.response.defer(ephemeral=True) | ||||
| 
 | ||||
|         # Nitro users can send longer messages that Didier can't repeat back to them | ||||
|         if len(message) > constants.Limits.MESSAGE_LENGTH: | ||||
|             return await interaction.followup.send("That message is too long.") | ||||
| 
 | ||||
|         message = discord.utils.escape_markdown(message) | ||||
| 
 | ||||
|         # Escaping md syntax can make the message longer than the limit | ||||
|         if len(message) > constants.Limits.MESSAGE_LENGTH: | ||||
|             return await interaction.followup.send("Because of Markdown syntax escaping, that message is too long.") | ||||
| 
 | ||||
|         return await interaction.followup.send(mock(message)) | ||||
| 
 | ||||
|     @commands.hybrid_command(name="xkcd") | ||||
|     @app_commands.rename(comic_id="id") | ||||
|     async def xkcd(self, ctx: commands.Context, comic_id: Optional[int] = None): | ||||
|  |  | |||
|  | @ -1,8 +1,9 @@ | |||
| import math | ||||
| import random | ||||
| import re | ||||
| from typing import Optional, Union | ||||
| 
 | ||||
| __all__ = ["abbreviate", "leading", "pluralize", "re_find_all", "re_replace_with_list", "get_edu_year_name"] | ||||
| __all__ = ["abbreviate", "leading", "mock", "pluralize", "re_find_all", "re_replace_with_list", "get_edu_year_name"] | ||||
| 
 | ||||
| 
 | ||||
| def abbreviate(text: str, max_length: int) -> str: | ||||
|  | @ -38,6 +39,28 @@ def leading(character: str, string: str, target_length: Optional[int] = 2) -> st | |||
|     return (frequency * character) + string | ||||
| 
 | ||||
| 
 | ||||
| def mock(string: str) -> str: | ||||
|     """Mock an input string | ||||
| 
 | ||||
|     The result of this is comparable to the Mocking Spongebob memes | ||||
|     """ | ||||
|     replacements = {"a": "4", "b": "8", "e": "3", "i": "1", "o": "0", "s": "5"} | ||||
|     result_string = "" | ||||
| 
 | ||||
|     for letter in string.lower(): | ||||
|         # Letter should be mocked | ||||
|         if letter.isalpha() and random.random() < 0.5: | ||||
|             # Use replacement if it exists | ||||
|             if letter in replacements and random.random() < 0.5: | ||||
|                 result_string += replacements[letter] | ||||
|             else: | ||||
|                 result_string += letter.upper() | ||||
|         else: | ||||
|             result_string += letter | ||||
| 
 | ||||
|     return result_string | ||||
| 
 | ||||
| 
 | ||||
| def pluralize(word: str, amount: int, plural_form: Optional[str] = None) -> str: | ||||
|     """Turn a word into plural""" | ||||
|     if amount == 1: | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue