Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Version 0.2.0 #147

Open
wants to merge 121 commits into
base: main
Choose a base branch
from
Open

Version 0.2.0 #147

wants to merge 121 commits into from

Conversation

winstonsung
Copy link
Collaborator

@winstonsung winstonsung commented Oct 7, 2024

Summary by CodeRabbit

Release Notes

  • New Features

    • Added localization support for Traditional Chinese (zh-hant) with translations for course-related functionalities, including button labels and notifications.
    • Introduced a new Gift class for sending gifts via Discord, enhancing user interaction.
    • Implemented a Message class for managing system messages with language support.
    • Added a JSON schema for database tables, detailing structure and relationships.
    • Introduced a new Maintenance class for managing maintenance scripts and parameters.
    • Added a new LanguageTag class for managing language data and a LanguageTagFactory for creating language tags.
    • New tables defined in the database schema for users, comments, games, gifts, and capture-the-flag data.
    • Introduced a new Config class for managing application configuration options.
  • Improvements

    • Enhanced application configuration by integrating environment variables for sensitive data.
    • Updated dependency versions across multiple files to ensure compatibility and security.
  • Documentation

    • Updated README.md and CONTRIBUTING.md for clarity and consistency.
    • Added new configuration variables to the .env.example file for better setup guidance.
    • Introduced a new JSON file for diagram layout, aiding in visualizing data entities.
    • Expanded HISTORY.md to include detailed change notes for previous versions.
    • Created RELEASE-NOTES-0.2.md to outline changes for the upcoming version.

