Extra storage #2

Open
opened 2025-07-19 18:08:56 +04:00 by Milinuri Nirvalen · 0 comments

Прямо сейчас реализовано хранилище на уровне бота, это так называемый PluginStorage. По аналогии можно реализовать подобные хранилища для:

  • пользователя.
  • Канала.
  • Сервера.

Подобными хранилищами смогут пользоваться все плагины. Их API должен быть подобен PluginStoage.
Они позволят сделать бота более универсальным для нескольких серверов, а не только для Salor; land.

Пример использования

На примере расширения welcome.

Объявление:

class WelcomeConfig(GuildStorage):
    """Пример использования хранилища для плагина."""

    listen_guild: int
    welcome_channel: int
    welcome_role: int | None = None

Использование:

@plugin.listen(hikari.MemberCreateEvent)
@plugin.inject_dependencies()
async def on_join(
    event: hikari.MemberCreateEvent, config: WelcomeConfig = arc.inject()
) -> None:
    """Когда кто-то заходит на сервере."""
    if event.user.is_bot or event.guild_id != config.listen_guild:
        return

    if config.welcome_role is not None:
        await event.member.add_role(config.welcome_role)

    emb = hikari.Embed(
        title="Добро пожаловать.",
        description=f"Мы рабы приветствовать {event.member.mention}!",
        color=hikari.Color(0x99FFCC),
    )
    emb.set_thumbnail(event.member.make_avatar_url())
    await event.app.rest.create_message(config.welcome_channel, emb)

Прямо сейчас реализовано хранилище на уровне бота, это так называемый `PluginStorage`. По аналогии можно реализовать подобные хранилища для: - [ ] пользователя. - [ ] Канала. - [ ] Сервера. Подобными хранилищами смогут пользоваться все плагины. Их API должен быть подобен `PluginStoage`. Они позволят сделать бота **более универсальным** для нескольких серверов, а не только для Salor; land. ## Пример использования На примере расширения `welcome`. Объявление: ```py class WelcomeConfig(GuildStorage): """Пример использования хранилища для плагина.""" listen_guild: int welcome_channel: int welcome_role: int | None = None ``` Использование: ```py @plugin.listen(hikari.MemberCreateEvent) @plugin.inject_dependencies() async def on_join( event: hikari.MemberCreateEvent, config: WelcomeConfig = arc.inject() ) -> None: """Когда кто-то заходит на сервере.""" if event.user.is_bot or event.guild_id != config.listen_guild: return if config.welcome_role is not None: await event.member.add_role(config.welcome_role) emb = hikari.Embed( title="Добро пожаловать.", description=f"Мы рабы приветствовать {event.member.mention}!", color=hikari.Color(0x99FFCC), ) emb.set_thumbnail(event.member.make_avatar_url()) await event.app.rest.create_message(config.welcome_channel, emb) ```
Milinuri Nirvalen added this to the idea milestone 2025-07-19 18:09:52 +04:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
chio/cord#2
No description provided.