Disnake как сделать страницы в команде help?

Ссылка скопирована
1 ответ
@bot.command() async def help(ctx):     embed=disnake.Embed(     title="Список команд",     colour=000000)     embed.add_field(     name="Ban",     value="Заблокировать пользователя"     )     embed.add_field(     name="Unban",     value="Разблокировать пользователя по его ID"     )     embed.add_field(     name="Kick",     value="Выгнать пользователя с сервера"     )     embed.add_field(     name="Mute",     value="Заглушить пользователя"     )     embed.add_field(     name="Unmute",     value="Разглушить пользователя"     )     embed.add_field(     name="Muted",     value="Посмотреть список заглушённых пользователей"     )     embed.add_field(     name="Tempmute",     value="Заглушить пользователя на определённое время"     )     embed.add_field(     name="Reverse",     value="Перевернуть текст"     )     embed.add_field(     name="Serverinfo",     value="Посмотреть информацию о сервере"     )     embed.add_field(     name="Userinfo",     value="Посмотреть информацию о пользователе"     )     embed.add_field(     name="Emojiinfo",     value="Посмотреть информацию о эмодзи"     )     embed.add_field(     name="Botinfo",     value="Посмотреть информацию о боте"     )     embed.add_field(     name="Info",     value="Посмотреть информацию о ForzaBot"     )     embed.add_field(     name="Ping",     value="Узнать пинг бота"     )     embed.add_field(     name="Say",     value="Сказать от имени бота"     )     embed.add_field(     name="Addrole",      value="Выдать роль пользователю"     )     embed.add_field(     name="Removerole",     value="Убрать роль с пользователя"     )     embed.add_field(     name="8Ball",     value="Задать вопрос шару"     )     embed.add_field(     name="Clear",     value="Очистить количество сообщений"     )     embed.add_field(     name="Random",     value="Отправка случайных чисел"     )     embed.add_field(     name="Roleinfo",     value="Посмотреть информацию о роли"     )     embed.add_field(     name="Channelinfo",     value="Посмотреть информацию о канале"     )     embed.add_field(     name="Temprole",     value="Выдать временную роль"     )     embed.add_field(     name="Ownerinfo",     value="Посмотреть информацию о владельце бота"     )     await ctx.send(embed=embed)  @bot.command() async def help2(ctx):     embed=disnake.Embed(     title="Второй список команд",     colour=000000)     embed.add_field(     name="Lock",     value="Закрыть каналы"     )     embed.add_field(     name="Unlock",     value="Открыть доступ к каналам"     )     embed.add_field(     name="Info",     value="Показать подробную информацию о боте"     )     embed.add_field(     name="Quote",     value="Отправка случайной цитаты"     )     embed.add_field(     name="Avatar",     value="Показать аватар пользователя"     )     embed.add_field(     name="Voice_channelinfo",     value="Показать информацию о голосовом канале"     )     await ctx.send(embed=embed)

@bot.command() async def help(ctx): embed=disnake.Embed( title="Список команд", colour=000000) embed.add_field( name="Ban", value="Заблокировать пользователя" ) embed.add_field( name="Unban", value="Разблокировать пользователя по его ID" ) embed.add_field( name="Kick", value="Выгнать пользователя с сервера" ) embed.add_field( name="Mute", value="Заглушить пользователя" ) embed.add_field( name="Unmute", value="Разглушить пользователя" ) embed.add_field( name="Muted", value="Посмотреть список заглушённых пользователей" ) embed.add_field( name="Tempmute", value="Заглушить пользователя на определённое время" ) embed.add_field( name="Reverse", value="Перевернуть текст" ) embed.add_field( name="Serverinfo", value="Посмотреть информацию о сервере" ) embed.add_field( name="Userinfo", value="Посмотреть информацию о пользователе" ) embed.add_field( name="Emojiinfo", value="Посмотреть информацию о эмодзи" ) embed.add_field( name="Botinfo", value="Посмотреть информацию о боте" ) embed.add_field( name="Info", value="Посмотреть информацию о ForzaBot" ) embed.add_field( name="Ping", value="Узнать пинг бота" ) embed.add_field( name="Say", value="Сказать от имени бота" ) embed.add_field( name="Addrole", value="Выдать роль пользователю" ) embed.add_field( name="Removerole", value="Убрать роль с пользователя" ) embed.add_field( name="8Ball", value="Задать вопрос шару" ) embed.add_field( name="Clear", value="Очистить количество сообщений" ) embed.add_field( name="Random", value="Отправка случайных чисел" ) embed.add_field( name="Roleinfo", value="Посмотреть информацию о роли" ) embed.add_field( name="Channelinfo", value="Посмотреть информацию о канале" ) embed.add_field( name="Temprole", value="Выдать временную роль" ) embed.add_field( name="Ownerinfo", value="Посмотреть информацию о владельце бота" ) await ctx.send(embed=embed) @bot.command() async def help2(ctx): embed=disnake.Embed( title="Второй список команд", colour=000000) embed.add_field( name="Lock", value="Закрыть каналы" ) embed.add_field( name="Unlock", value="Открыть доступ к каналам" ) embed.add_field( name="Info", value="Показать подробную информацию о боте" ) embed.add_field( name="Quote", value="Отправка случайной цитаты" ) embed.add_field( name="Avatar", value="Показать аватар пользователя" ) embed.add_field( name="Voice_channelinfo", value="Показать информацию о голосовом канале" ) await ctx.send(embed=embed)

