4 Commits

Author SHA1 Message Date
Logan Cusano
b65bea7856 create stable and nightly builds
All checks were successful
Lint / lint (push) Successful in 19s
release-tag / release-image (push) Successful in 1h6m26s
2025-07-13 01:03:03 -04:00
Logan Cusano
bd8deeb44e Fix typo in the presence endpoint
All checks were successful
release-tag / release-image (push) Successful in 1h15m13s
Lint / lint (push) Successful in 11s
2025-07-06 19:34:27 -04:00
7f455f427e Merge pull request 'implement-bot-presence' (#6) from implement-bot-presence into master
All checks were successful
release-tag / release-image (push) Successful in 1h14m4s
Lint / lint (push) Successful in 10s
Reviewed-on: #6
2025-06-29 15:56:03 -04:00
Logan Cusano
ddfa9fc2a3 Linting
All checks were successful
Lint / lint (pull_request) Successful in 6s
2025-06-29 15:53:15 -04:00
7 changed files with 77 additions and 22 deletions

View File

@@ -0,0 +1,57 @@
name: release-tag
on:
push:
branches:
- dev
jobs:
release-image:
runs-on: ubuntu-latest
env:
DOCKER_LATEST: stable
CONTAINER_NAME: drb-client-discord-bot
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker BuildX
uses: docker/setup-buildx-action@v3
with: # replace it with your local IP
config-inline: |
[registry."git.vpn.cusano.net"]
http = false
insecure = false
- name: Login to DockerHub
uses: docker/login-action@v3
with:
registry: git.vpn.cusano.net # replace it with your local IP
username: ${{ secrets.GIT_REPO_USERNAME }}
password: ${{ secrets.GIT_REPO_PASSWORD }}
- name: Get Meta
id: meta
run: |
echo REPO_NAME=$(echo ${GITHUB_REPOSITORY} | awk -F"/" '{print $2}') >> $GITHUB_OUTPUT
echo REPO_VERSION=$(git describe --tags --always | sed 's/^v//') >> $GITHUB_OUTPUT
- name: Validate build configuration
uses: docker/build-push-action@v6
with:
call: check
- name: Build and push
uses: docker/build-push-action@v6
with:
context: .
file: ./Dockerfile
platforms: |
linux/arm64
push: true
tags: | # replace it with your local IP and tags
git.vpn.cusano.net/${{ vars.DOCKER_ORG }}/${{ steps.meta.outputs.REPO_NAME }}/${{ env.CONTAINER_NAME }}:${{ steps.meta.outputs.REPO_VERSION }}
git.vpn.cusano.net/${{ vars.DOCKER_ORG }}/${{ steps.meta.outputs.REPO_NAME }}/${{ env.CONTAINER_NAME }}:${{ env.DOCKER_LATEST }}

View File

@@ -9,7 +9,7 @@ jobs:
release-image: release-image:
runs-on: ubuntu-latest runs-on: ubuntu-latest
env: env:
DOCKER_LATEST: nightly DOCKER_LATEST: stable
CONTAINER_NAME: drb-client-discord-bot CONTAINER_NAME: drb-client-discord-bot
steps: steps:
- name: Checkout - name: Checkout

View File

@@ -75,10 +75,10 @@ class DiscordBotManager:
LOGGER.info("Bot is ready, start_bot returning.") LOGGER.info("Bot is ready, start_bot returning.")
return return
except asyncio.TimeoutError: except asyncio.TimeoutError:
LOGGER.error("Timeout waiting for bot to become ready. Bot might have failed to start.") LOGGER.error("Timeout waiting for bot to become ready. Bot might have failed to start.")
if self.bot_task and not self.bot_task.done(): if self.bot_task and not self.bot_task.done():
self.bot_task.cancel() self.bot_task.cancel()
raise RuntimeError("Bot failed to become ready within timeout.") raise RuntimeError("Bot failed to become ready within timeout.")
async def stop_bot(self): async def stop_bot(self):
async with self.lock: async with self.lock:
@@ -130,8 +130,8 @@ class DiscordBotManager:
LOGGER.info("Bot joined voice, returning.") LOGGER.info("Bot joined voice, returning.")
return return
except asyncio.TimeoutError: except asyncio.TimeoutError:
LOGGER.error("Timeout waiting for bot to join voice.") LOGGER.error("Timeout waiting for bot to join voice.")
raise RuntimeError("Bot failed to join voice within timeout.") raise RuntimeError("Bot failed to join voice within timeout.")
async def leave_voice_channel(self, guild_id: int): async def leave_voice_channel(self, guild_id: int):
if not self.bot: if not self.bot:

View File

@@ -1,6 +1,6 @@
import csv import csv
import json import json
from models import ConfigGenerator, DecodeMode, ChannelConfig, DeviceConfig, TrunkingConfig, TrunkingChannelConfig, AudioConfig, TerminalConfig, TalkgroupTag from models import TalkgroupTag
from typing import List from typing import List
from internal.logger import create_logger from internal.logger import create_logger
@@ -67,4 +67,4 @@ def get_current_system_from_config() -> str:
first_channel = data["channels"][0] first_channel = data["channels"][0]
if "name" in first_channel: if "name" in first_channel:
return first_channel["name"] return first_channel["name"]
return None return None

View File

@@ -5,7 +5,8 @@ from internal.logger import create_logger
LOGGER = create_logger(__name__) LOGGER = create_logger(__name__)
def create_bot_router(bot_manager: DiscordBotManager): # Function to create router # Function to create router
def create_bot_router(bot_manager: DiscordBotManager):
router = APIRouter() router = APIRouter()
# API Endpoints # API Endpoints
@@ -53,5 +54,5 @@ def create_bot_router(bot_manager: DiscordBotManager): # Function to create rout
"active_token": bot_manager.token "active_token": bot_manager.token
} }
return status return status
return router # Return the configured router return router

