コード例 #1
0
ファイル: help.py プロジェクト: norinorin/nokari
 def common_command_formatting(context: Context, embed: hikari.Embed,
                               command: commands.Command) -> None:
     embed.title = CustomHelp.get_command_signature(command)
     embed.description = inspect.getdoc(
         command.callback) or "No help found..."
     if not isinstance(command, commands.Group):
         embed.footer.text = "Got confused? Be sure to join the support server!"  # type: ignore
コード例 #2
0
ファイル: paginator.py プロジェクト: norinorin/nokari
def _handle_local_attachment(embed: hikari.Embed) -> None:
    """
    We've sent the attachments along with the components.
    So, we just need to refer to them using the `attachment://` format.
    This is just a hacky workaround for now.
    """
    if (url := str(embed.image)).startswith("attachment://"):
        embed.set_image(hikari.URL(url))
コード例 #3
0
ファイル: errors.py プロジェクト: norinorin/nokari
 def handle_command_is_on_cooldown(
     _ctx: Context,
     error: lightbulb.errors.CommandIsOnCooldown,
     embed: hikari.Embed,
 ) -> None:
     """Handles CommandIsOnCooldown error."""
     embed.description = "You're on cooldown"
     embed.set_footer(
         text=f"Please try again in {round(error.retry_in, 2)} seconds."
     )
コード例 #4
0
ファイル: errors.py プロジェクト: norinorin/nokari
 def handle_not_enough_arguments(
     ctx: Context,
     error: lightbulb.errors.NotEnoughArguments,
     embed: hikari.Embed,
 ) -> None:
     """Handles NotEnoughArguments error."""
     embed.description = "Please pass in the required argument."
     embed.add_field(
         name="Usage:",
         value=f"`{ctx.prefix}{ctx.bot.help_command.get_command_signature(error.command)}`",
     )
コード例 #5
0
ファイル: errors.py プロジェクト: norinorin/nokari
 def handle_converter_failure(
     _ctx: Context,
     error: lightbulb.errors.ConverterFailure,
     embed: hikari.Embed,
 ) -> None:
     """Handles ConverterFailure error."""
     embed.description = error.text
コード例 #6
0
ファイル: errors.py プロジェクト: norinorin/nokari
 def handle_command_invocation_error(
     ctx: Context,
     error: lightbulb.errors.CommandInvocationError,
     embed: hikari.Embed,
 ) -> None:
     """Handles CommandInvocationError error."""
     embed.description = str(error.original)
コード例 #7
0
ファイル: errors.py プロジェクト: norinorin/nokari
 def handle_missing_required_permission(
     _ctx: Context,
     error: lightbulb.errors.MissingRequiredPermission,
     embed: hikari.Embed,
 ) -> None:
     """Handles MissingRequiredPermissions error."""
     perms = ", ".join(
         i.replace("_", " ").lower() for i in str(error.permissions).split("|")
     )
     plural = f"permission{'s' * (len(error.permissions) > 1)}"
     embed.description = f"You're missing {perms} {plural} to invoke this command."
コード例 #8
0
ファイル: events.py プロジェクト: norinorin/nokari
    async def execute_guild_webhook(self, guild: GatewayGuild | None,
                                    color: Color, suffix: str) -> None:
        embed = Embed(
            title=guild.name if guild else "Unknown guild",
            description=
            f"I'm now in {plural(len(self.bot.cache.get_guilds_view())):server,}",
            color=color,
        )

        if guild:
            (embed.add_field(
                "Owner:",
                str(
                    guild.get_member(guild.owner_id)
                    or await self.bot.rest.fetch_user(guild.owner_id)),
            ).add_field("Member count:",
                        str(guild.member_count
                            or 0)).add_field("ID:", str(guild.id)))

        await self.execute_webhook(embed=embed,
                                   username=f"{self.bot.get_me()} {suffix}")
コード例 #9
0
ファイル: errors.py プロジェクト: norinorin/nokari
 def handle_bot_missing_required_permission(
     _ctx: Context,
     error: lightbulb.errors.BotMissingRequiredPermission,
     embed: hikari.Embed,
 ) -> None:
     """Handles BotMissingPermission error."""
     perms = ", ".join(
         i.replace("_", " ").lower() for i in str(error.permissions).split("|")
     )
     embed.description = (
         f"I'm missing {perms} permission{'s' * (len(error.permissions) > 1)}."
     )