iach526526 and others added 30 commits August 27, 2024 19:56
Change-Id: I8926fc26ee263ce9446adccae7cf191330f9f593
Change-Id: I4bcd6e7c3f13ae8a4211e275dc1723346161d913
Change-Id: Ib6dad0232b13b1e88ce3519f10b63e29aac2e905
Bug: #51
Change-Id: If695821600dfeccc9f9e91548a5b6237a323812c
Change-Id: Id9cd8d4ce8fc949c51679b38f158f1bfc740a8f0
Change-Id: Ie78f7be00bfff17c88f4aabbcec28823b1bd6ed1
Change-Id: I27770b2ff249842ab8bfbc8f7905e1213fb7c9fb
Change-Id: I15b6a1fd2595151c0454d6c1f9fe23f89de17d1e
Bumps [idna](https://github.com/kjd/idna) from 3.7 to 3.8.
- [Release notes](https://github.com/kjd/idna/releases)
- [Changelog](https://github.com/kjd/idna/blob/master/HISTORY.rst)
- [Commits](kjd/idna@v3.7...v3.8)

---
updated-dependencies:
- dependency-name: idna
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <[email protected]>
Change-Id: I14c9859111c02d2f330a02767a9be826db7f9444
winstonsung added a commit that referenced this pull request Dec 2, 2024
Bug: #147
Change-Id: I04dbfb2269ba2c7ba9068e1e4417067285b945eb
Change-Id: I5b5c4bcc07ac9a54356f21e1a8d7781aff73f368
winstonsung added a commit that referenced this pull request Dec 2, 2024
Bug: #147
Change-Id: I04dbfb2269ba2c7ba9068e1e4417067285b945eb
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Inline review comments failed to post. This is likely due to GitHub's limits when posting large numbers of comments.

Actionable comments posted: 4

🛑 Comments failed to post (4)
RELEASE-NOTES-0.2.md (2)

14-14: ⚠️ Potential issue

Purr! These sections need their actual changes! 🐱

Based on the PR objectives and changes in pyproject.toml, we should document:

  1. Configuration changes:
    • MySQL Connector Python upgrade from 8.4.0 to 9.1.0
    • Flask upgrade from 3.0.3 to 3.1.0
  2. New features:
    • Traditional Chinese (zh-hant) localization
  3. Breaking changes:
    • Major version bump in MySQL Connector Python

Would you like me to help gather and format these changes from the PR context?

Also applies to: 18-18, 22-22, 26-26, 30-30, 34-34, 38-38, 42-42, 46-46, 54-54, 58-58, 62-62, 66-66


50-51: 🧹 Nitpick (assertive)

Meow! Let's polish this language section! 😺

  1. Add a missing comma for better readability
  2. Verify the localization update process
-SCAICT-uwu now supports 1 language. Many localisations are updated regularly.
+SCAICT-uwu now supports 1 language. Many localisations are updated regularly, and below only new and removed languages are listed.
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

SCAICT-uwu now supports 1 language. Many localisations are updated regularly, and below only new and removed languages are listed.
🧰 Tools
🪛 LanguageTool

[uncategorized] ~51-~51: Possible missing comma found.
Context: ...y localisations are updated regularly. Below only new and removed languages are list...

(AI_HYDRA_LEO_MISSING_COMMA)

HISTORY.md (2)

7-354: 🛠️ Refactor suggestion

Purr-pose these empty version sections for removal! 🐱

The empty placeholder sections for versions 0.1.2 through 0.1.7 create unnecessary clutter. Let's keep only the documented versions.

Remove all empty version sections (0.1.2-0.1.7) and keep only:

  • 0.2.0 (in RELEASE-NOTES-0.2.md)
  • 0.1.1
  • 0.1.0

363-364: 🧹 Nitpick (assertive)

Meow! Let's consolidate these CTF entries! 😺

The CTF feature updates are scattered and show inconsistent progression.

-* Added CTF features.
-* Updated CTF features (WIP, can create and list).
-* Completed CTF features.
-* Updated CTF features.
+* CTF System Evolution:
+  * Initial implementation with create and list capabilities
+  * Enhanced feature set with full functionality
+  * Final refinements and optimizations

Also applies to: 367-367, 378-378

🧰 Tools
🪛 LanguageTool

[style] ~363-~363: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...ture. * Added channel member display. * Added CTF features. * Updated CTF features (W...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 11

📜 Review details

Configuration used: .coderabbit.yaml
Review profile: ASSERTIVE

📥 Commits

Reviewing files that changed from the base of the PR and between 62c9f80 and 98a3c4d.

📒 Files selected for processing (6)
  • HISTORY.md (1 hunks)
  • RELEASE-NOTES-0.2.md (1 hunks)
  • pyproject.toml (2 hunks)
  • src/scaict_uwu/libs/language/language_utils.py (1 hunks)
  • src/scaict_uwu/service_container.py (1 hunks)
  • src/scaict_uwu/service_wiring.py (1 hunks)
🧰 Additional context used
🪛 LanguageTool
HISTORY.md

[style] ~363-~363: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...ture. * Added channel member display. * Added CTF features. * Updated CTF features (W...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[style] ~372-~372: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...the support ticket embed description. * Updated to limit the usage of daily change comm...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[style] ~376-~376: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...dded support for bot status/presence. * Added zap emoji. * Added total point status d...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[style] ~377-~377: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...t status/presence. * Added zap emoji. * Added total point status display. * Updated C...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[style] ~386-~386: Consider using a different verb for a more formal wording.
Context: ...e Analytics. ### Bug fixes in 0.1.1 * Fixed the problem of bot responding to self m...

(FIX_RESOLVE)

RELEASE-NOTES-0.2.md

[uncategorized] ~51-~51: Possible missing comma found.
Context: ...y localisations are updated regularly. Below only new and removed languages are list...

(AI_HYDRA_LEO_MISSING_COMMA)

🪛 Markdownlint (0.35.0)
HISTORY.md

5-5: null
Multiple top-level headings in the same document

(MD025, single-title, single-h1)

🪛 Ruff (0.8.0)
src/scaict_uwu/service_wiring.py

35-35: Unused function argument: services

(ARG001)


39-39: Unused function argument: services

(ARG001)

src/scaict_uwu/service_container.py

22-22: Mutable class attributes should be annotated with typing.ClassVar

(RUF012)


26-26: Mutable class attributes should be annotated with typing.ClassVar

(RUF012)


30-30: Mutable class attributes should be annotated with typing.ClassVar

(RUF012)


34-34: Missing type annotation for function argument module

(ANN001)


44-44: Missing type annotation for function argument service_instantiators

(ANN001)


70-70: Missing return type annotation for public function create

(ANN201)


76-77: Explicitly concatenated string should be implicitly concatenated

(ISC003)


77-77: Trailing comma missing

Add trailing comma

(COM812)


84-84: Missing return type annotation for public function get

(ANN201)

🔇 Additional comments (13)
src/scaict_uwu/libs/language/language_utils.py (3)

1-3: Meow! This docstring needs more details about its purpose 😺

The module docstring should provide more context about its role in Discord localization and language handling.


78-87: Make the return type more specific! 😺

The return type should match the input mapping type.


89-101: Paw-sitively perfect implementation! 😺

Clean, efficient, and well-documented validation method.

HISTORY.md (1)

401-406: 🧹 Nitpick (assertive)

Purr... Let's clarify the database migration journey! 🐱

The database migration story could be clearer. Consider restructuring:

-* Added JSON file as initial database.
-* Updated to use JSON file to get CTF maker role ID.
-* Added SQL database.
-* Migrated user.json to SQL database.
-* Renamed SQL column name from `user_id` to `uid`.
-* Dropped support for `user.json`, use SQL database instead.
+### Database Evolution
+1. Initial Storage (JSON):
+   * Implemented JSON-based storage for initial database
+   * Used JSON file for CTF maker role ID storage
+2. SQL Migration:
+   * Introduced SQL database infrastructure
+   * Migrated user data from JSON to SQL
+   * Improved schema: Renamed column `user_id` to `uid`
+3. Final State:
+   * Completed migration to SQL database
+   * Removed JSON storage support

Likely invalid or redundant comment.

src/scaict_uwu/service_container.py (7)

22-22: Purrfecting our code: Annotate mutable class attributes with ClassVar

As a wise feline, I notice that the mutable class attributes _services, _service_instantiators, and _services_being_created should be annotated with typing.ClassVar to indicate they are shared across all instances. This will make our code as sleek and elegant as a cat.

Also applies to: 26-26, 30-30

🧰 Tools
🪛 Ruff (0.8.0)

22-22: Mutable class attributes should be annotated with typing.ClassVar

(RUF012)


34-34: Enhance clarity with type annotations

Adding type annotations to function parameters keeps our code sharp and our claws sharper. The function load_wiring_module is missing a type annotation for its module parameter.

🧰 Tools
🪛 Ruff (0.8.0)

34-34: Missing type annotation for function argument module

(ANN001)


44-44: Let's make return types as clear as a cat's vision

The functions apply_wiring, create, and get are missing return type annotations. Specifying return types will help us pounce on bugs before they occur.

Also applies to: 70-70, 84-84

🧰 Tools
🪛 Ruff (0.8.0)

44-44: Missing type annotation for function argument service_instantiators

(ANN001)


62-62: Be Pythonic: Use not in for membership tests

Just like a cat knows where not to step, we should use if name not in instead of if not self.has(name). This aligns with Python's best practices.

Also applies to: 74-74


76-77: Simplify string concatenation for sleek code

We can join the error message strings without the + operator by using implicit concatenation. This keeps our code neat and tidy, like a well-groomed coat.

🧰 Tools
🪛 Ruff (0.8.0)

76-77: Explicitly concatenated string should be implicitly concatenated

(ISC003)


77-77: Trailing comma missing

Add trailing comma

(COM812)


57-57: Avoid abrupt exits: Raise exceptions instead of using sys.exit

Using sys.exit is like a sudden hiss—it startles and halts everything. Let's raise exceptions so errors can be handled gracefully, much like a cat landing on its feet.

Also applies to: 63-63, 66-66, 72-72, 75-78


80-83: ⚠️ Potential issue

Remember to clean up to avoid sneaky bugs

After creating the service, we should remove name from _services_being_created to prevent future mischief with circular dependencies.

Consider applying this fix:

    self._services_being_created[name] = True

-    return self._service_instantiators[name](self)
+    try:
+        return self._service_instantiators[name](self)
+    finally:
+        del self._services_being_created[name]

Likely invalid or redundant comment.

src/scaict_uwu/service_wiring.py (2)

35-36: Unused parameter services in get_config_factory—let's tidy it up

I see that services isn't used in get_config_factory. Removing it will make our code as neat as a well-groomed fur.

🧰 Tools
🪛 Ruff (0.8.0)

35-35: Unused function argument: services

(ARG001)


39-40: Unused parameter services in get_language_tag_factory—time to trim it

Similarly, services is not used in get_language_tag_factory. Let's remove it to keep our code light on its paws.

🧰 Tools
🪛 Ruff (0.8.0)

39-39: Unused function argument: services

(ARG001)

RELEASE-NOTES-0.2.md Outdated Show resolved Hide resolved
pyproject.toml Show resolved Hide resolved
HISTORY.md Outdated Show resolved Hide resolved
winstonsung added a commit that referenced this pull request Dec 2, 2024
Bug: #147
Change-Id: I04dbfb2269ba2c7ba9068e1e4417067285b945eb
@winstonsung winstonsung mentioned this pull request Dec 2, 2024
winstonsung added a commit that referenced this pull request Dec 2, 2024
Bug: #147
Change-Id: I04dbfb2269ba2c7ba9068e1e4417067285b945eb
winstonsung added a commit that referenced this pull request Dec 2, 2024
Bug: #147
Change-Id: I04dbfb2269ba2c7ba9068e1e4417067285b945eb
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Inline review comments failed to post. This is likely due to GitHub's limits when posting large numbers of comments.

Actionable comments posted: 9

🛑 Comments failed to post (9)
tests/pytest/test_service_wiring.py (1)

12-12: 🧹 Nitpick (assertive)

Add return type annotation for test function

The test function test_get_wiring is missing a return type annotation. Adding -> None clarifies that the function does not return a value.

Apply this diff to add the return type annotation:

 def test_get_wiring() -> None:
     service_instantiators = service_wiring.get_wiring()

Committable suggestion skipped: line range outside the PR's diff.

🧰 Tools
🪛 Ruff (0.8.0)

12-12: Missing return type annotation for public function test_get_wiring

Add return type annotation: None

(ANN201)

.github/workflows/pytest.yml (2)

16-16: ⚠️ Potential issue

Fix indentation for the checkout step

The indentation for the uses key is incorrect, which can lead to workflow execution errors.

Apply this diff to correct the indentation:

     steps:
-    - uses: actions/checkout@v4
+      - uses: actions/checkout@v4
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

      - uses: actions/checkout@v4
🧰 Tools
🪛 yamllint (1.35.1)

[error] 16-16: wrong indentation: expected 6 but found 4

(indentation)


14-14: ⚠️ Potential issue

Remove extra spaces inside brackets in matrix definition

There are unnecessary spaces inside the brackets for python-version, which might cause YAML parsing issues.

Apply this diff to fix the spacing:

         strategy:
           matrix:
-            python-version: [ "3.11" ]
+            python-version: ["3.11"]
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

        python-version: ["3.11"]
🧰 Tools
🪛 yamllint (1.35.1)

[error] 14-14: too many spaces inside brackets

(brackets)


[error] 14-14: too many spaces inside brackets

(brackets)

.github/workflows/unittest.yml (3)

29-29: ⚠️ Potential issue

Quote the command to prevent word splitting

In the shell command, variables should be quoted to prevent unintended word splitting.

Apply this diff to fix the issue:

         - name: Analysing the code with Pylint
           run: |
-            python -m unittest $(git ls-files 'tests/unittest/*.py')
+            python -m unittest "$(git ls-files 'tests/unittest/*.py')"
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

        python -m unittest "$(git ls-files 'tests/unittest/*.py')"

14-14: ⚠️ Potential issue

Remove extra spaces inside brackets in matrix definition

There are unnecessary spaces inside the brackets for python-version, which might cause YAML parsing issues.

Apply this diff to fix the spacing:

         strategy:
           matrix:
-            python-version: [ "3.11" ]
+            python-version: ["3.11"]
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

        python-version: ["3.11"]
🧰 Tools
🪛 yamllint (1.35.1)

[error] 14-14: too many spaces inside brackets

(brackets)


[error] 14-14: too many spaces inside brackets

(brackets)


16-16: ⚠️ Potential issue

Fix indentation for the checkout step

The indentation for the uses key is incorrect, which can lead to workflow execution errors.

Apply this diff to correct the indentation:

     steps:
-    - uses: actions/checkout@v4
+      - uses: actions/checkout@v4
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

      - uses: actions/checkout@v4
🧰 Tools
🪛 yamllint (1.35.1)

[error] 16-16: wrong indentation: expected 6 but found 4

(indentation)

tests/unittest/test_language_tag_factory.py (2)

22-27: 🧹 Nitpick (assertive)

Purr-fect test coverage, but let's add some edge cases! 😺

The basic test cases look good, but consider adding:

  1. Test with invalid BCP 47 tags
  2. Test with unsupported Discord codes
  3. Test caching behavior (same tag should return same instance)

Also applies to: 28-36

🧰 Tools
🪛 Ruff (0.8.0)

22-22: Missing return type annotation for public function test_get

Add return type annotation: None

(ANN201)


25-25: Use a regular assert instead of unittest-style assertEqual

Replace assertEqual(...) with assert ...

(PT009)


26-26: Use a regular assert instead of unittest-style assertEqual

Replace assertEqual(...) with assert ...

(PT009)


16-20: 🧹 Nitpick (assertive)

Add return type hints to setUp and tearDown! 🐱

-    def setUp(self):
+    def setUp(self) -> None:
         self.language_tag_factory = LanguageTagFactory()

-    def tearDown(self):
+    def tearDown(self) -> None:
         self.language_tag_factory = None
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

    def setUp(self) -> None:
        self.language_tag_factory = LanguageTagFactory()

    def tearDown(self) -> None:
        self.language_tag_factory = None
🧰 Tools
🪛 Ruff (0.8.0)

16-16: Missing return type annotation for public function setUp

Add return type annotation: None

(ANN201)


19-19: Missing return type annotation for public function tearDown

Add return type annotation: None

(ANN201)

src/scaict_uwu/libs/language/language_tag_factory.py (1)

35-38: 🧹 Nitpick (assertive)

Consider adding cache size limit! 🐱

The _tags cache grows unbounded. Consider:

  1. Adding a maximum cache size
  2. Implementing LRU eviction policy
  3. Adding cache statistics for monitoring
class LanguageTagFactory:
+    _MAX_CACHE_SIZE: ClassVar[int] = 1000
     _tags: ClassVar[dict[str, LanguageTag]] = {}

     def get(self, tag: str) -> LanguageTag:
+        if len(self._tags) >= self._MAX_CACHE_SIZE:
+            # Evict oldest entry
+            self._tags.pop(next(iter(self._tags)))
         if tag not in self._tags:
             self._tags[tag] = LanguageTag(tag)

Also applies to: 58-61

winstonsung added a commit that referenced this pull request Dec 2, 2024
Bug: #147
Change-Id: I04dbfb2269ba2c7ba9068e1e4417067285b945eb
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Inline review comments failed to post. This is likely due to GitHub's limits when posting large numbers of comments.

Actionable comments posted: 14

🛑 Comments failed to post (14)
.github/workflows/unittest.yml (5)

1-29: 🧹 Nitpick (assertive)

Meow-velous workflow, but let's add some treats 🐱

Consider these enhancements to make the workflow more robust:

  1. Save test results as artifacts
  2. Add test coverage reporting
  3. Configure test result annotations in PR

Here's an example of how to add test artifacts:

    - name: Run unittest with coverage
      run: |
        coverage run -m unittest "$(git ls-files 'tests/unittest/*.py')"
        coverage xml
    
    - name: Upload coverage report
      uses: actions/upload-artifact@v3
      with:
        name: coverage-report
        path: coverage.xml

Would you like me to help implement these improvements?

🧰 Tools
🪛 actionlint (1.7.4)

28-28: shellcheck reported issue in this script: SC2046:warning:1:20: Quote this to prevent word splitting

(shellcheck)

🪛 yamllint (1.35.1)

[warning] 3-3: truthy value should be one of [false, true]

(truthy)


[error] 14-14: too many spaces inside brackets

(brackets)


[error] 14-14: too many spaces inside brackets

(brackets)


[error] 16-16: wrong indentation: expected 6 but found 4

(indentation)


12-14: 🧹 Nitpick (assertive)

Fix the matrix syntax spacing 🐱

The matrix configuration has inconsistent spacing inside brackets.

    strategy:
      matrix:
-        python-version: [ "3.11" ]
+        python-version: ["3.11"]
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

    strategy:
      matrix:
        python-version: ["3.11"]
🧰 Tools
🪛 yamllint (1.35.1)

[error] 14-14: too many spaces inside brackets

(brackets)


[error] 14-14: too many spaces inside brackets

(brackets)


3-7: 🧹 Nitpick (assertive)

Meow! Let's make the trigger conditions more explicit 🐱

For better readability and compliance with YAML best practices, we should use explicit boolean values.

on:
-  pull_request:
-  push:
+  pull_request: true
+  push: true
   workflow_dispatch:
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

on:
  pull_request: true
  push: true
  workflow_dispatch:

🧰 Tools
🪛 yamllint (1.35.1)

[warning] 3-3: truthy value should be one of [false, true]

(truthy)


28-29: ⚠️ Potential issue

Careful with those paws! Let's quote the unittest command 😸

The current command might break if test filenames contain spaces or special characters.

-        python -m unittest $(git ls-files 'tests/unittest/*.py')
+        python -m unittest "$(git ls-files 'tests/unittest/*.py')"
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

      run: |
        python -m unittest "$(git ls-files 'tests/unittest/*.py')"
🧰 Tools
🪛 actionlint (1.7.4)

28-28: shellcheck reported issue in this script: SC2046:warning:1:20: Quote this to prevent word splitting

(shellcheck)


10-10: 🧹 Nitpick (assertive)

Purr-haps we can simplify this condition 😺

The current condition is a bit complex. Let's make it more readable.

-    if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.fork == true
+    if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.fork
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

    if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.fork
src/scaict_uwu/service_container.py (1)

34-34: 🧹 Nitpick (assertive)

Whiskers twitch! Missing type annotation for module parameter

The load_wiring_module method is missing a type annotation for the module parameter. Adding it improves type checking and code clarity.

Apply this diff:

+from types import ModuleType

 def load_wiring_module(self, module) -> None:
+    def load_wiring_module(self, module: ModuleType) -> None:

Committable suggestion skipped: line range outside the PR's diff.

🧰 Tools
🪛 Ruff (0.8.0)

34-34: Missing type annotation for function argument module

(ANN001)

tests/pytest/test_service_wiring.py (1)

12-12: 🧹 Nitpick (assertive)

Whiskers twitch! Let's add a return type annotation

The test function test_get_wiring is missing a return type annotation. Adding -> None clarifies that it doesn't return anything.

Apply this diff:

 def test_get_wiring():
+def test_get_wiring() -> None:

Committable suggestion skipped: line range outside the PR's diff.

🧰 Tools
🪛 Ruff (0.8.0)

12-12: Missing return type annotation for public function test_get_wiring

Add return type annotation: None

(ANN201)

.github/workflows/pytest.yml (2)

16-16: ⚠️ Potential issue

Adjust indentation for proper YAML structure

Line 16 is indented with 4 spaces but should be indented with 6 spaces to correctly nest under steps.

Apply this diff:

     steps:
-    - uses: actions/checkout@v4
+      - uses: actions/checkout@v4
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

      - uses: actions/checkout@v4
🧰 Tools
🪛 yamllint (1.35.1)

[error] 16-16: wrong indentation: expected 6 but found 4

(indentation)


14-14: 🧹 Nitpick (assertive)

Trim the extra spaces inside brackets

In line 14, there are extra spaces inside the brackets. Removing them aligns with YAML syntax conventions.

Apply this diff:

         python-version: [ "3.11" ]
-        python-version: [ "3.11" ]
+        python-version: ["3.11"]
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

        python-version: ["3.11"]
🧰 Tools
🪛 yamllint (1.35.1)

[error] 14-14: too many spaces inside brackets

(brackets)


[error] 14-14: too many spaces inside brackets

(brackets)

pyproject.toml (1)

8-8: 🧹 Nitpick (assertive)

Purr-fect! Version updated to 0.2.0

Just a friendly reminder to ensure that the version bump is reflected in all relevant documentation, such as the changelog or release notes.

tests/unittest/test_language_tag_factory.py (3)

16-20: 🧹 Nitpick (assertive)

Add return type annotations to test methods 🐱

Let's add return type annotations to follow type hinting best practices:

-    def setUp(self):
+    def setUp(self) -> None:
         self.language_tag_factory = LanguageTagFactory()

-    def tearDown(self):
+    def tearDown(self) -> None:
         self.language_tag_factory = None
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

    def setUp(self) -> None:
        self.language_tag_factory = LanguageTagFactory()

    def tearDown(self) -> None:
        self.language_tag_factory = None
🧰 Tools
🪛 Ruff (0.8.0)

16-16: Missing return type annotation for public function setUp

Add return type annotation: None

(ANN201)


19-19: Missing return type annotation for public function tearDown

Add return type annotation: None

(ANN201)


22-26: 🧹 Nitpick (assertive)

Enhance test_get method with type hints and pythonic assertions 😺

-    def test_get(self):
+    def test_get(self) -> None:
         language_tag: LanguageTag = self.language_tag_factory.get("zh-Hant")

-        self.assertEqual(language_tag.get_bcp_47_tag(), "zh-Hant")
-        self.assertEqual(language_tag.get_discord_code(), "zh-TW")
+        assert language_tag.get_bcp_47_tag() == "zh-Hant"
+        assert language_tag.get_discord_code() == "zh-TW"
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

    def test_get(self) -> None:
        language_tag: LanguageTag = self.language_tag_factory.get("zh-Hant")

        assert language_tag.get_bcp_47_tag() == "zh-Hant"
        assert language_tag.get_discord_code() == "zh-TW"
🧰 Tools
🪛 Ruff (0.8.0)

22-22: Missing return type annotation for public function test_get

Add return type annotation: None

(ANN201)


25-25: Use a regular assert instead of unittest-style assertEqual

Replace assertEqual(...) with assert ...

(PT009)


26-26: Use a regular assert instead of unittest-style assertEqual

Replace assertEqual(...) with assert ...

(PT009)


28-35: 🧹 Nitpick (assertive)

Polish test_get_by_discord_code with type hints and pythonic assertions 🐱

-    def test_get_by_discord_code(self):
+    def test_get_by_discord_code(self) -> None:
         language_tag: LanguageTag | None = (
             self.language_tag_factory.get_by_discord_code("zh-TW")
         )

-        self.assertIsNotNone(language_tag)
-        self.assertEqual(language_tag.get_bcp_47_tag(), "zh-Hant")
-        self.assertEqual(language_tag.get_discord_code(), "zh-TW")
+        assert language_tag is not None
+        assert language_tag.get_bcp_47_tag() == "zh-Hant"
+        assert language_tag.get_discord_code() == "zh-TW"
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

    def test_get_by_discord_code(self) -> None:
        language_tag: LanguageTag | None = (
            self.language_tag_factory.get_by_discord_code("zh-TW")
        )

        assert language_tag is not None
        assert language_tag.get_bcp_47_tag() == "zh-Hant"
        assert language_tag.get_discord_code() == "zh-TW"
🧰 Tools
🪛 Ruff (0.8.0)

28-28: Missing return type annotation for public function test_get_by_discord_code

Add return type annotation: None

(ANN201)


33-33: Use a regular assert instead of unittest-style assertIsNotNone

Replace assertIsNotNone(...) with assert ...

(PT009)


34-34: Use a regular assert instead of unittest-style assertEqual

Replace assertEqual(...) with assert ...

(PT009)


35-35: Use a regular assert instead of unittest-style assertEqual

Replace assertEqual(...) with assert ...

(PT009)

HISTORY.md (1)

51-51: 🧹 Nitpick (assertive)

Meow! Let's make the language sections consistent! 😺

The language support statement is repeated with inconsistent spelling:

-SCAICT-uwu now supports 1 language. Many localisations are updated regularly.
+SCAICT-uwu now supports 1 language. Many localizations are updated regularly.

Also applies to: 109-109, 167-167, 225-225, 283-283, 341-341, 393-393

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 14

📜 Review details

Configuration used: .coderabbit.yaml
Review profile: ASSERTIVE

📥 Commits

Reviewing files that changed from the base of the PR and between 8ff5e87 and 197748a.

📒 Files selected for processing (9)
  • .github/workflows/pytest.yml (1 hunks)
  • .github/workflows/unittest.yml (1 hunks)
  • HISTORY.md (1 hunks)
  • RELEASE-NOTES-0.2.md (1 hunks)
  • pyproject.toml (2 hunks)
  • src/scaict_uwu/libs/language/language_tag_factory.py (1 hunks)
  • src/scaict_uwu/service_container.py (1 hunks)
  • tests/pytest/test_service_wiring.py (1 hunks)
  • tests/unittest/test_language_tag_factory.py (1 hunks)
🧰 Additional context used
🪛 actionlint (1.7.4)
.github/workflows/unittest.yml

28-28: shellcheck reported issue in this script: SC2046:warning:1:20: Quote this to prevent word splitting

(shellcheck)

🪛 yamllint (1.35.1)
.github/workflows/unittest.yml

[warning] 3-3: truthy value should be one of [false, true]

(truthy)


[error] 14-14: too many spaces inside brackets

(brackets)


[error] 14-14: too many spaces inside brackets

(brackets)


[error] 16-16: wrong indentation: expected 6 but found 4

(indentation)

.github/workflows/pytest.yml

[warning] 3-3: truthy value should be one of [false, true]

(truthy)


[error] 14-14: too many spaces inside brackets

(brackets)


[error] 14-14: too many spaces inside brackets

(brackets)


[error] 16-16: wrong indentation: expected 6 but found 4

(indentation)

🪛 LanguageTool
HISTORY.md

[style] ~363-~363: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...ture. * Added channel member display. * Added CTF features. * Updated CTF features (W...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[style] ~372-~372: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...the support ticket embed description. * Updated to limit the usage of daily change comm...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[style] ~376-~376: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...dded support for bot status/presence. * Added zap emoji. * Added total point status d...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[style] ~377-~377: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...t status/presence. * Added zap emoji. * Added total point status display. * Updated C...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[style] ~386-~386: Consider using a different verb for a more formal wording.
Context: ...e Analytics. ### Bug fixes in 0.1.1 * Fixed the problem of bot responding to self m...

(FIX_RESOLVE)

🪛 Markdownlint (0.35.0)
HISTORY.md

5-5: null
Multiple top-level headings in the same document

(MD025, single-title, single-h1)

🪛 Ruff (0.8.0)
tests/unittest/test_language_tag_factory.py

25-25: Use a regular assert instead of unittest-style assertEqual

Replace assertEqual(...) with assert ...

(PT009)


26-26: Use a regular assert instead of unittest-style assertEqual

Replace assertEqual(...) with assert ...

(PT009)


33-33: Use a regular assert instead of unittest-style assertIsNotNone

Replace assertIsNotNone(...) with assert ...

(PT009)


34-34: Use a regular assert instead of unittest-style assertEqual

Replace assertEqual(...) with assert ...

(PT009)


35-35: Use a regular assert instead of unittest-style assertEqual

Replace assertEqual(...) with assert ...

(PT009)

src/scaict_uwu/service_container.py

22-22: Mutable class attributes should be annotated with typing.ClassVar

(RUF012)


26-26: Mutable class attributes should be annotated with typing.ClassVar

(RUF012)


30-30: Mutable class attributes should be annotated with typing.ClassVar

(RUF012)


34-34: Missing type annotation for function argument module

(ANN001)


44-44: Missing type annotation for function argument service_instantiators

(ANN001)


70-70: Missing return type annotation for public function create

(ANN201)


76-77: Explicitly concatenated string should be implicitly concatenated

(ISC003)


77-77: Trailing comma missing

Add trailing comma

(COM812)


84-84: Missing return type annotation for public function get

(ANN201)

🔇 Additional comments (22)
.github/workflows/unittest.yml (2)

3-7: Meow! The workflow triggers look purrfect! 🐱

The configuration covers all necessary trigger events: pull requests, pushes, and manual workflow dispatches.

🧰 Tools
🪛 yamllint (1.35.1)

[warning] 3-3: truthy value should be one of [false, true]

(truthy)


10-10: Clever condition to handle fork PRs! purrs

The condition github.event_name != 'pull_request' || github.event.pull_request.head.repo.fork == true ensures the workflow runs only for:

  • Non-PR events (pushes, manual triggers)
  • PRs from forks

This is a good security practice to prevent potential abuse from malicious PRs.

RELEASE-NOTES-0.2.md (1)

5-5: 🧹 Nitpick (assertive)

Meow! Let's make the warning more eye-catching! 😺

The development branch warning should be more prominent to prevent accidental use.

-THIS IS NOT A RELEASE YET
+⚠️ THIS IS NOT A RELEASE YET ⚠️

Likely invalid or redundant comment.

pyproject.toml (1)

31-33: Meow! Major dependency updates need attention! 🐱

Significant version updates detected:

  • Flask: 3.0.3 → 3.1.0
  • MySQL Connector Python: 8.4.0 → 9.1.0 (Major version bump!)
  • py-cord: 2.6.1 → 2.6.1
✅ Verification successful

Purr-fect timing on these dependency updates! 😺

The dependency versions in your pyproject.toml are exactly aligned with the latest stable releases on PyPI:

  • Flask 3.1.0 ✅
  • MySQL Connector Python 9.1.0 ✅ (Important security update!)
  • py-cord 2.6.1 ✅

The MySQL Connector Python update to 9.1.0 is particularly important as it patches a HIGH severity security vulnerability (CVE published October 2024). This version is the first patched version, so this update is strongly recommended.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Check PyPI for latest versions and security advisories
echo "=== Checking Flask ==="
curl -s https://pypi.org/pypi/flask/json | jq '.info.version'

echo "=== Checking MySQL Connector Python ==="
curl -s https://pypi.org/pypi/mysql-connector-python/json | jq '.info.version'

echo "=== Checking py-cord ==="
curl -s https://pypi.org/pypi/py-cord/json | jq '.info.version'

# Check for security advisories
gh api graphql -f query='
{
  securityVulnerabilities(first: 5, ecosystem: PIP, package: "mysql-connector-python") {
    nodes {
      advisory {
        summary
        severity
        publishedAt
      }
      vulnerableVersionRange
      firstPatchedVersion {
        identifier
      }
    }
  }
}'

Length of output: 1616

HISTORY.md (3)

401-406: 🧹 Nitpick (assertive)

Purr... Let's clarify the database migration journey! 🐱

The database migration story could be clearer.

-* Added JSON file as initial database.
-* Updated to use JSON file to get CTF maker role ID.
-* Added SQL database.
-* Migrated user.json to SQL database.
-* Renamed SQL column name from `user_id` to `uid`.
-* Dropped support for `user.json`, use SQL database instead.
+### Database Migration Journey
+1. Initial Implementation:
+   * Introduced JSON-based storage for initial database needs
+   * Utilized JSON file for CTF maker role ID storage
+2. SQL Migration:
+   * Introduced SQL database infrastructure
+   * Migrated user data from JSON to SQL format
+   * Schema improvement: Renamed column `user_id` to `uid`
+3. Completion:
+   * Fully deprecated JSON storage in favor of SQL database

Likely invalid or redundant comment.


1-4: 🧹 Nitpick (assertive)

Meow! Let's make the introduction more informative! 😺

The introduction could use more context about:

  • Purpose of this history file
  • Relationship with RELEASE-NOTES-0.2
  • Versioning scheme
-# History
+# Project History
 
-Change notes from older releases. For current info, see RELEASE-NOTES-0.2.
+This document tracks historical changes for SCAICT-uwu versions 0.1.0 through 0.1.7.
+For information about current releases (0.2.0 and newer), please refer to RELEASE-NOTES-0.2.
+
+We follow Semantic Versioning (MAJOR.MINOR.PATCH). See https://semver.org for details.

Likely invalid or redundant comment.


359-379: 🧹 Nitpick (assertive)

Meow! Let's organize these features better! 😺

The features section could be improved by:

  • Grouping related features
  • Using varied verbs
  • Adding more context
 ### New user-facing features in 0.1.1
 
+#### Voice & Support Features
 * Added dynamic voice channel and support ticket feature.
 * Added channel member display.
-* Added CTF features.
-* Updated CTF features (WIP, can create and list).
+
+#### CTF System
+* Implemented core CTF functionality
+* Enhanced CTF system with creation and listing capabilities
+* Completed CTF feature set
+
+#### Store & Economy
 * Rewrote the daily charge feature.
-* Completed CTF features.
+* Implemented SCAICT Store with lottery slot feature
+* Introduced total point status display
+
+#### Web Interface
 * Added initial website using Flask.
-* Completed course role features.
-* Updated design of SCAICT Store.
+
+#### Role Management
+* Implemented course role management system

Likely invalid or redundant comment.

🧰 Tools
🪛 LanguageTool

[style] ~363-~363: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...ture. * Added channel member display. * Added CTF features. * Updated CTF features (W...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[style] ~372-~372: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...the support ticket embed description. * Updated to limit the usage of daily change comm...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[style] ~376-~376: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...dded support for bot status/presence. * Added zap emoji. * Added total point status d...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[style] ~377-~377: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...t status/presence. * Added zap emoji. * Added total point status display. * Updated C...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)

src/scaict_uwu/service_container.py (14)

22-22: Let's annotate _services with ClassVar for clarity

As a smart cat knows, annotating mutable class attributes like _services with ClassVar makes it clear they're shared across instances.

🧰 Tools
🪛 Ruff (0.8.0)

22-22: Mutable class attributes should be annotated with typing.ClassVar

(RUF012)


26-26: Annotate _service_instantiators with ClassVar for consistency

Continuing our clever conventions, adding ClassVar to _service_instantiators clarifies its role as a class variable.

🧰 Tools
🪛 Ruff (0.8.0)

26-26: Mutable class attributes should be annotated with typing.ClassVar

(RUF012)


30-30: Use ClassVar for _services_being_created to signal shared state

Marking _services_being_created with ClassVar ensures everyone knows it's a class-level attribute.

🧰 Tools
🪛 Ruff (0.8.0)

30-30: Mutable class attributes should be annotated with typing.ClassVar

(RUF012)


34-34: Add type annotation to module parameter

Type annotations are like catnip for code clarity! Consider specifying the type of module in load_wiring_module.

🧰 Tools
🪛 Ruff (0.8.0)

34-34: Missing type annotation for function argument module

(ANN001)


44-44: Specify type for service_instantiators parameter

Adding a type annotation to service_instantiators in apply_wiring will make our code as precise as a cat's whiskers.

🧰 Tools
🪛 Ruff (0.8.0)

44-44: Missing type annotation for function argument service_instantiators

(ANN001)


70-70: Include return type annotation for create method

An explicit return type for create enhances readability and aids in static analysis.

🧰 Tools
🪛 Ruff (0.8.0)

70-70: Missing return type annotation for public function create

(ANN201)


76-77: Simplify string concatenation in error message

We can make the error message neater by using implicit string concatenation.

Apply this change:

-                "RecursiveServiceDependencyException "
-                + "Circular dependency when creating service!"
+                "RecursiveServiceDependencyException "
+                "Circular dependency when creating service!"
🧰 Tools
🪛 Ruff (0.8.0)

76-77: Explicitly concatenated string should be implicitly concatenated

(ISC003)


77-77: Trailing comma missing

Add trailing comma

(COM812)


84-84: Add return type annotation for get method

Specifying the return type for get will keep our code sleek and elegant.

🧰 Tools
🪛 Ruff (0.8.0)

84-84: Missing return type annotation for public function get

(ANN201)


57-57: Avoid using sys.exit; raise exceptions instead

Using sys.exit is like abruptly ending a purr. Raising exceptions allows for graceful error handling.


63-63: Replace sys.exit with exception raising

Continuing our elegant error handling, raise an exception here instead of calling sys.exit.


66-66: Raise an exception rather than calling sys.exit

Let’s maintain consistency by raising exceptions for error conditions.


72-72: Use exceptions instead of sys.exit for better control

Raising exceptions keeps our library code flexible and user-friendly.


75-78: Raise an exception to handle circular dependencies

Handling circular dependencies with exceptions allows calling code to decide how to respond.

🧰 Tools
🪛 Ruff (0.8.0)

76-77: Explicitly concatenated string should be implicitly concatenated

(ISC003)


77-77: Trailing comma missing

Add trailing comma

(COM812)


80-83: ⚠️ Potential issue

Ensure cleanup of _services_being_created after service creation

To avoid future hiccups, let's remove the service from _services_being_created once it's created.

Apply this change:

     self._services_being_created[name] = True

-    return self._service_instantiators[name](self)
+    try:
+        return self._service_instantiators[name](self)
+    finally:
+        del self._services_being_created[name]

Likely invalid or redundant comment.

tests/unittest/test_language_tag_factory.py (1)

1-39: The test suite is purr-fect

These unit tests are well-crafted and ensure the LanguageTagFactory works as intended. Great job!

🧰 Tools
🪛 Ruff (0.8.0)

25-25: Use a regular assert instead of unittest-style assertEqual

Replace assertEqual(...) with assert ...

(PT009)


26-26: Use a regular assert instead of unittest-style assertEqual

Replace assertEqual(...) with assert ...

(PT009)


33-33: Use a regular assert instead of unittest-style assertIsNotNone

Replace assertIsNotNone(...) with assert ...

(PT009)


34-34: Use a regular assert instead of unittest-style assertEqual

Replace assertEqual(...) with assert ...

(PT009)


35-35: Use a regular assert instead of unittest-style assertEqual

Replace assertEqual(...) with assert ...

(PT009)

.github/workflows/unittest.yml Outdated Show resolved Hide resolved
.github/workflows/unittest.yml Outdated Show resolved Hide resolved
.github/workflows/unittest.yml Outdated Show resolved Hide resolved
.github/workflows/unittest.yml Outdated Show resolved Hide resolved
tests/pytest/test_service_wiring.py Show resolved Hide resolved
.github/workflows/pytest.yml Outdated Show resolved Hide resolved
RELEASE-NOTES-0.2.md Outdated Show resolved Hide resolved
HISTORY.md Outdated Show resolved Hide resolved
src/scaict_uwu/libs/language/language_tag_factory.py Outdated Show resolved Hide resolved
Bug: #76
Change-Id: I6c8f39b2e0ccc238cbe55a7009e8ecb397123dae
winstonsung added a commit that referenced this pull request Dec 2, 2024
Bug: #147
Change-Id: I04dbfb2269ba2c7ba9068e1e4417067285b945eb
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

📜 Review details

Configuration used: .coderabbit.yaml
Review profile: ASSERTIVE

📥 Commits

Reviewing files that changed from the base of the PR and between 197748a and 32a1029.

📒 Files selected for processing (9)
  • .github/workflows/pytest.yml (1 hunks)
  • .github/workflows/unittest.yml (1 hunks)
  • HISTORY.md (1 hunks)
  • RELEASE-NOTES-0.2.md (1 hunks)
  • pyproject.toml (2 hunks)
  • src/scaict_uwu/libs/language/language_tag_factory.py (1 hunks)
  • src/scaict_uwu/service_container.py (1 hunks)
  • tests/pytest/test_service_wiring.py (1 hunks)
  • tests/unittest/test_language_tag_factory.py (1 hunks)
🧰 Additional context used
🪛 yamllint (1.35.1)
.github/workflows/pytest.yml

[warning] 3-3: truthy value should be one of [false, true]

(truthy)


[error] 14-14: too many spaces inside brackets

(brackets)


[error] 14-14: too many spaces inside brackets

(brackets)


[error] 16-16: wrong indentation: expected 6 but found 4

(indentation)

.github/workflows/unittest.yml

[warning] 3-3: truthy value should be one of [false, true]

(truthy)


[error] 14-14: too many spaces inside brackets

(brackets)


[error] 14-14: too many spaces inside brackets

(brackets)


[error] 16-16: wrong indentation: expected 6 but found 4

(indentation)

🪛 LanguageTool
RELEASE-NOTES-0.2.md

[uncategorized] ~51-~51: Possible missing comma found.
Context: ...y localisations are updated regularly. Below only new and removed languages are list...

(AI_HYDRA_LEO_MISSING_COMMA)

HISTORY.md

[style] ~363-~363: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...ture. * Added channel member display. * Added CTF features. * Updated CTF features (W...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[style] ~372-~372: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...the support ticket embed description. * Updated to limit the usage of daily change comm...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[style] ~376-~376: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...dded support for bot status/presence. * Added zap emoji. * Added total point status d...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[style] ~377-~377: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...t status/presence. * Added zap emoji. * Added total point status display. * Updated C...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[style] ~386-~386: Consider using a different verb for a more formal wording.
Context: ...e Analytics. ### Bug fixes in 0.1.1 * Fixed the problem of bot responding to self m...

(FIX_RESOLVE)

🪛 Ruff (0.8.0)
tests/unittest/test_language_tag_factory.py

25-25: Use a regular assert instead of unittest-style assertEqual

Replace assertEqual(...) with assert ...

(PT009)


26-26: Use a regular assert instead of unittest-style assertEqual

Replace assertEqual(...) with assert ...

(PT009)


33-33: Use a regular assert instead of unittest-style assertIsNotNone

Replace assertIsNotNone(...) with assert ...

(PT009)


34-34: Use a regular assert instead of unittest-style assertEqual

Replace assertEqual(...) with assert ...

(PT009)


35-35: Use a regular assert instead of unittest-style assertEqual

Replace assertEqual(...) with assert ...

(PT009)

src/scaict_uwu/service_container.py

22-22: Mutable class attributes should be annotated with typing.ClassVar

(RUF012)


26-26: Mutable class attributes should be annotated with typing.ClassVar

(RUF012)


30-30: Mutable class attributes should be annotated with typing.ClassVar

(RUF012)


34-34: Missing type annotation for function argument module

(ANN001)


44-44: Missing type annotation for function argument service_instantiators

(ANN001)


70-70: Missing return type annotation for public function create

(ANN201)


76-77: Explicitly concatenated string should be implicitly concatenated

(ISC003)


77-77: Trailing comma missing

Add trailing comma

(COM812)


84-84: Missing return type annotation for public function get

(ANN201)

🪛 Markdownlint (0.35.0)
HISTORY.md

5-5: null
Multiple top-level headings in the same document

(MD025, single-title, single-h1)

🪛 actionlint (1.7.4)
.github/workflows/unittest.yml

28-28: shellcheck reported issue in this script: SC2046:warning:1:20: Quote this to prevent word splitting

(shellcheck)

🔇 Additional comments (24)
.github/workflows/unittest.yml (4)

1-7: Purr-fect workflow triggers! 😺

The workflow configuration looks good with appropriate triggers for automated testing.

🧰 Tools
🪛 yamllint (1.35.1)

[warning] 3-3: truthy value should be one of [false, true]

(truthy)


14-14: Fix the spacing in matrix configuration swishes tail

There are extra spaces inside the brackets that should be removed for consistency.

🧰 Tools
🪛 yamllint (1.35.1)

[error] 14-14: too many spaces inside brackets

(brackets)


[error] 14-14: too many spaces inside brackets

(brackets)


15-26: The setup steps need proper indentation tilts head

The steps should be indented with 6 spaces to maintain consistent YAML formatting.

🧰 Tools
🪛 yamllint (1.35.1)

[error] 16-16: wrong indentation: expected 6 but found 4

(indentation)


28-29: Fix the unittest command to prevent word splitting paws at keyboard

The current command is susceptible to word splitting issues if filenames contain spaces.

🧰 Tools
🪛 actionlint (1.7.4)

28-28: shellcheck reported issue in this script: SC2046:warning:1:20: Quote this to prevent word splitting

(shellcheck)

RELEASE-NOTES-0.2.md (1)

1-9: Purr-fect version header, but let's make the warning more prominent! 😺

The version header and warning are good, but for better visibility, consider adding more emphasis to the warning message.

pyproject.toml (2)

8-8: Purr-fect version bump! 😺

The version update to 0.2.0 appropriately reflects the breaking changes from the MySQL Connector Python update.


31-41: ⚠️ Potential issue

Meow! Major dependency updates need attention! 🐱

Significant version updates detected:

  • Flask: 3.0.3 → 3.1.0
  • MySQL Connector Python: 8.4.0 → 9.1.0 (Major version bump!)
  • py-cord: 2.6.0 → 2.6.1

These updates, especially MySQL Connector Python, may introduce breaking changes. Please ensure:

  1. Breaking changes are documented in RELEASE-NOTES-0.2
  2. Migration guide is provided for MySQL Connector Python 9.x
  3. All database interactions are tested with the new version
HISTORY.md (5)

417-425: Purr-fect initial release documentation! 🐱

The initial release section is clear and well-documented, properly noting the addition of essential files (LICENSE and README.md).


1-3: 🧹 Nitpick (assertive)

Purr... The introduction needs more context! 🐱

The introduction could be more informative by including:

  • Purpose of this history file
  • Relationship with RELEASE-NOTES-0.2
  • Versioning scheme being used (e.g., MAJOR.MINOR.PATCH)

7-354: ⚠️ Potential issue

Meow! These placeholder versions need attention! 🐱

Versions 0.1.2 through 0.1.7 contain only "..." entries. Either:

  • Fill in actual changes from these versions
  • Remove empty versions if no changes were made

Would you like me to help gather the actual changes from git history for these versions?


401-406: 🛠️ Refactor suggestion

Meow! Let's clarify the database migration journey! 🐱

The database migration story could be clearer. Here's a suggested structure:

-* Added JSON file as initial database.
-* Updated to use JSON file to get CTF maker role ID.
-* Added SQL database.
-* Migrated user.json to SQL database.
-* Renamed SQL column name from `user_id` to `uid`.
-* Dropped support for `user.json`, use SQL database instead.
+### Database Migration
+1. Initial Implementation:
+   * Introduced JSON-based storage for initial database needs
+   * Utilized JSON file for CTF maker role ID storage
+2. SQL Migration:
+   * Introduced SQL database infrastructure
+   * Migrated user data from JSON to SQL format
+   * Schema improvement: Renamed column `user_id` to `uid`
+3. Completion:
+   * Fully deprecated JSON storage in favor of SQL database

359-379: 🛠️ Refactor suggestion

Purr... Let's organize these features better! 🐱

The features section could be improved by:

  1. Grouping related features together
  2. Using varied verbs for better readability
  3. Consolidating duplicate entries

Here's a suggested structure:

 ### New user-facing features in 0.1.1
 
+#### Voice & Support Features
 * Added dynamic voice channel and support ticket feature
-* Added channel member display
-* Added CTF features
-* Updated CTF features (WIP, can create and list)
 * Added independent update channels
+* Enhanced support ticket embed description
+* Added channel member display
+
+#### CTF System
+* Implemented core CTF functionality
+* Enhanced CTF system with creation and listing capabilities
+* Completed CTF feature set
+
+#### Store & Economy
 * Rewrote the daily charge feature
-* Completed CTF features
+* Implemented SCAICT Store with lottery slot feature
+* Restricted daily change command to specific channel
+* Added total point status display
+
+#### Web Interface
 * Added initial website using Flask
-* Completed course role features
-* Updated design of SCAICT Store
+
+#### Role Management
+* Implemented course role management system
+
+#### Bot Enhancements
+* Added support for bot status/presence
+* Introduced zap emoji

Likely invalid or redundant comment.

🧰 Tools
🪛 LanguageTool

[style] ~363-~363: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...ture. * Added channel member display. * Added CTF features. * Updated CTF features (W...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[style] ~372-~372: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...the support ticket embed description. * Updated to limit the usage of daily change comm...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[style] ~376-~376: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...dded support for bot status/presence. * Added zap emoji. * Added total point status d...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[style] ~377-~377: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...t status/presence. * Added zap emoji. * Added total point status display. * Updated C...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)

src/scaict_uwu/service_container.py (7)

22-22: Let's annotate mutable class attributes with ClassVar for clarity

As a smart cat, I notice that _services, _service_instantiators, and _services_being_created are mutable class attributes. Annotating them with typing.ClassVar will make their shared nature across all instances explicit.

Also applies to: 26-26, 30-30

🧰 Tools
🪛 Ruff (0.8.0)

22-22: Mutable class attributes should be annotated with typing.ClassVar

(RUF012)


34-34: Add missing type annotations for function arguments

Adding type annotations for the parameters module in load_wiring_module and service_instantiators in apply_wiring will make our code as precise as a cat's leap.

Also applies to: 44-44

🧰 Tools
🪛 Ruff (0.8.0)

34-34: Missing type annotation for function argument module

(ANN001)


70-70: Specify return type annotations for public functions

The functions create and get are missing return type annotations. Let's make our return types as clear as a cat's vision.

Also applies to: 84-84

🧰 Tools
🪛 Ruff (0.8.0)

70-70: Missing return type annotation for public function create

(ANN201)


57-57: Replace sys.exit with exceptions for graceful error handling

Using sys.exit is like a cat abruptly leaving the room. Instead, raising exceptions allows for graceful error handling by the calling code.

Also applies to: 63-63, 66-66, 72-72, 75-78


75-78: Simplify string concatenation by implicit joining

We can make string concatenation smoother by placing string literals next to each other, just like a cat weaving through obstacles.

🧰 Tools
🪛 Ruff (0.8.0)

76-77: Explicitly concatenated string should be implicitly concatenated

(ISC003)


77-77: Trailing comma missing

Add trailing comma

(COM812)


62-62: Use if name not in ... for more Pythonic membership tests

Let's be Pythonic and use if name not in ... instead of if not name in .... It reads as elegantly as a cat's stride.

Also applies to: 74-74


80-83: Ensure proper cleanup after creating a service

After creating the service, we should remove name from _services_being_created. Cats always tidy up after themselves!

tests/pytest/test_service_wiring.py (2)

1-3: Enhance the docstring for better clarity

As a smart cat, I think the docstring could be more informative. Let's describe the purpose of these specific tests to make it as clear as a sunny window.


12-17: Consider adding more test cases for comprehensive coverage

The current test is a purr-fect start! Adding tests for empty dictionaries, invalid service names, and actual service instantiation would make our test suite as robust as a cat's reflexes.

.github/workflows/pytest.yml (2)

14-14: Adjust spacing inside brackets in matrix configuration

Let's tidy up the spacing inside brackets to keep our workflow as neat as a cat's whiskers.

🧰 Tools
🪛 yamllint (1.35.1)

[error] 14-14: too many spaces inside brackets

(brackets)


[error] 14-14: too many spaces inside brackets

(brackets)


27-29: Rename the step to accurately reflect the action performed

The step is named "Analysing the code with Pylint" but actually runs pytest. Let's rename it to "Run pytest" to avoid any cat-astrophic confusion.

src/scaict_uwu/libs/language/language_tag_factory.py (1)

49-50: Minor grammatical correction in docstring

Let's adjust the sentence to read: "Return None when it is not a supported Discord locale code." Clear communication is key, just like a cat’s meow.

RELEASE-NOTES-0.2.md Show resolved Hide resolved
RELEASE-NOTES-0.2.md Show resolved Hide resolved
HISTORY.md Outdated Show resolved Hide resolved
tests/unittest/test_language_tag_factory.py Show resolved Hide resolved
Change-Id: I5cbf1b5a106bff43b87509b3348a731f258071ac
winstonsung added a commit that referenced this pull request Dec 2, 2024
Bug: #147
Change-Id: I04dbfb2269ba2c7ba9068e1e4417067285b945eb
Bug: #147
Change-Id: I04dbfb2269ba2c7ba9068e1e4417067285b945eb
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 10

📜 Review details

Configuration used: .coderabbit.yaml
Review profile: ASSERTIVE

📥 Commits

Reviewing files that changed from the base of the PR and between 32a1029 and c786866.

📒 Files selected for processing (9)
  • .github/workflows/black.yml (1 hunks)
  • .github/workflows/merge.yml (1 hunks)
  • .github/workflows/notion.yml (1 hunks)
  • .github/workflows/pylint.yml (1 hunks)
  • .github/workflows/pytest.yml (1 hunks)
  • .github/workflows/unittest.yml (1 hunks)
  • HISTORY.md (1 hunks)
  • RELEASE-NOTES-0.2.md (1 hunks)
  • pyproject.toml (2 hunks)
🧰 Additional context used
🪛 actionlint (1.7.4)
.github/workflows/unittest.yml

28-28: shellcheck reported issue in this script: SC2046:warning:1:20: Quote this to prevent word splitting

(shellcheck)

.github/workflows/merge.yml

33-33: "github.event.pull_request.head.ref" is potentially untrusted. avoid using it directly in inline scripts. instead, pass it through an environment variable. see https://docs.github.com/en/actions/security-guides/security-hardening-for-github-actions for more details

(expression)

.github/workflows/pylint.yml

28-28: shellcheck reported issue in this script: SC2046:warning:1:8: Quote this to prevent word splitting

(shellcheck)

.github/workflows/black.yml

33-33: shellcheck reported issue in this script: SC2046:warning:1:7: Quote this to prevent word splitting

(shellcheck)


43-43: shellcheck reported issue in this script: SC2035:info:1:9: Use ./glob or -- glob so names with dashes won't become options

(shellcheck)

🪛 LanguageTool
HISTORY.md

[style] ~363-~363: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...ture. * Added channel member display. * Added CTF features. * Updated CTF features (W...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[style] ~372-~372: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...the support ticket embed description. * Updated to limit the usage of daily change comm...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[style] ~376-~376: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...dded support for bot status/presence. * Added zap emoji. * Added total point status d...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[style] ~377-~377: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...t status/presence. * Added zap emoji. * Added total point status display. * Updated C...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[style] ~386-~386: Consider using a different verb for a more formal wording.
Context: ...e Analytics. ### Bug fixes in 0.1.1 * Fixed the problem of bot responding to self m...

(FIX_RESOLVE)

RELEASE-NOTES-0.2.md

[uncategorized] ~51-~51: Possible missing comma found.
Context: .... Localisations are updated regularly. Below only new and removed languages are list...

(AI_HYDRA_LEO_MISSING_COMMA)

🪛 Markdownlint (0.35.0)
HISTORY.md

5-5: null
Multiple top-level headings in the same document

(MD025, single-title, single-h1)

🔇 Additional comments (13)
.github/workflows/notion.yml (1)

5-5: Purr-fectly formatted YAML! 😺

Meow! The removal of extra spaces within the array brackets makes the YAML more consistent and cleaner. This formatting change doesn't affect functionality but improves readability. paws up

.github/workflows/pytest.yml (1)

27-29: ⚠️ Potential issue

Purr! The step name doesn't match its action 🐾

The step is named "Analysing the code with Pylint" but it's actually running pytest.

-      - name: Analysing the code with Pylint
+      - name: Run pytest
         run: |
-          pytest tests/pytest/
+          pytest tests/pytest/ -v --cov=. --cov-report=xml

Likely invalid or redundant comment.

.github/workflows/unittest.yml (1)

27-29: ⚠️ Potential issue

Another case of mistaken identity! swishes tail

The step is named "Analysing the code with Pylint" but it's running unittest.

-      - name: Analysing the code with Pylint
+      - name: Run unittest
         run: |
+          # Ensure test files exist
+          if ! git ls-files 'tests/unittest/*.py' > /dev/null; then
+            echo "No test files found!"
+            exit 1
+          fi
           python -m unittest $(git ls-files 'tests/unittest/*.py')

Likely invalid or redundant comment.

🧰 Tools
🪛 actionlint (1.7.4)

28-28: shellcheck reported issue in this script: SC2046:warning:1:20: Quote this to prevent word splitting

(shellcheck)

RELEASE-NOTES-0.2.md (1)

5-5: 🧹 Nitpick (assertive)

Meow! Let's make this warning purr-fectly visible! 😺

Add some emphasis to catch everyone's attention:

-THIS IS NOT A RELEASE YET
+⚠️ THIS IS NOT A RELEASE YET ⚠️

Likely invalid or redundant comment.

pyproject.toml (2)

8-8: Purr-fect version bump! 😺

The version bump to 0.2.0 correctly reflects the breaking changes introduced by the MySQL Connector Python upgrade.


31-33: ⚠️ Potential issue

Meow! Major dependency updates need attention! 🐱

Significant version updates detected:

  • Flask: 3.0.3 → 3.1.0
  • MySQL Connector Python: 8.4.0 → 9.1.0 (Major version bump!)
  • py-cord: 2.6.0 → 2.6.1

Let's check for any MySQL-related code that might need updates:

✅ Verification successful

After analyzing the MySQL usage patterns in the codebase, I can provide a final response:

Purr-fectly safe to upgrade! 😺

The codebase uses basic MySQL operations that are compatible across major versions:

  • Standard SQL syntax for INSERT, UPDATE, SELECT statements
  • Simple cursor operations (execute, fetchone, fetchall)
  • No usage of deprecated features or complex MySQL-specific functionality

The upgrade from MySQL 8.x to 9.x doesn't affect these fundamental operations. All SQL queries follow standard patterns that remain stable across versions.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Search for MySQL connection and query patterns
echo "=== Checking MySQL usage patterns ==="
rg -A 5 "mysql\.connector|cursor\.|execute\(" --type py

# Look for potential breaking changes in MySQL 9.x
echo -e "\n=== Checking for potential breaking changes ==="
ast-grep --pattern 'cursor.$_($$$)' --lang python

Length of output: 29910

.github/workflows/merge.yml (2)

1-18: Purr-fect workflow setup! 😺

The workflow is well-configured with:

  • Appropriate trigger on review submission
  • Required permissions for contents and pull requests
  • Proper checks for review approval and author association

30-34: ⚠️ Potential issue

Hiss! Watch out for those untrusted inputs! 🙀

Using github.event.* directly in Git commands could be dangerous. Let's make it safer:

      - name: Rebase to target branch when needed in order to fast-forward merge
+       env:
+         BASE_REF: ${{ github.event.pull_request.base.ref }}
+         HEAD_REPO: ${{ github.event.pull_request.head.repo.clone_url }}
+         HEAD_REF: ${{ github.event.pull_request.head.ref }}
        run: |
-         git fetch origin ${{ github.event.pull_request.base.ref }}
-         git rebase origin/${{ github.event.pull_request.base.ref }}
+         git fetch origin "$BASE_REF"
+         git rebase "origin/$BASE_REF"
      - name: Push back source branch (head)
        run: |
-         git push "${{ github.event.pull_request.head.repo.clone_url }}" HEAD:${{ github.event.pull_request.head.ref }} --force
+         git push "$HEAD_REPO" HEAD:"$HEAD_REF" --force

Likely invalid or redundant comment.

🧰 Tools
🪛 actionlint (1.7.4)

33-33: "github.event.pull_request.head.ref" is potentially untrusted. avoid using it directly in inline scripts. instead, pass it through an environment variable. see https://docs.github.com/en/actions/security-guides/security-hardening-for-github-actions for more details

(expression)

HISTORY.md (5)

15-15: Purr... These placeholder sections need attention! 🐱

The placeholder sections with "..." entries should either be filled with actual changes or removed if no changes were made.

Also applies to: 73-73, 131-131, 189-189, 247-247, 305-305


51-51: Meow! Let's be precise about language support! 🐱

The statement "Localisations are updated regularly" seems inconsistent with having only one supported language.

Also applies to: 109-109, 167-167, 225-225, 283-283, 341-341, 393-393


401-406: 🛠️ Refactor suggestion

Purr... Let's clarify the database migration journey! 🐱

The database migration entries would be clearer if structured chronologically:

-* Added JSON file as initial database.
-* Updated to use JSON file to get CTF maker role ID.
-* Added SQL database.
-* Migrated user.json to SQL database.
-* Renamed SQL column name from `user_id` to `uid`.
-* Dropped support for `user.json`, use SQL database instead.
+### Database Evolution
+1. Initial JSON Implementation:
+   * Introduced JSON file as initial database
+   * Extended JSON storage for CTF maker role ID
+2. SQL Migration:
+   * Implemented SQL database infrastructure
+   * Migrated user data from JSON to SQL
+   * Optimized schema: Renamed `user_id` to `uid`
+3. Completion:
+   * Deprecated JSON storage in favor of SQL database

Likely invalid or redundant comment.


1-5: 🧹 Nitpick (assertive)

Meow! The document structure needs improvement! 🐱

Having multiple top-level headings (#) can cause confusion. Consider restructuring:

-# History
-
-Change notes from older releases. For current info, see RELEASE-NOTES-0.2.
-
-# SCAICT-uwu 0.1
+# SCAICT-uwu Version History
+
+> Change notes from older releases. For current info, see RELEASE-NOTES-0.2.
+
+## Version 0.1

Likely invalid or redundant comment.

🧰 Tools
🪛 Markdownlint (0.35.0)

5-5: null
Multiple top-level headings in the same document

(MD025, single-title, single-h1)


359-379: 🧹 Nitpick (assertive)

Purr... Let's organize these features better! 🐱

The user-facing features would be clearer if grouped by functionality:

 ### New user-facing features in 0.1.1
 
+#### Voice & Communication
 * Added dynamic voice channel and support ticket feature.
 * Added channel member display.
-* Added CTF features.
-* Updated CTF features (WIP, can create and list).
 * Added independent update channels.
+
+#### CTF System
+* Implemented core CTF functionality
+* Enhanced CTF system with creation and listing capabilities
+* Completed CTF features
+
+#### Store & Economy
 * Rewrote the daily charge feature.
-* Completed CTF features.
+* Implemented SCAICT Store with lottery slot feature
+* Added total point status display
+
+#### Web Interface
 * Added initial website using Flask.
-* Completed course role features.
-* Updated design of SCAICT Store.
+
+#### Role Management
+* Implemented course role management system

Likely invalid or redundant comment.

🧰 Tools
🪛 LanguageTool

[style] ~363-~363: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...ture. * Added channel member display. * Added CTF features. * Updated CTF features (W...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[style] ~372-~372: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...the support ticket embed description. * Updated to limit the usage of daily change comm...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[style] ~376-~376: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...dded support for bot status/presence. * Added zap emoji. * Added total point status d...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[style] ~377-~377: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...t status/presence. * Added zap emoji. * Added total point status display. * Updated C...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)

.github/workflows/pylint.yml Show resolved Hide resolved
.github/workflows/pytest.yml Show resolved Hide resolved
.github/workflows/unittest.yml Show resolved Hide resolved
RELEASE-NOTES-0.2.md Show resolved Hide resolved
RELEASE-NOTES-0.2.md Show resolved Hide resolved
RELEASE-NOTES-0.2.md Show resolved Hide resolved
.github/workflows/merge.yml Show resolved Hide resolved
.github/workflows/black.yml Show resolved Hide resolved
.github/workflows/black.yml Show resolved Hide resolved
.github/workflows/black.yml Show resolved Hide resolved
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants