Skip to content

Commit 49945a0

Browse files
authored
Merge pull request #126 from iqnite/py-cord-27
2 parents 359582e + 9a391c6 commit 49945a0

File tree

12 files changed

+90
-89
lines changed

12 files changed

+90
-89
lines changed

eggsplode/cards/bombs.py

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -86,16 +86,16 @@ async def radioeggtive(
8686
if timed_out:
8787
game.deck.insert(random.randint(0, len(game.deck)), "radioeggtive_face_up")
8888
await game.send(TextView("radioeggtive", game.current_player_id), interaction)
89-
else:
90-
view = DefuseView(
91-
game,
92-
lambda: radioeggtive_finish(game),
93-
card="radioeggtive_face_up",
94-
prev_card="radioeggtive",
95-
)
96-
if await view.skip_if_deck_empty():
97-
return
98-
await interaction.respond(view=view, ephemeral=True)
89+
return
90+
view = DefuseView(
91+
game,
92+
lambda: radioeggtive_finish(game),
93+
card="radioeggtive_face_up",
94+
prev_card="radioeggtive",
95+
)
96+
if await view.skip_if_deck_empty():
97+
return
98+
await interaction.respond(view=view, ephemeral=True)
9999

100100

101101
async def radioeggtive_face_up(

eggsplode/cards/future.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,8 @@ def create_selections(self):
8787
self.add_item(self.select_container)
8888
self.add_item(self.confirm_row)
8989

90-
async def finish(self, interaction=None):
90+
async def finish(self):
91+
await super().finish()
9192
await self.callback_action()
9293

9394
async def selection_callback(self, interaction: discord.Interaction):

eggsplode/cards/skip.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,17 +82,17 @@ def __init__(self, game: "Game"):
8282
self.add_item(self.dig_deeper_section)
8383

8484
async def finish(self, interaction: discord.Interaction | None = None):
85+
await super().finish()
8586
if not interaction:
8687
interaction = self.game.last_interaction
8788
if not interaction:
8889
raise ValueError("No last interaction set for the game.")
8990
_, hold = await self.game.draw_from(interaction)
90-
self.stop()
9191
if hold:
9292
await self.game.events.turn_end()
9393

9494
async def dig_deeper(self, interaction: discord.Interaction):
95-
self.stop()
95+
self.ignore_interactions()
9696
self.disable_all_items()
9797
await interaction.edit(view=self)
9898
await self.game.send(

eggsplode/core.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -428,10 +428,7 @@ async def send(
428428
self.last_interaction = interaction
429429
if self.last_interaction is None:
430430
raise ValueError("last_interaction is None")
431-
try:
432-
await self.last_interaction.response.send_message(view=view)
433-
except discord.errors.InteractionResponded:
434-
await self.last_interaction.followup.send(view=view)
431+
await self.last_interaction.respond(view=view)
435432
logger.debug("Game %s: Sent message: %s", self.id, view.copy_text())
436433

437434
@property

eggsplode/ui/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
Contains the views for the Eggsplode game UI.
33
"""
44

5-
from .base import BaseView, TextView
5+
from .base import BaseView, BaseGameView, TextView
66
from .nope import NopeView
77
from .play import PlayView
88
from .selections import SelectionView, ChoosePlayerView, DefuseView

eggsplode/ui/base.py

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,28 @@
1212

1313

1414
class BaseView(discord.ui.DesignerView):
15+
def __init__(self, *args, **kwargs):
16+
super().__init__(*args, **kwargs)
17+
self.is_ignoring_interactions = False
18+
19+
async def interaction_check(self, interaction: discord.Interaction) -> bool:
20+
return (
21+
await super().interaction_check(interaction)
22+
and not self.is_ignoring_interactions
23+
)
24+
25+
def ignore_interactions(self):
26+
self.is_ignoring_interactions = True
27+
28+
def allow_interactions(self):
29+
self.is_ignoring_interactions = False
30+
31+
32+
class BaseGameView(BaseView):
1533
def __init__(self, game: "Game", timeout=None):
1634
super().__init__(timeout=timeout, disable_on_timeout=True)
1735
self.game = game
18-
self.game.events.game_end += self.stop
36+
self.game.events.game_end += self.ignore_interactions
1937

2038
async def interaction_check(self, interaction: discord.Interaction) -> bool:
2139
if not await super().interaction_check(interaction):

eggsplode/ui/nope.py

Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,13 @@
66
from typing import Callable, Coroutine, TYPE_CHECKING
77
import discord
88
from eggsplode.strings import format_message
9-
from eggsplode.ui.base import BaseView, TextView
9+
from eggsplode.ui.base import BaseGameView, TextView
1010

1111
if TYPE_CHECKING:
1212
from eggsplode.core import Game
1313

1414

15-
class NopeView(BaseView):
15+
class NopeView(BaseGameView):
1616
def __init__(
1717
self,
1818
game: "Game",
@@ -32,7 +32,6 @@ def __init__(
3232
self.nope_callback_action = nope_callback_action
3333
self.nope_count = 0
3434
self.players_confirmed = set()
35-
self.disabled = False
3635
self.action_text_display = discord.ui.TextDisplay(message)
3736
self.add_item(self.action_text_display)
3837
self.timer_display = discord.ui.TextDisplay(self.timer_text)
@@ -74,23 +73,19 @@ def noped(self) -> bool:
7473
return self.nope_count % 2 == 1
7574

7675
async def on_timeout(self):
77-
try:
78-
await super().on_timeout()
79-
finally:
80-
if not self.disabled:
81-
self.disabled = True
82-
self.stop()
83-
if not self.noped and self.ok_callback_action:
84-
await self.ok_callback_action(None)
85-
else:
86-
await self.game.events.action_end()
76+
if not self.is_ignoring_interactions:
77+
self.ignore_interactions()
78+
if not self.noped and self.ok_callback_action:
79+
await self.ok_callback_action(None)
80+
else:
81+
await self.game.events.action_end()
8782

8883
async def interaction_check(self, interaction: discord.Interaction) -> bool:
8984
return (
9085
await super().interaction_check(interaction)
9186
and interaction.user is not None
9287
and interaction.user.id in self.game.players
93-
and not self.disabled
88+
and not self.is_ignoring_interactions
9489
)
9590

9691
def toggle_strike_through(self):
@@ -170,8 +165,7 @@ async def ok_callback(self, interaction: discord.Interaction):
170165

171166
async def finish_confirmation(self, interaction: discord.Interaction):
172167
self.game.last_interaction = interaction
173-
self.disabled = True
174-
self.stop()
168+
self.ignore_interactions()
175169
self.disable_all_items()
176170
self.remove_item(self.action_row)
177171
self.remove_item(self.timer_display)

eggsplode/ui/play.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,13 @@
55
from typing import TYPE_CHECKING
66
import discord
77
from eggsplode.strings import available_cards, MAX_COMPONENTS, format_message, replace_emojis
8-
from eggsplode.ui.base import TextView
8+
from eggsplode.ui.base import BaseView, TextView
99

1010
if TYPE_CHECKING:
1111
from eggsplode.core import Game
1212

1313

14-
class PlayView(discord.ui.DesignerView):
14+
class PlayView(BaseView):
1515
MAX_SECTIONS = (MAX_COMPONENTS - 5) // 3
1616

1717
def __init__(self, game: "Game", user_id: int):
@@ -34,7 +34,7 @@ def __init__(self, game: "Game", user_id: int):
3434
self.forward_button: discord.ui.Button | None = None
3535
self.page_number = 0
3636
self.update_sections()
37-
self.game.events.game_end += self.stop
37+
self.game.events.game_end += self.ignore_interactions
3838

3939
@property
4040
def playable(self) -> bool:
@@ -140,6 +140,6 @@ async def play_card(self, card: str, interaction: discord.Interaction):
140140
return
141141
self.game.action_id += 1
142142
self.action_id = self.game.action_id
143-
self.stop()
143+
self.ignore_interactions()
144144
await interaction.edit(view=self, delete_after=0)
145145
await self.game.play_callback(interaction, card)

eggsplode/ui/selections.py

Lines changed: 19 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,13 @@
66
import discord
77

88
from eggsplode.strings import format_message, tooltip
9+
from eggsplode.ui.base import BaseView
910

1011
if TYPE_CHECKING:
1112
from eggsplode.core import Game
1213

1314

14-
class SelectionView(discord.ui.DesignerView):
15+
class SelectionView(BaseView):
1516
def __init__(self, timeout: int = 20):
1617
super().__init__(timeout=timeout, disable_on_timeout=True)
1718
self.confirm_button = discord.ui.Button(
@@ -20,22 +21,20 @@ def __init__(self, timeout: int = 20):
2021
self.confirm_button.callback = self.confirm
2122

2223
async def on_timeout(self):
23-
try:
24-
await super().on_timeout()
25-
finally:
24+
if not self.is_ignoring_interactions:
2625
await self.finish()
2726

28-
async def finish(self, interaction: discord.Interaction | None = None):
29-
pass
27+
async def finish(self):
28+
self.ignore_interactions()
3029

3130
async def confirm(self, interaction: discord.Interaction):
3231
self.disable_all_items()
3332
await interaction.edit(view=self)
34-
self.stop()
35-
await self.finish(interaction)
33+
if not self.is_ignoring_interactions:
34+
await self.finish()
3635

3736

38-
class ChoosePlayerView(discord.ui.DesignerView):
37+
class ChoosePlayerView(BaseView):
3938
def __init__(
4039
self,
4140
game: "Game",
@@ -50,12 +49,11 @@ def __init__(
5049
self.callback_action = callback_action
5150
self.user_select = None
5251
self.action_row = None
53-
self.game.events.game_end += self.stop
52+
self.game.events.game_end += self.ignore_interactions
5453

5554
async def on_timeout(self):
56-
try:
57-
await super().on_timeout()
58-
finally:
55+
if not self.is_ignoring_interactions:
56+
self.ignore_interactions()
5957
await self.callback_action(self.eligible_players[0])
6058

6159
async def skip_if_single_option(self) -> bool:
@@ -86,7 +84,7 @@ async def create_user_selection(self):
8684
async def selection_callback(self, interaction: discord.Interaction):
8785
if not (interaction and self.user_select):
8886
return
89-
self.stop()
87+
self.ignore_interactions()
9088
self.disable_all_items()
9189
await interaction.edit(view=self, delete_after=0)
9290
if not isinstance(self.user_select.values[0], str):
@@ -110,21 +108,13 @@ def __init__(
110108
self.card_position = 0
111109
self.move_prompt_display = discord.ui.TextDisplay(self.move_prompt)
112110
self.add_item(self.move_prompt_display)
113-
self.top_button = discord.ui.Button(
114-
label="Top", style=discord.ButtonStyle.blurple, emoji="⏫"
115-
)
111+
self.top_button = discord.ui.Button(label="Top", emoji="⏫")
116112
self.top_button.callback = self.top
117-
self.move_up_button = discord.ui.Button(
118-
label="Move up", style=discord.ButtonStyle.blurple, emoji="⬆️"
119-
)
113+
self.move_up_button = discord.ui.Button(label="Move up", emoji="🔼")
120114
self.move_up_button.callback = self.move_up
121-
self.move_down_button = discord.ui.Button(
122-
label="Move down", style=discord.ButtonStyle.blurple, emoji="⬇️"
123-
)
115+
self.move_down_button = discord.ui.Button(label="Move down", emoji="🔽")
124116
self.move_down_button.callback = self.move_down
125-
self.bottom_button = discord.ui.Button(
126-
label="Bottom", style=discord.ButtonStyle.blurple, emoji="⏬"
127-
)
117+
self.bottom_button = discord.ui.Button(label="Bottom", emoji="⏬")
128118
self.bottom_button.callback = self.bottom
129119
self.move_action_row = discord.ui.ActionRow(
130120
self.top_button,
@@ -134,15 +124,16 @@ def __init__(
134124
self.confirm_button,
135125
)
136126
self.add_item(self.move_action_row)
137-
self.game.events.game_end += self.stop
127+
self.game.events.game_end += self.ignore_interactions
138128

139129
async def skip_if_deck_empty(self) -> bool:
140130
if len(self.game.deck) == 0:
141131
await self.finish()
142132
return True
143133
return False
144134

145-
async def finish(self, interaction=None):
135+
async def finish(self):
136+
await super().finish()
146137
self.game.deck.insert(self.card_position, self.card)
147138
await self.callback_action()
148139

0 commit comments

Comments
 (0)