Files
meshcore-bot/modules/commands/ping_command.py
T
agessaman 2c971875c1 refactor(commands): share the pubkey ACL check and the [Keywords] response format
S4. _check_admin_access and announcements' _check_announcements_access ran the same pubkey validation and logging, differing only in wording; both now call BaseCommand._pubkey_in_acl(message, acl, kind, denied), which builds each log line from those two words, so every line keeps its exact text and level. The admin check still runs it inside its try, announcements outside, as before.

ping and magic8 had identical get_response_format overrides reading [Keywords] <name>; a keywords_format_key class attribute on BaseCommand now does that, and commands without one still get None. typing.Optional stays importable from both modules.

Old-vs-new over 20,000 randomized configs and senders (missing, malformed, mixed-case and listed keys; missing sections; quoted and empty formats) matched on results and log calls; three mutations were each caught.
2026-10-03 22:34:11 -07:00

61 lines
1.7 KiB
Python

#!/usr/bin/env python3
"""
Ping command for the MeshCore Bot
Handles the 'ping' keyword response
"""
from typing import Optional # noqa: F401 importable from this module on dev
from ..models import MeshMessage
from .base_command import BaseCommand
class PingCommand(BaseCommand):
"""Handles the ping command.
A simple diagnostic command that responds with 'Pong!' or a custom configured response
to verify bot connectivity and responsiveness.
"""
# Plugin metadata
name = "ping"
honors_skip_channel_check = False
enabled_attr = "ping_enabled"
keywords_format_key = "ping"
keywords = ['ping']
description = "Responds to 'ping' with 'Pong!'"
category = "basic"
# Documentation
short_description = "Get a quick 'pong'response from the bot"
usage = "ping"
examples = ["ping"]
def __init__(self, bot):
"""Initialize the ping command.
Args:
bot: The bot instance.
"""
super().__init__(bot)
self.ping_enabled = self.get_config_value('Ping_Command', 'enabled', fallback=True, value_type='bool')
def get_help_text(self, message: MeshMessage | None = None) -> str:
"""Get help text for the ping command.
Returns:
str: The help text for this command.
"""
return self.translate('commands.ping.description')
async def execute(self, message: MeshMessage) -> bool:
"""Execute the ping command.
Args:
message: The message that triggered the command.
Returns:
bool: True if the response was sent successfully, False otherwise.
"""
return await self.handle_keyword_match(message)