mirror of
https://github.com/agessaman/meshcore-bot.git
synced 2026-11-02 02:52:22 +00:00
S4. BaseCommand and the 40 bundled overrides that took no argument now take `message: MeshMessage | None = None`, matching joke and rain, which already use the message. None of the 40 bodies read it, so their help text is unchanged. help and command_manager keep their TypeError retry, since local plugins may still implement get_help_text(self). For bundled commands the retry no longer runs: `help <command>` calls get_help_text(message) once instead of failing and calling it again. A new test pins the signature for every bundled command class. The offline smoke run against the real config produces the same help text for all 46 commands.
71 lines
2.2 KiB
Python
71 lines
2.2 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
HF Conditions Command - Provides HF band conditions for ham radio
|
|
"""
|
|
|
|
from ..models import MeshMessage
|
|
from ..solar_conditions import hf_band_conditions
|
|
from .base_command import BaseCommand
|
|
|
|
|
|
class HfcondCommand(BaseCommand):
|
|
"""Command to get HF band conditions.
|
|
|
|
Retrieves and displays propagation conditions for High Frequency (HF) bands,
|
|
useful for amateur radio operators.
|
|
"""
|
|
|
|
# Plugin metadata
|
|
# Read-only informational output; safe for scheduled {cmd:...} rendering.
|
|
render_safe = True
|
|
name = "hfcond"
|
|
honors_skip_channel_check = False
|
|
enabled_attr = "hfcond_enabled"
|
|
keywords = ['hfcond']
|
|
description = "Get HF band conditions for ham radio"
|
|
category = "solar"
|
|
requires_internet = True # Requires internet access for hamqsl.com API
|
|
|
|
# Documentation
|
|
short_description = "Get HF band conditions for ham radio"
|
|
usage = "hfcond"
|
|
examples = ["hfcond"]
|
|
|
|
def __init__(self, bot):
|
|
"""Initialize the hfcond command.
|
|
|
|
Args:
|
|
bot: The MeshCoreBot instance.
|
|
"""
|
|
super().__init__(bot)
|
|
self.hfcond_enabled = self.get_config_value('Hfcond_Command', 'enabled', fallback=True, value_type='bool')
|
|
|
|
async def execute(self, message: MeshMessage) -> bool:
|
|
"""Execute the hfcond command.
|
|
|
|
Args:
|
|
message: The message that triggered the command.
|
|
|
|
Returns:
|
|
bool: True if executed successfully, False otherwise.
|
|
"""
|
|
try:
|
|
# Get HF band conditions
|
|
hf_info = hf_band_conditions()
|
|
|
|
# Send response using unified method
|
|
response = self.translate('commands.hfcond.header', info=hf_info)
|
|
return await self.send_response(message, response)
|
|
|
|
except Exception as e:
|
|
error_msg = self.translate('commands.hfcond.error', error=str(e))
|
|
return await self.send_response(message, error_msg)
|
|
|
|
def get_help_text(self, message: MeshMessage | None = None) -> str:
|
|
"""Get help text for this command.
|
|
|
|
Returns:
|
|
str: The help text for this command.
|
|
"""
|
|
return self.translate('commands.hfcond.help')
|