Skip to content

Commit dd2c16f

Browse files
authored
silly code thank u plun
1 parent 5608013 commit dd2c16f

File tree

2 files changed

+19
-1
lines changed

2 files changed

+19
-1
lines changed

discord/ui/container.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,9 +85,11 @@ def __init__(
8585
item: Item = func.__discord_ui_model_type__(
8686
**func.__discord_ui_model_kwargs__
8787
)
88-
item.callback = partial(func, self.view, item)
8988
if self.view:
89+
item.callback = partial(func, self.view, item)
9090
setattr(self.view, func.__name__, item)
91+
else:
92+
item._tmp_func = func
9193
self.add_item(item)
9294
for i in items:
9395
self.add_item(i)
@@ -252,6 +254,10 @@ def colour(self, value: int | Colour | None): # type: ignore
252254
def view(self, value):
253255
self._view = value
254256
for item in self.items:
257+
if getattr(item, "_tmp_func", None):
258+
item.callback = partial(item._tmp_func, self.view, item)
259+
setattr(self.view, item._tmp_func.__name__, item)
260+
delattr(item, "_tmp_func")
255261
item._view = value
256262

257263
@property

discord/ui/view.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -336,6 +336,8 @@ def add_item(self, item: Item) -> None:
336336
self.__weights.add_item(item)
337337

338338
item._view = self
339+
if hasattr(item, "items"):
340+
item.view = self
339341
self.children.append(item)
340342

341343
def remove_item(self, item: Item) -> None:
@@ -647,6 +649,16 @@ def add_view(self, view: View, message_id: int | None = None):
647649
for item in view.children:
648650
if item.is_dispatchable():
649651
self._views[(item.type.value, message_id, item.custom_id)] = (view, item) # type: ignore
652+
elif hasattr(item, "items"):
653+
for sub_item in item.items:
654+
if sub_item.is_dispatchable():
655+
self._views[(sub_item.type.value, message_id, sub_item.custom_id)] = (view, sub_item)
656+
elif hasattr(item, "accessory"):
657+
if sub_item.accessory.is_dispatchable():
658+
self._views[(sub_item.accessory.type.value, message_id, sub_item.accessory.custom_id)] = (view, sub_item.accessory)
659+
elif hasattr(item, "accessory"):
660+
if item.accessory.is_dispatchable():
661+
self._views[(item.accessory.type.value, message_id, item.accessory.custom_id)] = (view, item.accessory)
650662

651663
if message_id is not None:
652664
self._synced_message_views[message_id] = view

0 commit comments

Comments
 (0)