summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimponic <loganhunt@simponic.xyz>2023-02-01 17:36:39 -0700
committerGitHub <noreply@github.com>2023-02-01 17:36:39 -0700
commita26256700d93392dfc92bfc6dc6842dac842cc15 (patch)
treeb4a298d080dc13ed839f9152f8ad3f8ec6d58d32
parente05a6d36bb62dae878be254416e7652995e94602 (diff)
downloadchessh-a26256700d93392dfc92bfc6dc6842dac842cc15.tar.gz
chessh-a26256700d93392dfc92bfc6dc6842dac842cc15.zip
Do not send notifications when game is over & fix promotion screen (#15)
-rw-r--r--lib/chessh/discord/notifier.ex32
-rw-r--r--lib/chessh/ssh/client/game/game.ex26
2 files changed, 30 insertions, 28 deletions
diff --git a/lib/chessh/discord/notifier.ex b/lib/chessh/discord/notifier.ex
index 683519e..6d7bd46 100644
--- a/lib/chessh/discord/notifier.ex
+++ b/lib/chessh/discord/notifier.ex
@@ -55,28 +55,26 @@ defmodule Chessh.DiscordNotifier do
|> Keyword.take([:game_move_notif_delay_ms, :discord_game_move_notif_webhook])
|> Keyword.values()
- case Repo.get(Game, game_id) do
- nil ->
- nil
-
- game ->
- %Game{
- dark_player: %Player{discord_id: dark_player_discord_id},
- light_player: %Player{discord_id: light_player_discord_id},
- turn: turn,
- updated_at: last_updated,
- moves: move_count,
- status: status
- } = Repo.preload(game, [:dark_player, :light_player])
-
+ case Repo.get(Game, game_id) |> Repo.preload([:dark_player, :light_player]) do
+ %Game{
+ dark_player: %Player{discord_id: dark_player_discord_id},
+ light_player: %Player{discord_id: light_player_discord_id},
+ turn: turn,
+ updated_at: last_updated,
+ moves: move_count,
+ status: :continue
+ } ->
delta_t = NaiveDateTime.diff(NaiveDateTime.utc_now(), last_updated, :millisecond)
- if delta_t >= min_delta_t && status == :continue do
+ if delta_t >= min_delta_t do
post_discord(
discord_game_move_notif_webhook,
"<@#{if turn == :light, do: light_player_discord_id, else: dark_player_discord_id}> it is your move in Game #{game_id} (move #{move_count})."
)
end
+
+ _ ->
+ nil
end
end
@@ -99,10 +97,10 @@ defmodule Chessh.DiscordNotifier do
message =
case {is_nil(light_player), is_nil(dark_player)} do
{true, false} ->
- "#{pingable_mention}, <@#{dark_player.discord_id}> is looking for an opponent to play as light in Game #{game_id}"
+ "#{pingable_mention}, <@#{dark_player.discord_id}> is looking for an opponent to play with light pieces in Game #{game_id}"
{false, true} ->
- "#{pingable_mention}, <@#{light_player.discord_id}> is looking for an opponent to play as dark in Game #{game_id}"
+ "#{pingable_mention}, <@#{light_player.discord_id}> is looking for an opponent to play with dark pieces in Game #{game_id}"
_ ->
false
diff --git a/lib/chessh/ssh/client/game/game.ex b/lib/chessh/ssh/client/game/game.ex
index fc48d6f..d6b0b5b 100644
--- a/lib/chessh/ssh/client/game/game.ex
+++ b/lib/chessh/ssh/client/game/game.ex
@@ -262,22 +262,21 @@ defmodule Chessh.SSH.Client.Game do
do: Renderer.flip({new_cursor.y, new_cursor.x}),
else: {new_cursor.y, new_cursor.x}
- piece_type =
- :binbo_position.get_piece(
- :binbo_board.notation_to_index(Renderer.to_chess_coord(maybe_flipped_cursor_tup)),
- :binbo.game_state(binbo_pid)
- )
-
{new_move_from, move_to} =
if action == :return do
coords = {new_cursor.y, new_cursor.x}
case move_from do
nil ->
- if piece_type != 0 do
- {coords, nil}
- else
+ if :binbo_position.get_piece(
+ :binbo_board.notation_to_index(
+ Renderer.to_chess_coord(maybe_flipped_cursor_tup)
+ ),
+ :binbo.game_state(binbo_pid)
+ ) == 0 do
{move_from, nil}
+ else
+ {coords, nil}
end
_ ->
@@ -307,10 +306,15 @@ defmodule Chessh.SSH.Client.Game do
})
if move_from && move_to do
- maybe_flipped_to = if flipped, do: Renderer.flip(move_to), else: move_to
+ [maybe_flipped_to, maybe_flipped_from] =
+ [move_to, move_from]
+ |> Enum.map(fn coord -> if flipped, do: Renderer.flip(coord), else: coord end)
promotion_possible =
- case piece_type do
+ case :binbo_position.get_piece(
+ :binbo_board.notation_to_index(Renderer.to_chess_coord(maybe_flipped_from)),
+ :binbo.game_state(binbo_pid)
+ ) do
1 ->
# Light pawn
{y, _} = maybe_flipped_to