forked from cswimr/SeaCogs
feat(nerdify): introduced cog
This commit is contained in:
parent
db85e21b32
commit
a759cf2a49
3 changed files with 69 additions and 0 deletions
5
nerdify/__init__.py
Normal file
5
nerdify/__init__.py
Normal file
|
@ -0,0 +1,5 @@
|
|||
from .nerdify import Nerdify
|
||||
|
||||
|
||||
async def setup(bot):
|
||||
await bot.add_cog(Nerdify(bot))
|
10
nerdify/info.json
Normal file
10
nerdify/info.json
Normal file
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"author" : ["SeaswimmerTheFsh"],
|
||||
"install_msg" : "Thank you for installing Nerdify!\nYou can find the source code of this cog [here](https://coastalcommits.com/SeaswimmerTheFsh/SeaCogs).",
|
||||
"name" : "Nerdify",
|
||||
"short" : "Nerdify your text!",
|
||||
"description" : "Nerdify your text!",
|
||||
"end_user_data_statement" : "This cog does not store end user data.",
|
||||
"hidden": true,
|
||||
"disabled": true
|
||||
}
|
54
nerdify/nerdify.py
Normal file
54
nerdify/nerdify.py
Normal file
|
@ -0,0 +1,54 @@
|
|||
import asyncio
|
||||
from contextlib import suppress
|
||||
from typing import Any, Optional
|
||||
|
||||
import discord
|
||||
from redbot.core import commands
|
||||
from redbot.core.utils import common_filters
|
||||
|
||||
|
||||
class Nerdify(commands.Cog):
|
||||
"""Nerdify your text."""
|
||||
def __init__(self, bot):
|
||||
self.bot = bot
|
||||
|
||||
@commands.command(aliases=["nerd"])
|
||||
async def nerdify(self, ctx: commands.Context, *, text: Optional[str] = None) -> None:
|
||||
"""Uwuize the replied to message, previous message, or your own text."""
|
||||
if not text:
|
||||
if hasattr(ctx.message, "reference") and ctx.message.reference:
|
||||
with suppress(
|
||||
discord.Forbidden, discord.NotFound, discord.HTTPException
|
||||
):
|
||||
message_id = ctx.message.reference.message_id
|
||||
if message_id:
|
||||
text = (await ctx.fetch_message(message_id)).content
|
||||
if not text:
|
||||
messages = [message async for message in ctx.channel.history(limit=2)]
|
||||
# [0] is the command, [1] is the message before the command
|
||||
text = messages[1].content or "I can't translate that!"
|
||||
await type_message(
|
||||
ctx.channel,
|
||||
nerdify_text(text),
|
||||
allowed_mentions=discord.AllowedMentions(
|
||||
everyone=False, users=False, roles=False
|
||||
),
|
||||
)
|
||||
|
||||
def nerdify_text(self, text: str) -> str:
|
||||
"""Convert text to nerd speak."""
|
||||
return f"\"{text}\" 🤓"
|
||||
|
||||
async def type_message(
|
||||
destination: discord.abc.Messageable, content: str, **kwargs: Any # noqa: ANN401
|
||||
) -> discord.Message | None:
|
||||
"""Simulate typing and sending a message to a destination.
|
||||
|
||||
Will send a typing indicator, wait a variable amount of time based on the length
|
||||
of the text (to simulate typing speed), then send the message.
|
||||
"""
|
||||
content = common_filters.filter_urls(content)
|
||||
with suppress(discord.HTTPException):
|
||||
async with destination.typing():
|
||||
await asyncio.sleep(max(0.25, min(2.5, len(content) * 0.01)))
|
||||
return await destination.send(content=content, **kwargs)
|
Loading…
Reference in a new issue