Как реализовать в одну большую страницу по нажатию на реакции для дискорд бота на библиотеке disnake в версии библиотеки disnake 2.9.1 на языке программировании python?

Дополнительно:

Ответы:

Разделения контента на страницы зовется пагинацией.
Встроенной в диснейк пагинации нет.
Писать ее на реакциях это очень плохое решение, пишите на кнопках, для них функционал значительно шире.

Код как это можно сделать

class Simple(disnake.ui.View):     """     Embed Paginator.      Parameters:     ----------     timeout: int         How long the Paginator should timeout in, after the last interaction. (In seconds) (Overrides default of 60)     PreviousButton: disnake.ui.Button         Overrides default previous button.     NextButton: disnake.ui.Button         Overrides default next button.     PageCounterStyle: disnake.ButtonStyle         Overrides default page counter style.     InitialPage: int         Page to start the pagination on.     """      def __init__(self, *,                  timeout: int = 60,                  PreviousButton: disnake.ui.Button = disnake.ui.Button(emoji=disnake.PartialEmoji(name="U000025c0")),                  NextButton: disnake.ui.Button = disnake.ui.Button(emoji=disnake.PartialEmoji(name="U000025b6")),                  PageCounterStyle: disnake.ButtonStyle = disnake.ButtonStyle.grey,                  InitialPage: int = 0) -> None:         self.PreviousButton = PreviousButton         self.NextButton = NextButton         self.PageCounterStyle = PageCounterStyle         self.InitialPage = InitialPage          self.pages = None         self.ctx = None         self.message = None         self.current_page = None         self.page_counter = None         self.total_page_count = None          super().__init__(timeout=timeout)      async def start(self, ctx: commands.Context, pages: list[disnake.Embed]):         self.pages = pages         self.total_page_count = len(pages)         self.ctx = ctx         self.current_page = self.InitialPage          self.PreviousButton.callback = self.previous_button_callback         self.NextButton.callback = self.next_button_callback          self.page_counter = SimplePaginatorPageCounter(style=self.PageCounterStyle,                                                        TotalPages=self.total_page_count,                                                        InitialPage=self.InitialPage)          self.add_item(self.PreviousButton)         self.add_item(self.page_counter)         self.add_item(self.NextButton)          self.message = await ctx.send(embed=self.pages[self.InitialPage], view=self)      async def previous(self):         if self.current_page == 0:             self.current_page = self.total_page_count - 1         else:             self.current_page -= 1          self.page_counter.label = f"{self.current_page + 1}/{self.total_page_count}"         await self.message.edit(embed=self.pages[self.current_page], view=self)      async def next(self):         if self.current_page == self.total_page_count - 1:             self.current_page = 0         else:             self.current_page += 1          self.page_counter.label = f"{self.current_page + 1}/{self.total_page_count}"         await self.message.edit(embed=self.pages[self.current_page], view=self)      async def next_button_callback(self, interaction: disnake.Interaction):         if interaction.user != self.ctx.author:             embed = disnake.Embed(description="You cannot control this pagination because you did not execute it.",                                   color=disnake.Colour.red())             return await interaction.response.send_message(embed=embed, ephemeral=True)         await interaction.response.defer()         await self.next()      async def previous_button_callback(self, interaction: disnake.Interaction):         if interaction.user != self.ctx.author:             embed = disnake.Embed(description="You cannot control this pagination because you did not execute it.",                                   color=disnake.Colour.red())             return await interaction.response.send_message(embed=embed, ephemeral=True)         await interaction.response.defer()         await self.previous()  class SimplePaginatorPageCounter(disnake.ui.Button):     def __init__(self, style: disnake.ButtonStyle, TotalPages, InitialPage):         super().__init__(label=f"{InitialPage + 1}/{TotalPages}", style=style, disabled=True)

