1+ import shlex
2+ import subprocess
13import typing
24import discord
35import toml
@@ -16,29 +18,37 @@ async def _default_handler(_):
1618
1719class Bot (discord .Client ):
1820 def __init__ (self , config : ConfigFile , ** kwargs : typing .Any ):
19- super ().__init__ (** kwargs )
21+ super ().__init__ (
22+ intents = discord .Intents (messages = True , message_content = True ), ** kwargs
23+ )
2024 self .config : ConfigFile = config
21- self .dishes : typing .List [ DishFile ]
25+ self .dishes : typing .Dict [ str , DishFile ]
2226 self ._get_dishes ()
23- print (self .dishes )
2427
2528 def _get_dishes (self ):
26- self .dishes = []
29+ self .dishes : typing . Dict [ str , DishFile ] = {}
2730 for dish in self .config .get ("dishes" , []):
2831 if isinstance (dish , str ):
29- self .dishes .append (toml .load (dish , _dict = DishFile ))
30- else :
31- self .dishes .append (dish )
32+ dish = toml .load (dish , _dict = DishFile )
33+ self .dishes [dish ["command" ]] = dish
34+ for alias in dish .get ("aliases" , []):
35+ self .dishes [alias ] = dish
3236
3337 async def on_ready (self ):
3438 await self .config .get ("postinit" , _default_postinit )(self )
3539
3640 async def on_message (self , message : discord .Message ):
37- if await self .config .get ("handler" , lambda _ : False )(message ):
41+ if await self .config .get ("handler" , _default_handler )(message ):
3842 return
3943 if message .author == self .user :
4044 return
4145
46+ argv = shlex .split (message .content )
47+ if argv [0 ] in self .dishes .keys ():
48+ argv = shlex .split (self .dishes [argv [0 ]]["run" ]) + argv [1 :]
49+ proc = subprocess .run (argv , stdout = subprocess .PIPE , stderr = subprocess .PIPE )
50+ await message .reply (proc .stdout .decode ("utf-8" ))
51+
4252 def run (self ):
4353 self .config .get ("preinit" , lambda _ : None )(self )
4454 super ().run (self .config ["token" ])
0 commit comments