77
88from torchlight .AccessManager import AccessManager
99from torchlight .AudioManager import AudioManager
10- from torchlight .Commands import BaseCommand , VoiceTrigger
10+ from torchlight .Commands import BaseCommand , Say , VoiceTrigger
1111from torchlight .PlayerManager import Player , PlayerManager
1212from torchlight .Torchlight import Torchlight
1313from torchlight .TriggerManager import TriggerManager
@@ -41,6 +41,7 @@ def Setup(self) -> None:
4141 subklasses : list [type [Any ]] = []
4242 subklasses .extend (BaseCommand .__subclasses__ ())
4343 subklasses .extend (VoiceTrigger .__subclasses__ ())
44+ subklasses .extend (Say .__subclasses__ ())
4445 for subklass in sorted (subklasses , key = lambda x : x .order , reverse = True ):
4546 try :
4647 command = subklass (
@@ -69,10 +70,15 @@ def Reload(self) -> None:
6970 self .logger .error (traceback .format_exc ())
7071 else :
7172 self .Setup ()
73+ self .logger .info ("Commands reloaded successfully" )
7274
7375 # @profile
74- async def HandleCommand (self , line : str , player : Player ) -> int | None :
75- message = line .split (sep = " " , maxsplit = 1 )
76+ async def HandleCommand (self , line : str , player : Player , from_menu : bool = False ) -> int | None :
77+ if from_menu :
78+ message = line .split (sep = " " , maxsplit = 2 ) # 2 because the !search command requires another arg for page
79+ else :
80+ message = line .split (sep = " " , maxsplit = 1 )
81+
7682 if len (message ) < 2 :
7783 message .append ("" )
7884 message [1 ] = message [1 ].strip ()
@@ -83,10 +89,9 @@ async def HandleCommand(self, line: str, player: Player) -> int | None:
8389
8490 level = player .admin .level
8591
86- if not message [0 ].startswith ("!" ):
92+ if not message [0 ].startswith (( "!" , "#" , "_" , "$" , "@" , "%" , "^" , "&" , "*" ) ):
8793 return None
8894
89- self .logger .info (f"{ player .name } : { message } " )
9095 ret_message : str | None = None
9196 ret : int | None = None
9297 for command in self .commands :
@@ -125,6 +130,9 @@ async def HandleCommand(self, line: str, player: Player) -> int | None:
125130 ret = ret_temp
126131 else :
127132 ret = await command ._func (message , player )
133+ if from_menu and command .__class__ .__name__ == "VoiceTrigger" and ret :
134+ self .torchlight .SayChat (f"{{olive}}{ player .name } : {{default}}{ line } " )
135+
128136 except Exception as e :
129137 self .logger .error (traceback .format_exc ())
130138 self .torchlight .SayChat (f"Error: { str (e )} " )
0 commit comments