class Simple(disnake.ui.View): """ Embed Paginator. Parameters: ---------- timeout: int How long the Paginator should timeout in, after the last interaction. (In seconds) (Overrides default of 60) PreviousButton: disnake.ui.Button Overrides default previous button. NextButton: disnake.ui.Button Overrides default next button. PageCounterStyle: disnake.ButtonStyle Overrides default page counter style. InitialPage: int Page to start the pagination on. """ def __init__(self, *, timeout: int = 60, PreviousButton: disnake.ui.Button = disnake.ui.Button(emoji=disnake.PartialEmoji(name="U000025c0")), NextButton: disnake.ui.Button = disnake.ui.Button(emoji=disnake.PartialEmoji(name="U000025b6")), PageCounterStyle: disnake.ButtonStyle = disnake.ButtonStyle.grey, InitialPage: int = 0) -> None: self.PreviousButton = PreviousButton self.NextButton = NextButton self.PageCounterStyle = PageCounterStyle self.InitialPage = InitialPage self.pages = None self.ctx = None self.message = None self.current_page = None self.page_counter = None self.total_page_count = None super().__init__(timeout=timeout) async def start(self, ctx: commands.Context, pages: list[disnake.Embed]): self.pages = pages self.total_page_count = len(pages) self.ctx = ctx self.current_page = self.InitialPage self.PreviousButton.callback = self.previous_button_callback self.NextButton.callback = self.next_button_callback self.page_counter = SimplePaginatorPageCounter(style=self.PageCounterStyle, TotalPages=self.total_page_count, InitialPage=self.InitialPage) self.add_item(self.PreviousButton) self.add_item(self.page_counter) self.add_item(self.NextButton) self.message = await ctx.send(embed=self.pages[self.InitialPage], view=self) async def previous(self): if self.current_page == 0: self.current_page = self.total_page_count - 1 else: self.current_page -= 1 self.page_counter.label = f"{self.current_page + 1}/{self.total_page_count}" await self.message.edit(embed=self.pages[self.current_page], view=self) async def next(self): if self.current_page == self.total_page_count - 1: self.current_page = 0 else: self.current_page += 1 self.page_counter.label = f"{self.current_page + 1}/{self.total_page_count}" await self.message.edit(embed=self.pages[self.current_page], view=self) async def next_button_callback(self, interaction: disnake.Interaction): if interaction.user != self.ctx.author: embed = disnake.Embed(description="You cannot control this pagination because you did not execute it.", color=disnake.Colour.red()) return await interaction.response.send_message(embed=embed, ephemeral=True) await interaction.response.defer() await self.next() async def previous_button_callback(self, interaction: disnake.Interaction): if interaction.user != self.ctx.author: embed = disnake.Embed(description="You cannot control this pagination because you did not execute it.", color=disnake.Colour.red()) return await interaction.response.send_message(embed=embed, ephemeral=True) await interaction.response.defer() await self.previous() class SimplePaginatorPageCounter(disnake.ui.Button): def __init__(self, style: disnake.ButtonStyle, TotalPages, InitialPage): super().__init__(label=f"{InitialPage + 1}/{TotalPages}", style=style, disabled=True)

Код как использовать

embeds = [disnake.Embed(title="First embed"),           disnake.Embed(title="Second embed"),           disnake.Embed(title="Third embed")]  await Simple().start(ctx, pages=embeds)

embeds = [disnake.Embed(title="First embed"), disnake.Embed(title="Second embed"), disnake.Embed(title="Third embed")] await Simple().start(ctx, pages=embeds)

  • fenrir, Хорошо, я всё понял, но как это будет выглядеть в файле main.py в команде help на библиотеке disnake?
  • Alexsey566, я приложил как вложить эмбеды
  • fenrir, всё равно непонятно, пожалуйста, напишите код без классов в файле main.py чтобы показать как будет выглядеть команда help в коде дискорд бота на библиотеке disnake
  • Alexsey566, умрете логику описывать.
  • fenrir, не умру :)
  • Alexsey566, значит делайте :)
Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Сергей Миронов Ответ

Для создания страницы справки в боте, использующем библиотеку Disnake, вы можете создать команду с именем "help", которая будет выводить информацию о доступных командах и их использовании. Вот пример того, как это можно сделать на языке программирования Python с использованием Disnake:

```python
import disnake
from disnake.ext import commands

bot = commands.Bot(command_prefix='!')

@bot.command()
async def help(ctx):
embed = disnake.Embed(
title="Справка по командам",
description="Список доступных команд:",
color=disnake.Color.blue()
)

for command in bot.commands:
embed.add_field(name=command.name, value=command.help, inline=False)

await ctx.send(embed=embed)

bot.run("YOUR_BOT_TOKEN")
```

В этом примере мы создаем команду "help", которая создает встроенное сообщение с информацией о доступных командах. Мы проходим по всем командам бота и добавляем их название и описание во встроенное сообщение.

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

Надеюсь, это поможет вам создать страницу справки в вашем боте на основе Disnake! Если у вас возникнут дополнительные вопросы, не стесняйтесь задавать.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно