Compare commits

...

12 Commits

Author SHA1 Message Date
1315cb294f Add 'breaks' command to bot_core
All checks were successful
Test Helper Module / test (3.11.5) (push) Successful in 1m31s
2025-10-17 11:09:58 -06:00
090d370ce1 Add remove_break command 2025-10-17 11:08:19 -06:00
97a3ae22fa Remove todo message 2025-10-17 11:05:30 -06:00
9b7c70576b Finish remove_break test 2025-10-17 11:04:01 -06:00
aca7358af8 Fix Boolean issue in add_break 2025-10-17 10:58:25 -06:00
6b2421e55c Add break-related tests 2025-10-17 10:58:06 -06:00
5b58c6e8ea Add return to add_break for db_helper.py 2025-10-17 10:41:36 -06:00
26276b0989 Add remove_break method for db_helper.py 2025-10-17 10:41:20 -06:00
a928fa54d4 Remove unused import from posting module 2025-10-17 10:40:39 -06:00
c19125894f Edit contributing.md 2025-10-16 16:17:39 -06:00
b328d325f6 Edit the self_callouts interaction.followup 2025-10-16 16:13:19 -06:00
c563d745d1 Update try/except/else interaction responses 2025-10-16 16:11:24 -06:00
5 changed files with 62 additions and 13 deletions

View File