コード例 #10
0
ファイル: commands.py プロジェクト: GodEmpressVerin/requiem
def generate_alliance_embed(alliance: dict, embed: hikari.Embed) -> None:
    acr = f" ({alliance['acronym']})" if alliance["acronym"] else ""
    header = f"[{alliance['name']}{acr}]({helpers.ALLIANCE_URL}{alliance['id']})"

    if alliance["irclink"]:
        header += f" - [Discord]({alliance['irclink']})"

    embed.description = header

    embed.add_field(name="Score", value=f"{alliance['score']:,}", inline=True)
    embed.add_field(name="Color", value=alliance["color"].title(), inline=True)
    embed.add_field(name="Members",
                    value=str(len(alliance["nations"])),
                    inline=True)

    cities = 0
    soldiers = 0
    tanks = 0
    aircraft = 0
    ships = 0
    missiles = 0
    nukes = 0

    for nation in alliance["nations"]:
        cities += nation["num_cities"]
        soldiers += nation["soldiers"]
        tanks += nation["tanks"]
        aircraft += nation["aircraft"]
        ships += nation["ships"]
        missiles += nation["missiles"]
        nukes += nation["nukes"]

    embed.add_field(name="Soldiers",
                    value=f"{soldiers:,}/{15000 * cities:,}",
                    inline=True)
    embed.add_field(name="Tanks",
                    value=f"{tanks:,}/{1250 * cities:,}",
                    inline=True)
    embed.add_field(name="Aircraft",
                    value=f"{aircraft:,}/{75 * cities:,}",
                    inline=True)
    embed.add_field(name="Ships",
                    value=f"{ships:,}/{15 * cities:,}",
                    inline=True)
    embed.add_field(name="Missiles", value=f"{missiles:,}", inline=True)
    embed.add_field(name="Nukes", value=f"{nukes:,}", inline=True)
    embed.set_thumbnail(alliance["flag"])
コード例 #11
0
ファイル: events.py プロジェクト: norinorin/nokari
class Events(plugins.Plugin):
    """
    A plugin that handles events.

    This plugin will process commands on message edits
    and delete the responses if the original messages were deleted.
    """
    def __init__(self, bot: Bot):
        super().__init__()
        self.bot = bot

        if GUILD_LOGS_WEBHOOK_URL:
            webhook_id, webhook_token = GUILD_LOGS_WEBHOOK_URL.strip(
                "/").split("/")[-2:]
            self.execute_webhook = partial(self.bot.rest.execute_webhook,
                                           int(webhook_id), webhook_token)

            for event_type, callback in self.optional_events:
                bot.subscribe(event_type, callback)

    @property
    def optional_events(
        self,
    ) -> tuple[tuple[typing.Type[hikari.Event], typing.Callable[
            ..., typing.Awaitable[None]]], ..., ]:
        return (
            (GuildJoinEvent, self.on_guild_join),
            (GuildLeaveEvent, self.on_guild_leave),
        )

    def plugin_remove(self) -> None:
        if GUILD_LOGS_WEBHOOK_URL:
            for event_type, callback in self.optional_events:
                self.bot.unsubscribe(event_type, callback)

    async def handle_ping(self, message: Message) -> None:

        if not (me := self.bot.get_me()) or message.content not in (
                f"<@{me.id}>",
                f"<@!{me.id}>",
        ):
            return

        ctx = self.bot.get_context(
            message,
            message.content,
            invoked_with="prefix",
            invoked_command=self.bot.get_command("prefix"),
        )

        if not self.bot.pool:
            embed = Embed(
                title="Prefixes",
                description=
                f"Default prefixes: {', '.join(Config.format_prefixes(self.bot.default_prefixes))}",
            )
            await ctx.respond(embed=embed)
            return

        with suppress(errors.CommandIsOnCooldown):
            return await self.bot.get_command("prefix").invoke(ctx)