2007-05-29 03:32:48 +00:00
"""
This file contains commands that require special permissions to use . These
are generally @ - prefixed commands , but there are exceptions .
"""
2009-10-01 23:28:58 +00:00
2009-10-03 14:40:34 +00:00
from django . contrib . auth . models import Permission , Group , User
2009-10-01 23:28:58 +00:00
from django . contrib . contenttypes . models import ContentType
2009-04-25 06:30:18 +00:00
from django . conf import settings
2008-12-15 04:35:00 +00:00
from src . objects . models import Object
2008-06-15 20:04:06 +00:00
from src import defines_global
from src import ansi
2008-12-14 20:21:02 +00:00
from src import session_mgr
2009-08-30 15:35:29 +00:00
from src import comsys
2009-04-25 06:30:18 +00:00
from src . scripthandler import rebuild_cache
2008-06-15 20:31:25 +00:00
from src . util import functions_general
2009-01-27 15:21:15 +00:00
from src . cmdtable import GLOBAL_CMD_TABLE
2007-05-29 03:32:48 +00:00
2008-12-14 20:21:02 +00:00
def cmd_reload ( command ) :
2008-06-13 19:52:29 +00:00
"""
Reloads all modules .
"""
2009-08-30 15:35:29 +00:00
source_object = command . source_object
switches = command . command_switches
if not switches or switches [ 0 ] not in [ ' all ' , ' aliases ' , ' alias ' ,
' commands ' , ' command ' ,
' scripts ' , ' parents ' ] :
source_object . emit_to ( " Usage: @reload/<aliases|scripts|commands|all> " )
return
switch = switches [ 0 ]
sname = source_object . get_name ( show_dbref = False )
2009-04-25 06:30:18 +00:00
2009-08-30 15:35:29 +00:00
if switch in [ " all " , " aliases " , " alias " ] :
#reload Aliases
command . session . server . reload_aliases ( source_object = source_object )
comsys . cemit_mudinfo ( " %s reloaded Aliases. " % sname )
if switch in [ " all " , " scripts " , " parents " ] :
#reload Script parents
2009-04-25 06:30:18 +00:00
rebuild_cache ( )
2009-08-30 15:35:29 +00:00
comsys . cemit_mudinfo ( " %s reloaded Script parents. " % sname )
if switch in [ " all " , " commands " , " command " ] :
#reload command objects.
comsys . cemit_mudinfo ( " %s is reloading Command modules ... " % sname )
2009-04-25 06:30:18 +00:00
command . session . server . reload ( source_object = command . source_object )
2009-08-30 15:35:29 +00:00
comsys . cemit_mudinfo ( " ... all Command modules were reloaded. " )
2009-01-27 15:21:15 +00:00
GLOBAL_CMD_TABLE . add_command ( " @reload " , cmd_reload ,
2009-10-01 23:28:58 +00:00
priv_tuple = ( " genperms.process_control " , ) ) ,
2009-01-27 16:16:43 +00:00
GLOBAL_CMD_TABLE . add_command ( " @restart " , cmd_reload ,
2009-10-01 23:28:58 +00:00
priv_tuple = ( " genperms.process_control " , ) ) ,
2007-05-29 03:32:48 +00:00
2008-12-14 20:21:02 +00:00
def cmd_boot ( command ) :
2008-06-13 19:52:29 +00:00
"""
Boot a player object from the server .
"""
2009-01-24 20:30:46 +00:00
source_object = command . source_object
2008-06-13 19:52:29 +00:00
switch_quiet = False
switch_port = False
2007-08-09 13:12:49 +00:00
2008-12-14 20:21:02 +00:00
if " quiet " in command . command_switches :
# Don't tell the player they've been disconnected, silently boot them.
2008-06-13 19:52:29 +00:00
switch_quiet = True
2007-08-09 13:12:49 +00:00
2008-12-14 20:21:02 +00:00
if " port " in command . command_switches :
# Boot by port number instead of name or dbref.
2008-06-13 19:52:29 +00:00
switch_port = True
2007-08-09 13:12:49 +00:00
2008-12-14 20:21:02 +00:00
if not command . command_argument :
2009-01-24 20:30:46 +00:00
source_object . emit_to ( " Who would you like to boot? " )
2008-06-13 19:52:29 +00:00
return
else :
boot_list = [ ]
if switch_port :
2008-12-14 20:21:02 +00:00
# Boot a particular port.
2008-06-13 19:52:29 +00:00
sessions = session_mgr . get_session_list ( True )
for sess in sessions :
2008-12-14 20:21:02 +00:00
# Find the session with the matching port number.
if sess . getClientAddress ( ) [ 1 ] == int ( command . command_argument ) :
2008-06-13 19:52:29 +00:00
boot_list . append ( sess )
2008-12-14 20:21:02 +00:00
# Match found, kill the loop and continue with booting.
2008-06-13 19:52:29 +00:00
break
else :
# Grab the objects that match
2009-01-24 20:30:46 +00:00
objs = Object . objects . local_and_global_search ( source_object ,
2008-12-14 20:21:02 +00:00
command . command_argument )
2008-06-13 19:52:29 +00:00
2008-12-14 20:21:02 +00:00
if not objs :
2009-01-24 20:30:46 +00:00
source_object . emit_to ( " No name or dbref match found for booting. " )
2008-06-13 19:52:29 +00:00
return
2007-08-09 13:12:49 +00:00
2008-06-13 19:52:29 +00:00
if not objs [ 0 ] . is_player ( ) :
2009-01-24 20:30:46 +00:00
source_object . emit_to ( " You can only boot players. " )
2008-06-13 19:52:29 +00:00
return
2007-08-09 13:12:49 +00:00
2009-01-24 20:30:46 +00:00
if not source_object . controls_other ( objs [ 0 ] ) :
2008-06-13 19:52:29 +00:00
if objs [ 0 ] . is_superuser ( ) :
2009-01-24 20:30:46 +00:00
source_object . emit_to ( " You cannot boot a Wizard. " )
2008-06-13 19:52:29 +00:00
return
else :
2009-01-24 20:30:46 +00:00
source_object . emit_to ( " You do not have permission to boot that player. " )
2008-06-13 19:52:29 +00:00
return
2007-08-09 13:12:49 +00:00
2008-06-13 19:52:29 +00:00
if objs [ 0 ] . is_connected_plr ( ) :
2009-01-24 20:30:46 +00:00
matches = session_mgr . sessions_from_object ( objs [ 0 ] )
for match in matches :
boot_list . append ( match )
2008-12-14 20:21:02 +00:00
else :
2009-01-24 20:30:46 +00:00
source_object . emit_to ( " That player is not connected. " )
2008-12-14 20:21:02 +00:00
return
2007-08-09 13:12:49 +00:00
2008-12-14 20:21:02 +00:00
if not boot_list :
2009-01-24 20:30:46 +00:00
source_object . emit_to ( " No matches found. " )
2008-12-14 20:21:02 +00:00
return
# Carry out the booting of the sessions in the boot list.
2008-06-13 19:52:29 +00:00
for boot in boot_list :
if not switch_quiet :
2009-01-24 20:30:46 +00:00
boot . msg ( " You have been disconnected by %s . " % ( source_object . name ) )
2008-06-13 19:52:29 +00:00
boot . disconnectClient ( )
session_mgr . remove_session ( boot )
return
2009-01-27 15:21:15 +00:00
GLOBAL_CMD_TABLE . add_command ( " @boot " , cmd_boot ,
2009-10-01 23:28:58 +00:00
priv_tuple = ( " genperms.manage_players " , ) )
2007-08-09 13:12:49 +00:00
2008-12-14 20:21:02 +00:00
def cmd_newpassword ( command ) :
2008-06-13 19:52:29 +00:00
"""
Set a player ' s password.
"""
2009-01-24 20:30:46 +00:00
source_object = command . source_object
2008-12-14 20:21:02 +00:00
eq_args = command . command_argument . split ( ' = ' , 1 )
searchstring = eq_args [ 0 ]
newpass = eq_args [ 1 ]
2008-06-13 19:52:29 +00:00
2008-12-14 20:21:02 +00:00
if not command . command_argument or len ( searchstring ) == 0 :
2009-10-03 14:40:34 +00:00
source_object . emit_to ( " What player ' s password do you want to change? " )
2008-06-13 19:52:29 +00:00
return
if len ( newpass ) == 0 :
2009-01-24 20:30:46 +00:00
source_object . emit_to ( " You must supply a new password. " )
2008-06-13 19:52:29 +00:00
return
2007-05-29 03:32:48 +00:00
2009-01-25 03:11:52 +00:00
target_obj = source_object . search_for_object ( searchstring )
# Use search_for_object to handle duplicate/nonexistant results.
2008-06-13 19:52:29 +00:00
if not target_obj :
return
2007-05-29 03:32:48 +00:00
2008-06-13 19:52:29 +00:00
if not target_obj . is_player ( ) :
2009-01-24 20:30:46 +00:00
source_object . emit_to ( " You can only change passwords on players. " )
elif not source_object . controls_other ( target_obj ) :
source_object . emit_to ( " You do not control %s . " % ( target_obj . get_name ( ) , ) )
2008-06-13 19:52:29 +00:00
else :
uaccount = target_obj . get_user_account ( )
if len ( newpass ) == 0 :
uaccount . set_password ( )
else :
uaccount . set_password ( newpass )
uaccount . save ( )
2009-01-24 20:30:46 +00:00
source_object . emit_to ( " %s - PASSWORD set. " % ( target_obj . get_name ( ) , ) )
2008-12-14 20:21:02 +00:00
target_obj . emit_to ( " %s has changed your password. " %
2009-01-24 20:30:46 +00:00
( source_object . get_name ( show_dbref = False ) , ) )
2009-01-27 15:21:15 +00:00
GLOBAL_CMD_TABLE . add_command ( " @newpassword " , cmd_newpassword ,
2009-10-01 23:28:58 +00:00
priv_tuple = ( " genperms.manage_players " , ) )
2007-05-29 03:32:48 +00:00
2009-04-06 22:07:41 +00:00
def cmd_home ( command ) :
"""
Teleport the player to their home .
"""
pobject = command . source_object
if pobject . home == None :
pobject . emit_to ( " You have no home set, @link yourself to somewhere. " )
else :
pobject . emit_to ( " There ' s no place like home... " )
pobject . move_to ( pobject . get_home ( ) )
GLOBAL_CMD_TABLE . add_command ( " home " , cmd_home ,
2009-10-01 23:28:58 +00:00
priv_tuple = ( " genperms.tel_anywhere " , ) )
2009-04-06 22:07:41 +00:00
2009-04-28 23:49:49 +00:00
def cmd_service ( command ) :
"""
Service management system . Allows for the listing , starting , and stopping
of services .
"""
2009-08-30 15:35:29 +00:00
source_object = command . source_object
switches = command . command_switches
if not switches or switches [ 0 ] not in [ " list " , " start " , " stop " ] :
2009-08-30 17:28:56 +00:00
source_object . emit_to ( " Usage: @servive/<start|stop|list> [service] " )
2009-08-30 15:35:29 +00:00
return
switch = switches [ 0 ] . strip ( )
sname = source_object . get_name ( show_dbref = False )
if switch == " list " :
#Just display the list of installed services and their status, then exit.
s = " - " * 40
s + = " \n Service Listing "
2009-04-28 23:49:49 +00:00
for service in command . session . server . service_collection . services :
# running is either 1 or 0, 1 meaning the service is running.
if service . running == 1 :
status = ' Running '
else :
status = ' Inactive '
2009-08-30 15:35:29 +00:00
s + = ' \n * %s ( %s ) ' % ( service . name , status )
s + = " \n " + " - " * 40
source_object . emit_to ( s )
2009-04-28 23:49:49 +00:00
return
2009-08-30 15:35:29 +00:00
if switch in [ " stop " , " start " ] :
# This stuff is common to both start and stop switches.
2009-04-28 23:49:49 +00:00
collection = command . session . server . service_collection
try :
service = collection . getServiceNamed ( command . command_argument )
except :
2009-08-30 15:35:29 +00:00
source_object . emit_to ( ' Invalid service name. This command is case-sensitive. See @service/list. ' )
2009-04-28 23:49:49 +00:00
return
2009-08-30 15:35:29 +00:00
if switch == " stop " :
2009-04-28 23:49:49 +00:00
"""
Stopping a service gracefully closes it and disconnects any connections
( if applicable ) .
"""
if service . running == 0 :
2009-08-30 15:35:29 +00:00
source_object . emit_to ( ' That service is not currently running. ' )
2009-04-28 23:49:49 +00:00
return
2009-08-30 15:35:29 +00:00
# We don't want killing main Evennia TCPServer services here. If
# wanting to kill a listening port, one needs to do it through
2009-04-28 23:49:49 +00:00
# settings.py and a restart.
if service . name [ : 7 ] == ' Evennia ' :
2009-08-30 15:35:29 +00:00
s = " You can not stop Evennia TCPServer services this way. "
s + = " \n To e.g. remove a listening port, change settings file and restart. "
source_object . emit_to ( s )
return
comsys . cemit_mudinfo ( " %s is *Stopping* the service ' %s ' . " % ( sname , service . name ) )
2009-04-28 23:49:49 +00:00
service . stopService ( )
return
2009-08-30 15:35:29 +00:00
if switch == " start " :
2009-04-28 23:49:49 +00:00
"""
Starts a service .
"""
if service . running == 1 :
2009-08-30 15:35:29 +00:00
source_object . emit_to ( ' That service is already running. ' )
2009-04-28 23:49:49 +00:00
return
2009-08-30 15:35:29 +00:00
comsys . cemit_mudinfo ( " %s is *Starting* the service ' %s ' . " % ( sname , service . name ) )
2009-04-28 23:49:49 +00:00
service . startService ( )
return
GLOBAL_CMD_TABLE . add_command ( " @service " , cmd_service ,
2009-10-01 23:28:58 +00:00
priv_tuple = ( " genperms.process_control " , ) )
2009-04-28 23:49:49 +00:00
2008-12-14 20:21:02 +00:00
def cmd_shutdown ( command ) :
2008-06-13 19:52:29 +00:00
"""
Shut the server down gracefully .
2009-01-24 20:30:46 +00:00
"""
command . source_object . emit_to ( ' Shutting down... ' )
print ' Server shutdown by %s ' % ( command . source_object . get_name ( show_dbref = False ) , )
command . session . server . shutdown ( )
2009-01-27 15:21:15 +00:00
GLOBAL_CMD_TABLE . add_command ( " @shutdown " , cmd_shutdown ,
2009-10-01 23:28:58 +00:00
priv_tuple = ( " genperms.process_control " , ) )
2009-10-03 14:40:34 +00:00
# permission administration
# Django automatically creates a host of permissions that we don't want to
# mess with, but which are not very useful from inside the game. While these
# permissions are ok to use, we only show the permissions that we have defined
# in our settings file in order to give better control.
APPS_NOSHOW = ( " news " , " admin " , " auth " , " config " , " contentypes " ,
" flatpages " , " news " , " sessions " , " sites " )
SETTINGS_PERM_NAMES = [ ]
for apps in settings . PERM_ALL_DEFAULTS + settings . PERM_ALL_CUSTOM :
for permtuples in apps :
SETTINGS_PERM_NAMES . append ( permtuples [ 1 ] )
def cmd_setperm ( command ) :
""" @setperm
2009-10-01 23:28:58 +00:00
Usage :
2009-10-03 14:40:34 +00:00
@setperm [ / switch ] [ < user > ] = [ < permission > ]
2009-10-01 23:28:58 +00:00
Switches :
add : add a permission from < user >
del : delete a permission from < user >
2009-10-01 23:33:57 +00:00
list : list all permissions , or those set on < user >
2009-10-01 23:28:58 +00:00
2009-10-03 14:40:34 +00:00
This command sets / clears individual permission bits on a user .
2009-10-01 23:33:57 +00:00
Use / list without any arguments to see all available permissions or those
defined on the < user > argument .
2009-10-01 23:28:58 +00:00
"""
source_object = command . source_object
args = command . command_argument
switches = command . command_switches
if not args :
if " list " not in switches :
2009-10-03 14:40:34 +00:00
source_object . emit_to ( " Usage: @setperm[/switch] [user] = [permission] " )
2009-10-01 23:28:58 +00:00
return
else :
#just print all available permissions
s = " \n ---Permission name %s ---Description " % ( 24 * " " )
2009-10-03 14:40:34 +00:00
permlist = [ perm for perm in Permission . objects . all ( ) if perm . content_type . app_label not in APPS_NOSHOW and
perm . name in SETTINGS_PERM_NAMES ]
for p in permlist :
2009-10-01 23:28:58 +00:00
app = p . content_type . app_label
2009-10-03 14:40:34 +00:00
if app not in APPS_NOSHOW :
s + = " \n %s . %s %s \t %s " % ( app , p . codename , ( 35 - len ( app ) - len ( p . codename ) ) * " " , p . name )
2009-10-01 23:28:58 +00:00
source_object . emit_to ( s )
return
2009-10-02 20:51:56 +00:00
#we have command arguments.
2009-10-01 23:28:58 +00:00
arglist = args . split ( ' = ' , 1 )
obj_name = arglist [ 0 ] . strip ( )
2009-10-02 20:51:56 +00:00
if not obj_name :
2009-10-03 14:40:34 +00:00
source_object . emit_to ( " Usage: @setperm[/switch] [user] [= permission] " )
2009-10-02 20:51:56 +00:00
return
2009-10-01 23:28:58 +00:00
obj = source_object . search_for_object ( obj_name )
if not obj :
return
2009-10-03 14:40:34 +00:00
user = obj . get_user_account ( )
if not user :
return
2009-10-01 23:28:58 +00:00
if len ( arglist ) == 1 :
#if we didn't have any =, we list the permissions set on <object>.
s = " "
if obj . is_superuser ( ) :
s + = " \n This is a SUPERUSER account! All permissions are automatically set. "
if not user . is_active :
s + = " \n ACCOUNT NOT ACTIVE. "
if obj . is_staff ( ) :
s + = " \n Member of staff (can enter Admin interface) "
aperms = user . get_all_permissions ( )
2009-10-03 14:40:34 +00:00
gperms = user . get_group_permissions ( )
uperms = [ perm for perm in aperms if perm not in gperms ]
if gperms :
s + = " \n Group-inherited Permissions: "
for p in gperms :
s + = " \n --- %s " % p
if uperms :
s + = " \n Individually granted Permisssions: "
for p in uperms :
s + = " \n ---- %s " % p
2009-10-01 23:28:58 +00:00
if not s :
2009-10-03 14:40:34 +00:00
s = " User %s has no permissions. " % obj . get_name ( )
2009-10-01 23:28:58 +00:00
else :
s = " \n Permissions for user %s : %s " % ( obj . get_name ( ) , s )
source_object . emit_to ( s )
else :
# we supplied an argument on the form obj = perm
perm_string = arglist [ 1 ] . strip ( )
try :
app_label , codename = perm_string . split ( " . " , 1 )
except ValueError :
source_object . emit_to ( " Permission should be on the form ' application.permission ' . " )
return
try :
permission = Permission . objects . filter ( content_type__app_label = app_label ) . get ( codename = codename )
except Permission . DoesNotExist :
source_object . emit_to ( " Permission type ' %s ' is not a valid permission. \n Use @chperm/list for help with valid permission strings. " % perm_string )
return
2009-10-03 14:40:34 +00:00
if not switches :
source_object . emit_to ( " You must supply a switch /add or /del. " )
return
2009-10-01 23:28:58 +00:00
if " add " in switches :
2009-10-03 14:40:34 +00:00
#add the permission to this user
2009-10-01 23:28:58 +00:00
if user . is_superuser :
source_object . emit_to ( " As a superuser you always have all permissions. " )
return
if user . has_perm ( perm_string ) :
source_object . emit_to ( " User already has this permission. " )
return
user . user_permissions . add ( permission )
2009-10-03 14:40:34 +00:00
user . save ( ) ; obj . save ( )
2009-10-01 23:28:58 +00:00
source_object . emit_to ( " %s gained the permission ' %s ' . " % ( obj . get_name ( ) , permission . name ) )
obj . emit_to ( " %s gave you the permission ' %s ' . " % ( source_object . get_name ( show_dbref = False , no_ansi = True ) ,
permission . name ) )
if " del " in switches :
#delete the permission from this user
if user . is_superuser :
source_object . emit_to ( " As a superuser you always have all permissions. " )
return
if not user . has_perm ( perm_string ) :
source_object . emit_to ( " User is already lacking this permission. " )
return
user . user_permissions . remove ( permission )
2009-10-03 14:40:34 +00:00
user . save ( ) ; obj . save ( )
2009-10-01 23:28:58 +00:00
source_object . emit_to ( " %s lost the permission ' %s ' . " % ( obj . get_name ( ) , permission . name ) )
obj . emit_to ( " %s removed your permission ' %s ' . " % ( source_object . get_name ( show_dbref = False , no_ansi = True ) ,
permission . name ) )
2009-10-03 14:40:34 +00:00
GLOBAL_CMD_TABLE . add_command ( " @setperm " , cmd_setperm ,
priv_tuple = ( " auth.change_permission " , " genperms.admin_perm " ) , auto_help = True , staff_help = True )
2009-10-01 23:28:58 +00:00
2009-10-03 14:40:34 +00:00
def cmd_setgroup ( command ) :
""" @setgroup
2009-10-02 20:51:56 +00:00
Usage :
2009-10-03 14:40:34 +00:00
@setgroup [ / switch ] [ < user > ] [ = < group > ]
2009-10-02 20:51:56 +00:00
switches
add : add user to a group
del : remove user from a group
list : list all groups a user is part of , or list all available groups if no user is given
2009-10-03 14:40:34 +00:00
Changes and views the group membership of a user .
2009-10-02 20:51:56 +00:00
"""
source_object = command . source_object
args = command . command_argument
switches = command . command_switches
if not args :
if " list " not in switches :
2009-10-03 14:40:34 +00:00
source_object . emit_to ( " Usage: @setgroup[/switch] [user] [= permission] " )
2009-10-02 20:51:56 +00:00
return
else :
#just print all available permissions
s = " \n ---Group name (and grouped permissions): "
for g in Group . objects . all ( ) :
s + = " \n %s " % g . name
for p in g . permissions . all ( ) :
app = p . content_type . app_label
2009-10-03 14:40:34 +00:00
if app not in APPS_NOSHOW :
s + = " \n --- %s . %s %s \t %s " % ( app , p . codename , ( 35 - len ( app ) - len ( p . codename ) ) * " " , p . name )
2009-10-02 20:51:56 +00:00
source_object . emit_to ( s )
return
#we have command arguments.
arglist = args . split ( ' = ' , 1 )
obj_name = arglist [ 0 ] . strip ( )
if not obj_name :
2009-10-03 14:40:34 +00:00
source_object . emit_to ( " Usage: @setgroup[/switch] [user] = [permission] " )
2009-10-02 20:51:56 +00:00
return
obj = source_object . search_for_object ( obj_name )
if not obj :
return
if not obj . is_player ( ) :
source_object . emit_to ( " Only players may be members of permission groups. " )
return
2009-10-03 14:40:34 +00:00
user = obj . get_user_account ( )
if not user :
return
2009-10-02 20:51:56 +00:00
if len ( arglist ) == 1 :
#if we didn't have any =, we list the groups this user is member of
s = " "
if obj . is_superuser ( ) :
s + = " \n This is a SUPERUSER account! Group membership does not matter. "
if not user . is_active :
s + = " \n ACCOUNT NOT ACTIVE. "
for g in user . groups . all ( ) :
2009-10-03 14:40:34 +00:00
s + = " \n --- %s " % g
for p in g . permissions . all ( ) :
app = p . content_type . app_label
s + = " \n -- %s . %s %s \t %s " % ( app , p . codename , ( 35 - len ( app ) - len ( p . codename ) ) * " " , p . name )
2009-10-02 20:51:56 +00:00
if not s :
s = " User %s is not a member of any groups. " % obj . get_name ( )
else :
s = " \n Group memberships for user %s : %s " % ( obj . get_name ( ) , s )
source_object . emit_to ( s )
else :
# we supplied an argument on the form obj = group
group_string = arglist [ 1 ] . strip ( )
try :
2009-10-03 14:40:34 +00:00
group = Group . objects . get ( name = group_string )
2009-10-02 20:51:56 +00:00
except Group . DoesNotExist :
source_object . emit_to ( " Group ' %s ' is not a valid group. Remember that the name is case-sensitive. \n Use @chperm/list for help with valid group names. " % group_string )
return
2009-10-03 14:40:34 +00:00
if not switches :
source_object . emit_to ( " You must supply a switch /add or /del. " )
return
2009-10-02 20:51:56 +00:00
if " add " in switches :
#add the user to this group
if user . is_superuser :
source_object . emit_to ( " As a superuser, group access does not matter. " )
return
if user . groups . filter ( name = group_string ) :
source_object . emit_to ( " User is already a member of this group. " )
return
user . groups . add ( group )
2009-10-03 14:40:34 +00:00
user . save ( ) ; obj . save ( )
2009-10-02 20:51:56 +00:00
source_object . emit_to ( " %s added to group ' %s ' . " % ( obj . get_name ( ) , group . name ) )
obj . emit_to ( " %s added you to the group ' %s ' . " % ( source_object . get_name ( show_dbref = False , no_ansi = True ) ,
group . name ) )
if " del " in switches :
#delete the permission from this user
if user . is_superuser :
source_object . emit_to ( " As a superuser, group access does not matter. " )
return
if not user . groups . filter ( name = group_string ) :
source_object . emit_to ( " User was not in this group to begin with. " )
return
user . groups . remove ( group )
2009-10-03 14:40:34 +00:00
user . save ( ) ; obj . save ( )
2009-10-02 20:51:56 +00:00
source_object . emit_to ( " %s was removed from group ' %s ' . " % ( obj . get_name ( ) , group . name ) )
obj . emit_to ( " %s removed you from group ' %s ' . " % ( source_object . get_name ( show_dbref = False , no_ansi = True ) ,
group . name ) )
2009-10-03 14:40:34 +00:00
GLOBAL_CMD_TABLE . add_command ( " @setgroup " , cmd_setgroup ,
priv_tuple = ( " auth.change_group " , " genperms.admin_group " ) , auto_help = True , staff_help = True )