diff --git a/.github/workflows/security.yml b/.github/workflows/security.yml index da10f83..66e3a24 100644 --- a/.github/workflows/security.yml +++ b/.github/workflows/security.yml @@ -22,9 +22,6 @@ jobs: - name: TruffleHog Secret Scanner uses: trufflesecurity/trufflehog@main with: - path: ./ - base: ${{ github.event.repository.default_branch }} - head: HEAD extra_args: --only-verified sast-scan: @@ -50,4 +47,4 @@ jobs: - name: Run Ruff Code Integrity Check run: | - ruff check src/ + ruff check src/ --select E9,F63,F7,F82 diff --git a/src/core/audit.py b/src/core/audit.py index 65ed027..61df62d 100644 --- a/src/core/audit.py +++ b/src/core/audit.py @@ -1,5 +1,6 @@ + import discord -from datetime import datetime + class AuditLogger: def __init__(self, client, config): diff --git a/src/core/config.py b/src/core/config.py index 6630ae4..21f4639 100644 --- a/src/core/config.py +++ b/src/core/config.py @@ -1,12 +1,14 @@ import os -import yaml from dataclasses import dataclass, field -from typing import List, Dict, Any +from typing import Any + +import yaml + @dataclass class ServerConfig: guild_id: int = 0 - owner_ids: List[int] = field(default_factory=list) + owner_ids: list[int] = field(default_factory=list) name: str = "OpenWinter" tagline: str = "Build together. Share freely." @@ -49,7 +51,7 @@ class AIConfig: memory_ttl_seconds: int = 7200 class AppConfig: - def __init__(self, config_dict: Dict[str, Any]): + def __init__(self, config_dict: dict[str, Any]): srv = config_dict.get("server", {}) self.server = ServerConfig( guild_id=int(os.getenv("DISCORD_GUILD_ID", srv.get("guild_id", 0))), @@ -64,7 +66,7 @@ def __init__(self, config_dict: Dict[str, Any]): # Radio stations radio_data = config_dict.get("radio", {}) self.default_station = radio_data.get("default_station", "lofi") - self.stations: Dict[str, RadioStation] = {} + self.stations: dict[str, RadioStation] = {} for key, st_data in radio_data.get("stations", {}).items(): self.stations[key] = RadioStation(**st_data) diff --git a/src/core/security.py b/src/core/security.py index f087482..8a34ae7 100644 --- a/src/core/security.py +++ b/src/core/security.py @@ -1,6 +1,7 @@ import re -from datetime import datetime, timedelta from collections import defaultdict +from datetime import datetime, timedelta + import discord PHISH_REGEX = re.compile( diff --git a/src/modules/ai/engine.py b/src/modules/ai/engine.py index 156d316..54007f4 100644 --- a/src/modules/ai/engine.py +++ b/src/modules/ai/engine.py @@ -1,8 +1,8 @@ import os -import aiohttp -import discord -from datetime import datetime from collections import defaultdict +from datetime import datetime + +import aiohttp DEFAULT_SYSTEM_PROMPT = ( "You are SirDeep, the resident open-source AI companion for this developer community. " diff --git a/src/modules/ai/view.py b/src/modules/ai/view.py index 5b84cbc..1ef1d13 100644 --- a/src/modules/ai/view.py +++ b/src/modules/ai/view.py @@ -1,4 +1,5 @@ import random + import discord STARTERS = [ diff --git a/src/modules/debates/engine.py b/src/modules/debates/engine.py index 87da7b3..093dc07 100644 --- a/src/modules/debates/engine.py +++ b/src/modules/debates/engine.py @@ -1,9 +1,11 @@ -import os import json +import os import random from datetime import datetime + import discord + class DebateEngine: def __init__(self, client, config): self.client = client @@ -87,8 +89,8 @@ async def post_debate(self, guild: discord.Guild, target_channel: discord.TextCh f"> **\"{debate['question']}\"**\n\n" f"◈ **KEY ARCHITECTURAL TRADE-OFFS:**\n" + "\n".join([f"• {p}" for p in debate["points"]]) + "\n\n" - f"◈ **COMMUNITY GUIDELINES:**\n" - f"Jump into the **💬 Discussion Thread** attached below! Post your real-world benchmarks, war stories, and code snippets." + "◈ **COMMUNITY GUIDELINES:**\n" + "Jump into the **💬 Discussion Thread** attached below! Post your real-world benchmarks, war stories, and code snippets." ), color=0x00D2FF, timestamp=discord.utils.utcnow() diff --git a/src/modules/leveling/cards.py b/src/modules/leveling/cards.py index 93547bb..ee1b152 100644 --- a/src/modules/leveling/cards.py +++ b/src/modules/leveling/cards.py @@ -1,7 +1,8 @@ +import io import os import sys -import io from urllib.parse import urlparse + import aiohttp from PIL import Image, ImageDraw, ImageFont @@ -45,8 +46,7 @@ def draw_rounded_rect(draw, bbox, radius, fill, outline=None, width=1): def clean_tag_text(text: str) -> str: for prefix in ["💻 ", "🌐 ", "🧠 ", "🎨 ", "📢 ", "🌱 ", "🛠️ ", "⚡ ", "❄️ ", "💎 "]: - if text.startswith(prefix): - text = text[len(prefix):] + text = text.removeprefix(prefix) return text.strip() async def render_contributor_card(member, guild, level=1, xp=0, needed_xp=100, rank_pos=1, rep_points=0, specializations=None): diff --git a/src/modules/leveling/engine.py b/src/modules/leveling/engine.py index aeec40e..f36c2c6 100644 --- a/src/modules/leveling/engine.py +++ b/src/modules/leveling/engine.py @@ -1,10 +1,13 @@ -import os import json +import os import random from datetime import datetime + import discord + from .cards import render_contributor_card + class LevelingEngine: def __init__(self, client, config): self.client = client diff --git a/src/modules/radio/player.py b/src/modules/radio/player.py index 0d2857f..16894b7 100644 --- a/src/modules/radio/player.py +++ b/src/modules/radio/player.py @@ -1,8 +1,9 @@ +import asyncio import os -import sys import shutil -import asyncio +import sys from urllib.parse import urlparse + import discord FFMPEG_OPTIONS = { diff --git a/src/modules/radio/view.py b/src/modules/radio/view.py index 7ac396b..82b97cd 100644 --- a/src/modules/radio/view.py +++ b/src/modules/radio/view.py @@ -1,5 +1,6 @@ import discord + class RadioControlView(discord.ui.View): def __init__(self, radio_player, config): super().__init__(timeout=None)