View File

@@ -3,10 +3,9 @@ import subprocess
import os import os
import signal import signal
import json import json
from models import ConfigGenerator, DecodeMode, ChannelConfig, DeviceConfig, TrunkingConfig, TrunkingChannelConfig, AudioConfig, TerminalConfig, TalkgroupTag from models import ConfigGenerator, DecodeMode, ChannelConfig, DeviceConfig, TrunkingConfig, TrunkingChannelConfig, AudioConfig, TerminalConfig
from internal.logger import create_logger from internal.logger import create_logger
from internal.bot_manager import DiscordBotManager from internal.bot_manager import DiscordBotManager
from typing import List
from internal.op25_config_utls import save_talkgroup_tags, save_whitelist, del_none_in_dict, get_current_system_from_config from internal.op25_config_utls import save_talkgroup_tags, save_whitelist, del_none_in_dict, get_current_system_from_config
LOGGER = create_logger(__name__) LOGGER = create_logger(__name__)
@@ -115,14 +114,13 @@ def create_op25_router(bot_manager: DiscordBotManager):
except Exception as e: except Exception as e:
raise HTTPException(status_code=500, detail=str(e)) raise HTTPException(status_code=500, detail=str(e))
@router.post("/update-prensece") @router.post("/update-presence")
async def update_prensece(): async def update_presence():
current_system = get_current_system_from_config() current_system = get_current_system_from_config()
if not current_system: if not current_system:
raise HTTPException(status_code=500, detail="Unable to get current system.") raise HTTPException(status_code=500, detail="Unable to get current system.")
await bot_manager.set_presence(current_system) await bot_manager.set_presence(current_system)
return current_system return current_system
return router
return router

View File

@@ -4,5 +4,4 @@ numpy==1.24.3
uvicorn uvicorn
fastapi fastapi
pyaudio pyaudio
argparse argparse
pyaudio