@@ -7,7 +7,7 @@ This is primarily open-source so that others can implement the code that we've w
Currently, we use GitHub actions to test the database portion of the codebase. It's a bit harder to test the Discord-centric commands otherwise.
## Submitting changes
Please send a [new GitHub Pull Request](https://github.com/contrastellar/raid-callouts/compare) with a clear list of what's been done!
Please send a [new Pull Request](https://git.contrastellar.com/contrastellar/raid-callouts/pulls) with a clear list of what's been done!
When you send in a Pull Request (PR), we'll be super happy if you've made tests or otherwise commented your code clearly with what it does, and what libraries it uses in addition to our base libraries!
Please always write a clear commit message for your commits. One-line messages are fine for smaller changes, but bigger changes should be more details!

View File

@@ -6,7 +6,6 @@ This automation will be run on a daily basis, through a cron job + docker.
@author: Gabriella 'contrastellar' Agathon
"""
import argparse
import os
import discord
import helper.db_helper

View File

@@ -263,17 +263,13 @@ async def add_break(interaction: discord.Interaction, start_day: int, start_mont
try:
DATABASE_CONN.add_break(user_id=uid, break_start=start_date, break_end=end_date)
except UNIQUEVIOLATION:
await interaction.response.send_message(f'{user_char_name} -- you have already added a callout for {callout_date} with reason: {reason}')
except INVALIDDATETIMEFORMAT:
await interaction.response.send_message(f'{user_char_name} -- please format the date as the following format: MM/DD/YYYY')
except FOREIGNKEYVIOLATION:
await interaction.response.send_message(f'{user_nick} -- please register with the bot using the following command!\n`/registercharacter`\n Please use your in-game name!')
await interaction.response.send_message(f'{user_char_name} -- you have already added a break for {start_date} through {end_date}!')
except helper.db_helper.DateTimeError:
await interaction.response.send_message(f'{user_nick}, you\'re trying to submit a callout for a time in the past! Please verify that this is what you want to do!')
await interaction.response.send_message(f'{user_nick}, you\'re trying to submit a break for a time in the past! Please verify that this is what you want to do!')
except psycopg2.Error as e:
await interaction.response.send_message(f'{user_nick} -- an error has occured!\nNotifying <@{CONTRASTELLAR}> of this error. Error is as follows --\n{e}')
else:
await interaction.response.send_message(f'{user_char_name} -- you added a callout for {callout_date} with reason: {reason}')
await interaction.response.send_message(f'{user_char_name} -- you added a break for for {start_date} through {end_date}!')
@client.tree.command()
@@ -291,6 +287,24 @@ async def remove_callout(interaction: discord.Interaction, day: int, month: int,
await interaction.response.send_message(f'{user_char_name} removed a callout for {callout_date}')
@client.tree.command()
async def remove_break(interaction: discord.Interaction, day: int, month: int, year: int) -> None:
delete_invalidate()
cleanup_invalidate()
user_id = interaction.user.id
user_char_name = DATABASE_CONN.return_char_name(user_id)
break_date: datetime.date = datetime.date(year=year, month=month, day=day)
try:
DATABASE_CONN.remove_break(user_id=user_id, break_date=break_date)
except psycopg2.Error:
await interaction.response.send_message(f'{user_char_name} -- no break was added for {break_date}')
else:
await interaction.response.send_message(f'{user_char_name} -- you removed the break starting on {break_date}')
return
@client.tree.command()
async def schedule(interaction: discord.Interaction, days: int = DAYS_FOR_CALLOUTS) -> None:
delete_invalidate()
@@ -301,6 +315,15 @@ async def schedule(interaction: discord.Interaction, days: int = DAYS_FOR_CALLOU
await interaction.followup.send(f'Callouts for the next {days} days:\n{callouts}')
return
@client.tree.command()
async def breaks(interaction: discord.Interaction, days: int = 365) -> None:
delete_invalidate()
cleanup_invalidate()
await interaction.response.defer(thinking=True)
await interaction.response.send_message(str(DATABASE_CONN.query_breaks()))
@client.tree.command()
async def self_callouts(interaction: discord.Interaction, days: int = 365) -> None:
delete_invalidate()
@@ -310,7 +333,8 @@ async def self_callouts(interaction: discord.Interaction, days: int = 365) -> No
await interaction.response.defer(thinking=True)
callouts: list = DATABASE_CONN.query_self_callouts(user_id=uid, days=days)
callouts: str = DATABASE_CONN.formatted_list_of_callouts(callouts)
await interaction.followup.send(f'Callouts for the next **{days}** for user **{DATABASE_CONN.return_char_name(uid)}**:\n{callouts}')
character_name: str = DATABASE_CONN.return_char_name(uid)
await interaction.followup.send(f'Callouts for the next **{days}** for user **{character_name}**:\n{callouts}')
args: argparse.Namespace = parser.parse_args()

View File

@@ -58,4 +58,12 @@ class TestClass():
formatted_callouts = self.DATABASE_CONN.format_list_of_callouts(callouts=callouts)
assert formatted_callouts.__class__ is str
# TODO write tests for the break addition/removal
def test_add_break(self) -> None:
today: datetime.date = datetime.date.today()
new_break = self.DATABASE_CONN.add_break(user_id=1, break_start=today, break_end=today)
assert new_break is None
def test_remove_break(self) -> None:
today: datetime.date = datetime.date.today()
remove_break = self.DATABASE_CONN.remove_break(user_id=1, start_date=today)
assert remove_break is None

View File

@@ -142,11 +142,12 @@ class DBHelper():
self.__CONN = connect_config(self._config)
self.__CONN.autocommit = True
cursor = self.__CONN.cursor()
is_range: int = 1
is_range: bool = True
if break_start == break_end:
is_range = 0
is_range = False
cursor.execute("INSERT INTO breaks (created_user, is_range, open_range, close_range) VALUES (%s, %s, %s, %s)", (user_id, is_range, break_start, break_end))
return
def remove_callout(self, user_id: int, callout: datetime.date) -> None:
@@ -166,6 +167,23 @@ class DBHelper():
return
def remove_break(self, user_id: int, start_date: datetime.date) -> None:
"""Remove a callout based on user + date, which form the primary key in the db
Args:
user_id (int): The Discord UUID of the user removing something from the db
callout (datetime.datetime): The date of the callout
"""
self.__CONN = connect_config(self._config)
self.__CONN.autocommit = True
cursor = self.__CONN.cursor()
cursor.execute("DELETE FROM breaks WHERE created_user = %s AND open_range = %s", (user_id, start_date))
self.__CONN.commit()
return
def formatted_list_of_callouts(self, callouts: list) -> str:
"""Format the python list of callouts.