def handle(self, instance, player, argv):
"""
Handle command parsing and execution.
:param player: Player object.
:param argv: Arguments in array
:type player: pyplanet.apps.core.maniaplanet.models.player.Player
"""
# Check permissions.
if self.perms and len(self.perms) > 0:
# All the given perms need to be matching!
is_allowed = await asyncio.gather(*[
instance.permission_manager.has_permission(player, perm) for perm in self.perms
])
if not all(allowed is True for allowed in is_allowed):
await instance.chat(
'$z$sYou are not authorized to use this command!',
player.login
)
return
# Strip off the namespace and command.
paramv = self.get_params(argv)
# Parse, validate and show errors if any.
self.parser.parse(paramv)
if not self.parser.is_valid():
await instance.gbx.multicall(
instance.chat('$z$sCommand operation got invalid arguments: {}'.format(', '.join(self.parser.errors)), player),
instance.chat('$z$s >> {}'.format(self.usage_text), player),
)
return
# We are through. Call our target!
if iscoroutinefunction(self.target):
return await self.target(player=player, data=self.parser.data, raw=argv, command=self)
return self.target(player=player, data=self.parser.data, raw=argv, command=self)
评论列表
文章目录