mirror of
https://github.com/agessaman/meshcore-bot.git
synced 2026-11-01 10:32:23 +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.
77 lines
2.4 KiB
Python
77 lines
2.4 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Solar Command - Provides solar conditions and HF band information
|
|
"""
|
|
|
|
from ..models import MeshMessage
|
|
from ..solar_conditions import solar_conditions
|
|
from .base_command import BaseCommand
|
|
|
|
|
|
class SolarCommand(BaseCommand):
|
|
"""Command to get solar conditions.
|
|
|
|
Provides information about current solar activity (SFI, sunspots, A-index, K-index)
|
|
and improved HF band conditions.
|
|
"""
|
|
|
|
# Plugin metadata
|
|
# Read-only informational output; safe for scheduled {cmd:...} rendering.
|
|
render_safe = True
|
|
name = "solar"
|
|
honors_skip_channel_check = False
|
|
enabled_attr = "solar_enabled"
|
|
keywords = ['solar']
|
|
description = "Get current solar conditions and HF band info"
|
|
category = "solar"
|
|
requires_internet = True # Requires internet access for hamqsl.com API
|
|
|
|
# Documentation
|
|
short_description = "Get current solar conditions and HF band info"
|
|
usage = "solar"
|
|
examples = ["solar"]
|
|
|
|
def __init__(self, bot):
|
|
"""Initialize the solar command.
|
|
|
|
Args:
|
|
bot: The MeshCoreBot instance.
|
|
"""
|
|
super().__init__(bot)
|
|
self.solar_enabled = self.get_config_value('Solar_Command', 'enabled', fallback=True, value_type='bool')
|
|
|
|
async def execute(self, message: MeshMessage) -> bool:
|
|
"""Execute the solar command.
|
|
|
|
Retrieves solar conditions and sends a formatted response to the user.
|
|
|
|
Args:
|
|
message: The message that triggered the command.
|
|
|
|
Returns:
|
|
bool: True if executed successfully, False otherwise.
|
|
"""
|
|
try:
|
|
# Get solar conditions (more readable format)
|
|
solar_info = solar_conditions()
|
|
|
|
# Send response (solar only, more readable)
|
|
response = self.translate('commands.solar.response', info=solar_info)
|
|
|
|
# Use the unified send_response method
|
|
return await self.send_response(message, response)
|
|
|
|
|
|
except Exception as e:
|
|
error_msg = self.translate('commands.solar.error', error=str(e))
|
|
await self.send_response(message, error_msg)
|
|
return False
|
|
|
|
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.solar.help')
|