categories.py 3.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. from typing import Callable
  2. from discord import Embed, Colour
  3. from functools import reduce
  4. from config import *
  5. class KgbCategory:
  6. def __init__(self, name: str, hidden=False) -> None:
  7. self._name = name
  8. self._hidden = hidden
  9. self._commands: set[str] = set()
  10. def getName(self) -> str: return self._name
  11. def getCommands(self) -> set[str]: return self._commands
  12. def isHidden(self) -> bool: return self._hidden
  13. def addCommand(self, command: str) -> None:
  14. self._commands.add(command)
  15. def intoEmbed(self, embed: Embed) -> Embed:
  16. embed.add_field(name=self._name, value=reduce(lambda v,e: f'{v} `{e}`', self._commands, 'Команды:'), inline=False)
  17. return embed
  18. def getData(self) -> tuple[str, str]:
  19. outCommands = ''
  20. for i, val in enumerate(sorted(self._commands)):
  21. outCommands = f'{outCommands} `{val}`\n' \
  22. if (i+1) % 5 == 0 \
  23. else f'{outCommands} `{val}`\n'
  24. return self._name, outCommands
  25. HELP_CATEGORIES = {
  26. 'info' : KgbCategory('📃 Просмотр информации'),
  27. 'fun' : KgbCategory('🎮 Развлечение'),
  28. 'neuro' : KgbCategory('🖥️ Нейросети'),
  29. 'api' : KgbCategory('🔑 Апи команды'),
  30. 'scratch' : KgbCategory('😺 Скретч'),
  31. 'music' : KgbCategory('🎵 Музыка'),
  32. 'rp' : KgbCategory('🎭 РП'),
  33. 'secret' : KgbCategory('☢️ Secret', hidden=True),
  34. 'moderation': KgbCategory('🛡️ Модерация'),
  35. 'config' : KgbCategory('⚙️ Конфигурации'),
  36. 'misc' : KgbCategory('🛠 Остальное'),
  37. }
  38. def helpCategory(categoryName: str) -> Callable:
  39. def helpFunc(func: Callable) -> Callable:
  40. if categoryName not in HELP_CATEGORIES:
  41. raise ValueError(f'Category {categoryName} is not defined!')
  42. HELP_CATEGORIES[categoryName].addCommand(func.__name__)
  43. return func
  44. return helpFunc
  45. def buildHelpEmbed() -> Embed:
  46. emb = Embed(title="Категории команд:", color=Colour(0x000000))
  47. for i, categ in enumerate(filter(lambda v: not v.isHidden(),HELP_CATEGORIES.values())):
  48. catName, _ = categ.getData()
  49. emb.add_field(name=f'{i+1} - {catName}', value='', inline=False)
  50. emb.add_field(name="Что бы узнать команды из категории, \nНапишите:", value="`kgb!help (цифра категории)`", inline=False)
  51. emb.add_field(name="Поддержать бота на бусти можно тут:", value=f"[Ваша поддержка очень важна для нас!]({boostyURL})", inline=False)
  52. emb.set_thumbnail(url=tumbaYUMBA)
  53. emb.set_footer(text="Soviet WorkShop © 2023", icon_url=avaURL)
  54. return emb
  55. def buildCategoryEmbeds() -> tuple[list[Embed], dict[str, Embed]]:
  56. def addEmbed(categ: KgbCategory) -> Embed:
  57. emb = Embed(title=f"Категория: {categ.getName()}", color=Colour(0x000000))
  58. emb.add_field(name="Команды:", value=categ.getData()[1], inline=False)
  59. emb.add_field(name="Что бы узнать, что делает команда, \nНапишите:", value="`kgb!help (команда)`", inline=False)
  60. emb.set_thumbnail(url=tumbaYUMBA)
  61. emb.set_footer(text="Soviet WorkShop © 2023", icon_url=avaURL)
  62. return emb
  63. embs = [addEmbed(categ) for categ in filter(lambda v: not v.isHidden(), HELP_CATEGORIES.values())]
  64. embsHidden = {val: addEmbed(categ) for val, categ in HELP_CATEGORIES.items()}
  65. return embs, embsHidden