feat: implement /deb and /city command handlers for the bot.

This commit is contained in:
2569718930@qq.com
2026-03-14 22:05:09 +08:00
parent 314cad82e6
commit 9bff3b0683
2 changed files with 44 additions and 4 deletions
+22 -2
View File
@@ -55,16 +55,36 @@ class CityCommandHandler:
self.guard = guard
self.city_service = city_service
self.io_layer = io_layer
self._handled_message_keys: set[tuple[Any, Any]] = set()
def _mark_handled_once(self, message: Any) -> bool:
chat_id = getattr(getattr(message, "chat", None), "id", None)
message_id = getattr(message, "message_id", None)
key = (chat_id, message_id)
if key in self._handled_message_keys:
return False
self._handled_message_keys.add(key)
if len(self._handled_message_keys) > 4096:
self._handled_message_keys.clear()
return True
def register(self) -> None:
@self.bot.message_handler(commands=["city"])
def _city_command(message):
self.handle(message)
@self.bot.message_handler(
func=lambda message: _is_city_command_text(getattr(message, "text", None)),
regexp=r"^[//⁄∕╱⧸]\s*city(@[A-Za-z0-9_]+)?(\s|$)",
content_types=["text"],
)
def _city(message):
def _city_regex(message):
self.handle(message)
def handle(self, message: Any) -> None:
if not self._mark_handled_once(message):
return
if not _is_city_command_text(getattr(message, "text", None)):
return
trace = CommandTrace("/city", message)
try:
parts = (message.text or "").split(maxsplit=1)
+22 -2
View File
@@ -55,16 +55,36 @@ class DebCommandHandler:
self.guard = guard
self.deb_service = deb_service
self.io_layer = io_layer
self._handled_message_keys: set[tuple[Any, Any]] = set()
def _mark_handled_once(self, message: Any) -> bool:
chat_id = getattr(getattr(message, "chat", None), "id", None)
message_id = getattr(message, "message_id", None)
key = (chat_id, message_id)
if key in self._handled_message_keys:
return False
self._handled_message_keys.add(key)
if len(self._handled_message_keys) > 4096:
self._handled_message_keys.clear()
return True
def register(self) -> None:
@self.bot.message_handler(commands=["deb"])
def _deb_command(message):
self.handle(message)
@self.bot.message_handler(
func=lambda message: _is_deb_command_text(getattr(message, "text", None)),
regexp=r"^[//⁄∕╱⧸]\s*deb(@[A-Za-z0-9_]+)?(\s|$)",
content_types=["text"],
)
def _deb(message):
def _deb_regex(message):
self.handle(message)
def handle(self, message: Any) -> None:
if not self._mark_handled_once(message):
return
if not _is_deb_command_text(getattr(message, "text", None)):
return
trace = CommandTrace("/deb", message)
try:
parts = (message.text or "").split(maxsplit=1)