Compare commits
No commits in common. "v1.2.2" and "v1.2.1" have entirely different histories.
1
.gitignore
vendored
1
.gitignore
vendored
@ -30,7 +30,6 @@ env/
|
|||||||
.config/
|
.config/
|
||||||
config*.yaml
|
config*.yaml
|
||||||
!config.yaml.example
|
!config.yaml.example
|
||||||
.archive/
|
|
||||||
|
|
||||||
# Logs
|
# Logs
|
||||||
*.log
|
*.log
|
||||||
|
|||||||
39
CHANGELOG.md
39
CHANGELOG.md
@ -7,37 +7,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
|
|
||||||
## [Unreleased]
|
## [Unreleased]
|
||||||
|
|
||||||
## [1.2.2] - 2025-02-25
|
## [1.2.1] - 2024-07-10
|
||||||
|
|
||||||
### Added
|
|
||||||
- Improved stream reconnection verification with log entries
|
|
||||||
- Enhanced metadata endpoint discovery with multiple URL patterns
|
|
||||||
- Expanded error handling and logging for metadata fetching
|
|
||||||
|
|
||||||
### Changed
|
|
||||||
- Refactored stream monitoring for better stability
|
|
||||||
- Updated metadata parsing to handle varied source formats
|
|
||||||
- General project cleanup and housekeeping
|
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
- Stream reconnection edge cases and timeout handling
|
- Removed redundant "(admin only)" text from help command output when admin commands are already grouped under the Admin section
|
||||||
- JSON metadata parsing reliability
|
- Improved help command to only show "(admin only)" when a specific admin command is queried
|
||||||
- Various validations
|
|
||||||
|
|
||||||
|
## [1.2.0] - 2024-07-01
|
||||||
## [1.2.1] - 2025-02-25
|
|
||||||
|
|
||||||
### Added
|
|
||||||
- Improved stream reconnection logic with automatic retry
|
|
||||||
- Enhanced metadata fetching with better error handling
|
|
||||||
- Expanded logging for better troubleshooting
|
|
||||||
|
|
||||||
### Fixed
|
|
||||||
- Issue with metadata parsing for certain stream formats
|
|
||||||
- Stream monitoring stability improvements
|
|
||||||
- Connection timeout handling
|
|
||||||
|
|
||||||
## [1.2.0] - 2025-02-25
|
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
- New admin commands:
|
- New admin commands:
|
||||||
@ -56,7 +32,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
- Improved the BotManager class to support the new terminal commands
|
- Improved the BotManager class to support the new terminal commands
|
||||||
- Updated configuration example to include the new quiet_on_start option
|
- Updated configuration example to include the new quiet_on_start option
|
||||||
|
|
||||||
## [1.0.1] - 2025-02-24
|
## [1.0.1] - 2024-02-24
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
- Configurable logging levels via config.yaml
|
- Configurable logging levels via config.yaml
|
||||||
@ -94,7 +70,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
### Other
|
### Other
|
||||||
- Added version information
|
- Added version information
|
||||||
|
|
||||||
## [1.0.0] - 2025-02-23
|
## [1.0.0] - 2024-02-23
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
- Initial release
|
- Initial release
|
||||||
@ -105,8 +81,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
- Multi-bot support
|
- Multi-bot support
|
||||||
- Configuration via YAML files
|
- Configuration via YAML files
|
||||||
|
|
||||||
[Unreleased]: https://code.cottongin.xyz/cottongin/Icecast-metadata-IRC-announcer/compare/v1.2.2...HEAD
|
[Unreleased]: https://code.cottongin.xyz/cottongin/Icecast-metadata-IRC-announcer/compare/v1.2.1...HEAD
|
||||||
[1.2.2]: https://code.cottongin.xyz/cottongin/Icecast-metadata-IRC-announcer/compare/v1.2.1...v1.2.2
|
|
||||||
[1.2.1]: https://code.cottongin.xyz/cottongin/Icecast-metadata-IRC-announcer/compare/v1.2.0...v1.2.1
|
[1.2.1]: https://code.cottongin.xyz/cottongin/Icecast-metadata-IRC-announcer/compare/v1.2.0...v1.2.1
|
||||||
[1.2.0]: https://code.cottongin.xyz/cottongin/Icecast-metadata-IRC-announcer/compare/v1.0.1...v1.2.0
|
[1.2.0]: https://code.cottongin.xyz/cottongin/Icecast-metadata-IRC-announcer/compare/v1.0.1...v1.2.0
|
||||||
[1.0.1]: https://code.cottongin.xyz/cottongin/Icecast-metadata-IRC-announcer/compare/v1.0.0...v1.0.1
|
[1.0.1]: https://code.cottongin.xyz/cottongin/Icecast-metadata-IRC-announcer/compare/v1.0.0...v1.0.1
|
||||||
|
|||||||
38
TODO.md
38
TODO.md
@ -1,26 +1,16 @@
|
|||||||
## TODO 🚧
|
## TODO
|
||||||
|
|
||||||
- ⭐️ Better, more clear, logging
|
- Better, more clear, logging
|
||||||
- Notification system for stream admin (and bot admin)
|
- Add a help command
|
||||||
- Send notification if unexpected change in metadata
|
- Add commands to control the stream connection from IRC
|
||||||
- Loss of network/stream
|
- Also to start/stop the service entirely
|
||||||
- Live notifications (alt. for PodPing ish)
|
- Add a version command
|
||||||
- Implement `quiet mode`
|
- Add a list of commands to the README
|
||||||
- ⭐️ Add whitelist feature
|
|
||||||
- Add commands:
|
|
||||||
- To check the status of the bot
|
|
||||||
- To check the status of the stream
|
|
||||||
- To check the status of the IRC connection
|
|
||||||
- Version command
|
|
||||||
- Enable joining multiple channels with a single bot instance
|
- Enable joining multiple channels with a single bot instance
|
||||||
|
- Add a command to force the bot to reconnect to the stream
|
||||||
## Complete! 🎉
|
- Add a command to check the status of the bot
|
||||||
|
- Add a command to check the status of the stream
|
||||||
- ✅ Move this to a TODO.md file 😊
|
- Add a command to check the status of the IRC connection
|
||||||
- 🟢 Added commands:
|
- Add a command to check the status of the bot
|
||||||
- ✅ Add `quiet mode` relevant commands
|
- Add a command to check the status of the stream
|
||||||
- ✅ Add a help command
|
- Move this to a TODO.md file :)
|
||||||
- ✅ To control the stream connection from IRC
|
|
||||||
- ✅ To start/stop the service entirely
|
|
||||||
- ✅ To quiet/unquiet the metadata announcing
|
|
||||||
- ✅ Add a list of commands to the README
|
|
||||||
24
bot.sh
Executable file
24
bot.sh
Executable file
@ -0,0 +1,24 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Check if any arguments were provided
|
||||||
|
if [ $# -eq 0 ]; then
|
||||||
|
echo "Usage: $0 <config.yaml> [additional configs...]"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
while true; do
|
||||||
|
# Remove any existing restart flags before starting
|
||||||
|
rm -f .restart_flag_*
|
||||||
|
|
||||||
|
python main.py "$@"
|
||||||
|
|
||||||
|
# Check for any restart flags
|
||||||
|
if ls .restart_flag_* 1> /dev/null 2>&1; then
|
||||||
|
echo "Restart flag(s) found, restarting bot(s)..."
|
||||||
|
sleep 1
|
||||||
|
continue
|
||||||
|
else
|
||||||
|
echo "Bot(s) exited without restart flag, stopping..."
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
12
launch.py
Normal file
12
launch.py
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
import asyncio
|
||||||
|
from main import run_multiple_bots
|
||||||
|
|
||||||
|
CONFIG_FILES = [
|
||||||
|
'config_station1.yaml',
|
||||||
|
'config_station2.yaml',
|
||||||
|
'config_station3.yaml'
|
||||||
|
]
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
asyncio.run(run_multiple_bots(CONFIG_FILES))
|
||||||
19
main.py
19
main.py
@ -11,6 +11,7 @@ import argparse
|
|||||||
import yaml
|
import yaml
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import List, Optional
|
from typing import List, Optional
|
||||||
|
import sys
|
||||||
import inspect
|
import inspect
|
||||||
import socket
|
import socket
|
||||||
import tempfile
|
import tempfile
|
||||||
@ -58,6 +59,17 @@ def silent_client_init(self, *args, bot_name: str = None, config: dict = None, *
|
|||||||
original_init = Client.__init__
|
original_init = Client.__init__
|
||||||
Client.__init__ = silent_client_init
|
Client.__init__ = silent_client_init
|
||||||
|
|
||||||
|
import asyncio
|
||||||
|
import aiohttp
|
||||||
|
import time
|
||||||
|
import argparse
|
||||||
|
import yaml
|
||||||
|
from pathlib import Path
|
||||||
|
from typing import List, Optional
|
||||||
|
import sys
|
||||||
|
import inspect
|
||||||
|
import socket
|
||||||
|
import tempfile
|
||||||
|
|
||||||
class RestartManager:
|
class RestartManager:
|
||||||
"""Manages restart requests for the bot.
|
"""Manages restart requests for the bot.
|
||||||
@ -478,8 +490,11 @@ class IcecastBot:
|
|||||||
if handler and handler.__doc__:
|
if handler and handler.__doc__:
|
||||||
# Get the first line of the docstring
|
# Get the first line of the docstring
|
||||||
first_line = handler.__doc__.strip().split('\n')[0]
|
first_line = handler.__doc__.strip().split('\n')[0]
|
||||||
# Format it using the template and add (admin only) if needed
|
# Extract the description part after the colon
|
||||||
desc = first_line.split(':', 1)[1].strip()
|
desc = first_line.split(':', 1)[1].strip()
|
||||||
|
# Add (admin only) for specific command queries
|
||||||
|
if pattern in self.admin_commands:
|
||||||
|
desc = f"{desc} (admin only)"
|
||||||
help_text = self.help_specific_format.format(
|
help_text = self.help_specific_format.format(
|
||||||
prefix=self.cmd_prefix,
|
prefix=self.cmd_prefix,
|
||||||
cmd=pattern,
|
cmd=pattern,
|
||||||
@ -1187,7 +1202,7 @@ class IcecastBot:
|
|||||||
if handler and handler.__doc__:
|
if handler and handler.__doc__:
|
||||||
# Extract the first line of the docstring
|
# Extract the first line of the docstring
|
||||||
first_line = handler.__doc__.strip().split('\n')[0]
|
first_line = handler.__doc__.strip().split('\n')[0]
|
||||||
# Remove the command prefix and colon
|
# Extract the description part after the colon
|
||||||
desc = first_line.split(':', 1)[1].strip()
|
desc = first_line.split(':', 1)[1].strip()
|
||||||
|
|
||||||
commands.append(section_config['format'].format(
|
commands.append(section_config['format'].format(
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user