110 lines
2.6 KiB
Python
110 lines
2.6 KiB
Python
import asyncio
|
|
import logging
|
|
from typing import Optional
|
|
|
|
import discord
|
|
from discord.ext import commands as cmds
|
|
from discord import app_commands as appcmds
|
|
|
|
from meta import LionBot, LionCog, LionContext
|
|
|
|
from utils import ui
|
|
|
|
from . import babel
|
|
|
|
from .shops.colours import ColourShop
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
_p = babel._p
|
|
|
|
|
|
class Shopping(LionCog):
|
|
Shops = [ColourShop]
|
|
|
|
def __init__(self, bot: LionBot):
|
|
self.bot = bot
|
|
self.data = None
|
|
self.shops = []
|
|
|
|
async def cog_load(self):
|
|
for Shop in self.Shops:
|
|
shop = Shop(self.bot, self.data)
|
|
await shop.load_into(self)
|
|
self.shops.append(shop)
|
|
|
|
async def cog_unload(self):
|
|
for shop in self.shops:
|
|
await shop.unload()
|
|
|
|
@cmds.hybrid_group(name='editshop')
|
|
async def editshop_group(self, ctx: LionContext):
|
|
return
|
|
|
|
@cmds.hybrid_group(name='shop')
|
|
async def shop_group(self, ctx: LionContext):
|
|
return
|
|
|
|
@shop_group.command(name='open')
|
|
async def shop_open_cmd(self, ctx: LionContext):
|
|
"""
|
|
Opens the shop UI for the current guild.
|
|
"""
|
|
...
|
|
|
|
|
|
class StoreManager(ui.LeoUI):
|
|
def __init__(self, bot, data, shops):
|
|
self.bot = bot
|
|
self.data = data
|
|
self.shops = shops
|
|
|
|
self.page_num = 0
|
|
|
|
self._original: Optional[discord.Interaction] = None
|
|
|
|
self._store_row = self.make_buttons()
|
|
self._widgets = self.prepare_widgets()
|
|
|
|
async def redraw(self):
|
|
"""
|
|
Ask the current shop widget to redraw.
|
|
"""
|
|
...
|
|
|
|
def make_buttons(self):
|
|
"""
|
|
Make a tuple of shop buttons.
|
|
|
|
If there is only one shop, return an empty tuple.
|
|
"""
|
|
if len(self.shops) <= 1:
|
|
return ()
|
|
buttons = []
|
|
for i, shop in enumerate(self.shops):
|
|
@ui.AButton(label=shop.name)
|
|
async def pressed_switch_shop(press: discord.Interaction, pressed):
|
|
await press.response.defer()
|
|
await self.change_page(i)
|
|
buttons.append(pressed_switch_shop)
|
|
return tuple(buttons)
|
|
|
|
def prepare_widgets(self):
|
|
widgets = []
|
|
for shop in self.shops:
|
|
widget = shop.make_widget()
|
|
# TODO: Update this when we have a UILayout class
|
|
# widget.layout.set_row('shops', self._store_row, affinity=1)
|
|
widget.shop_row = self._store_row
|
|
widgets.append(widget)
|
|
return widgets
|
|
|
|
async def change_page(self, i):
|
|
"""
|
|
Change to the given page number.
|
|
"""
|
|
...
|
|
|
|
async def run(self, interaction):
|
|
...
|