async def on_start(self): # Register permission & command for managing queue. await self.instance.permission_manager.register( 'manage_queue', 'Clear or shuffle the queue', app=self, min_level=2) await self.instance.command_manager.register( Command('queue', target=self.command_queue_list), Command('clear', namespace='queue', target=self.command_queue_clear, admin=True, perms='queue:manage_queue'), Command('shuffle', namespace='queue', target=self.command_queue_shuffle, admin=True, perms='queue:manage_queue'), ) self.has_password = self.instance.game.server_password is not None and len( self.instance.game.server_password) > 0 await self.init_queue()
async def on_start(self): # Register permission & command for managing queue. await self.instance.permission_manager.register( 'manage_queue', 'Clear or shuffle the queue', app=self, min_level=2) await self.instance.command_manager.register( Command('queue', target=self.command_queue_list), Command('clear', namespace='queue', target=self.command_queue_clear, admin=True, perms='queue:manage_queue'), Command('shuffle', namespace='queue', target=self.command_queue_shuffle, admin=True, perms='queue:manage_queue'), ) # Make sure the spectators can't switch to player, and players can't join directly as player. # Also make sure the widget is displayed to the spectators. calls = [] logins = [] for player in self.instance.player_manager.online: if player.flow.is_spectator: calls.append( self.instance.gbx('ForceSpectator', player.login, 1)) logins.append(player.login) if len(calls) > 0: await asyncio.gather(self.instance.gbx.multicall(*calls), self.widget.display(player_logins=logins))
async def on_start(self): self.songs = await self.get_songs() self.list_view = MusicListView(self) self.playlist_view = PlaylistView(self) await self.context.setting.register(self.setting_override_map_music) await self.instance.command_manager.register( Command(command='play', target=self.play_song, admin=True).add_param(name='songname', type=str, required=True), Command(command='song', target=self.get_current_song, admin=False), Command(command='songlist', aliases='musiclist', target=self.song_list, admin=False), Command(command='playlist', target=self.show_playlist, admin=False), Command(command='clearplaylist', target=self.clear_playlist, admin=True), ) self.current_song_index = -1
async def on_start(self): # Call components. await self.setting.on_start() await self.dev.on_start() # Change some ui elements positions and visibility. self.instance.ui_manager.properties.set_visibility('live_info', False) self.instance.ui_manager.properties.set_attribute( 'live_info', 'pos', '-125. 84. 5.') self.instance.ui_manager.properties.set_attribute( 'warmup', 'pos', '86., 87., 5.') # Display logo. await self.controller_view.display() # Listeners. self.context.signals.listen('maniaplanet:player_connect', self.on_connect) await self.instance.command_manager.register( Command('version', self.chat_version), Command('upgrade', self.chat_upgrade, admin=True, description='Upgrade PyPlanet installation (Experimental)' ).add_param('to_version', type=str, default=None, required=False, help='Upgrade to specific version'))
async def on_start(self): await self.instance.permission_manager.register( 'pay', 'Pay planets to players', app=self, min_level=3) await self.instance.permission_manager.register( 'planets', 'Display amount of planets', app=self, min_level=3) await self.instance.command_manager.register( Command(command='planets', target=self.display_planets, perms='transactions:planets', admin=True), Command(command='pay', target=self.pay_to_player, perms='transactions:pay', admin=True).add_param( name='login', required=True).add_param(name='amount', required=True), Command(command='donate', target=self.donate).add_param(name='amount', required=True), ) # Register callback. self.instance.signal_manager.listen(mp_signals.other.bill_updated, self.bill_updated)
async def on_start(self): # Registering permissions await self.instance.permission_manager.register( 'match_control', 'Starting/Stopping brawl matches', app=self, min_level=2) # Registering commands await self.instance.command_manager.register( Command('start', namespace='match', target=self.start_match_command, perms='brawl_match:match_control', admin=True), Command('stop', namespace='match', target=self.stop_match, perms='brawl_match:match_control', admin=True), Command('ready', aliases=['r'], namespace='match', target=self.player_ready), Command('endwu', namespace='match', target=self.vote_endwu), Command('break', namespace='match', target=self.request_break))
async def on_start(self): # Register permissions + commands. await self.instance.permission_manager.register('clear', 'Clear the jukebox', app=self, min_level=1) await self.instance.command_manager.register( Command(command='cjb', target=self.clear_jukebox, perms='jukebox:clear', admin=True), Command(command='clearjukebox', target=self.clear_jukebox, perms='jukebox:clear', admin=True), Command(command='list', target=self.show_map_list).add_param(name='search', required=False), Command(command='jukebox', target=self.chat_command).add_param(name='option', required=False)) # Register callback. self.instance.signal_manager.listen(mp_signals.flow.podium_start, self.podium_start)
async def on_start(self): if self.instance.db.engine.__class__.__name__.lower().find( 'postgresql') != -1: raise NotImplementedError( "Rankings app only works on PyPlanet instances running on MySQL." ) # Listen to signals. self.context.signals.listen(mp_signals.map.map_end, self.map_end) self.context.signals.listen(mp_signals.player.player_connect, self.player_connect) # Register commands. await self.instance.command_manager.register( Command('rank', target=self.chat_rank, description='Displays your current server rank.'), Command('nextrank', target=self.chat_nextrank, description= 'Displays the player ahead of you in the server ranking.'), Command('topranks', target=self.chat_topranks, description='Displays a list of top ranked players.'), ) # Register settings await self.context.setting.register(self.setting_records_required, self.setting_chat_announce, self.setting_topranks_limit)
async def on_start(self): await self.instance.permission_manager.register( 'add_remote', 'Add map from remote source (such as MX)', app=self, min_level=2) await self.context.setting.register(self.setting_mx_key) await self.instance.command_manager.register( Command(command='info', namespace='mx', target=self.mx_info), Command(command='search', namespace='mx', target=self.search_mx_map, perms='mx:add_remote', admin=True), Command(command='add', namespace='mx', target=self.add_mx_map, perms='mx:add_remote', admin=True).add_param('maps', nargs='*', type=str, required=True, help='MX ID(s) of maps to add.'), Command(command='mx', namespace='add', target=self.add_mx_map, perms='mx:add_remote', admin=True).add_param('maps', nargs='*', type=str, required=True, help='MX ID(s) of maps to add.'), )
async def on_start(self): # Register permissions + commands. await self.instance.permission_manager.register('clear', 'Clear the jukebox', app=self, min_level=1) await self.instance.command_manager.register( Command(command='cjb', target=self.clear_jukebox, perms='jukebox:clear', admin=True), Command(command='clearjukebox', target=self.clear_jukebox, perms='jukebox:clear', admin=True), Command(command='list', target=self.show_map_list).add_param(name='search', required=False), Command(command='jukebox', target=self.chat_command).add_param(name='option', required=False), Command(command='mapfolders', target=self.show_map_folders)) # Register callback. self.context.signals.listen(mp_signals.flow.podium_start, self.podium_start) # Add button to the map list for adding to a folder. MapListView.add_action(self.add_to_folder, 'Add to folder', '', order=-50) # Fetch all folders. await self.folder_manager.on_start()
async def on_start(self): # Register signals. self.context.signals.listen(mp_signals.player.player_connect, self.on_connect) # Register commands. await self.instance.command_manager.register( Command(command='paypal', target=self.chat_paypal, admin=False) ) await self.instance.command_manager.register( Command(command='discord', target=self.chat_discord, admin=False), ) # Register settings. await self.context.setting.register( self.setting_enable_discord, self.setting_enable_paypal, self.setting_paypal_url, self.setting_discord_join_url, self.setting_discord_server_id, ) # Force reload of settings. await self.reload_settings() # Call the display method. await self.display()
async def on_start(self): # Register commands await self.instance.command_manager.register( Command(command='records', target=self.show_records_list), Command( 'localcps', target=self.command_localcps, description='Compare your local record checkpoints with another record.' ).add_param('record', required=False, type=int, help='Custom record rank to compare with. Defaults to 1.', default=1) ) # Register signals self.context.signals.listen(mp_signals.map.map_begin, self.map_begin) self.context.signals.listen(tm_signals.finish, self.player_finish) self.context.signals.listen(mp_signals.player.player_connect, self.player_connect) # Register settings await self.context.setting.register(self.setting_chat_announce, self.setting_record_limit) # Register permissions await self.instance.permission_manager.register('manage_records', 'Manage records', app=self, min_level=3) # Load initial data. await self.refresh_locals() await self.chat_current_record() if self.widget is None: self.widget = LocalRecordsWidget(self) await self.widget.display()
async def on_start(self): # Register permissions + commands. await self.instance.permission_manager.register('clear', 'Clear the jukebox', app=self, min_level=1) await self.instance.command_manager.register( Command(command='clearjukebox', aliases=['cjb'], target=self.clear_jukebox, perms='jukebox:clear', admin=True, description='Clears the current maps from the jukebox.'), Command(command='list', target=self.show_map_list, description='Displays the maps currently in the jukebox.').add_param(name='search', required=False), Command(command='jukebox', target=self.chat_command, description='Provides access to the jukebox commands.').add_param(name='option', required=False), Command(command='mapfolders', aliases=['mf'], target=self.show_map_folders, description='Shows the available (personal) map folders.'), ) # Register settings. await self.context.setting.register(self.setting_newest_days_range, self.setting_allow_juking) # Register callback. self.context.signals.listen(mp_signals.flow.podium_start, self.podium_start) # Add button to the map list for adding to a folder. MapListView.add_action(self.add_to_folder, 'Add to folder', '', order=-50) # Fetch all folders. await self.folder_manager.on_start()
async def on_start(self): await self.instance.command_manager.register( Command(command='players', target=self.player_list), Command(command='laston', aliases=['lastseen'], target=self.command_laston).add_param(name='login', required=True), ) await self.context.setting.register( self.setting_enable_join_msg, self.setting_enable_leave_msg ) player_signals.player_connect.register(self.player_connect) player_signals.player_disconnect.register(self.player_disconnect)
async def on_start(self): await self.instance.command_manager.register( Command(command='players', target=self.player_list, description='Displays the list of players currently online.'), Command(command='laston', aliases=['lastseen'], target=self.command_laston, description='Displays the last time the provided player was online on this server.').add_param(name='login', required=True), ) await self.context.setting.register( self.setting_enable_join_msg, self.setting_enable_leave_msg ) player_signals.player_connect.register(self.player_connect) player_signals.player_disconnect.register(self.player_disconnect)
async def on_start(self): # Listen to signals. self.app.context.signals.listen(finish, self.on_finish) # Register commands. await self.app.instance.command_manager.register( # Command('stats', target=self.open_stats), Command('topsums', target=self.topsums), Command(command='scoreprogression', aliases=['progression'], target=self.open_score_progression), )
async def on_start(self): await self.context.setting.register( self.setting_voting_enabled, self.setting_voting_ratio, self.setting_remind_interval, self.setting_enabled_replay, self.setting_enabled_restart, self.setting_enabled_skip, self.setting_callvoting_disable, self.setting_callvoting_timeout, self.setting_enabled_time_extend ) await self.instance.permission_manager.register('cancel', 'Cancel the current vote', app=self, min_level=1) await self.instance.permission_manager.register('pass', 'Pass the current vote', app=self, min_level=1) await self.instance.command_manager.register( Command(command='cancel', target=self.cancel_vote, perms='voting:cancel', admin=True), Command(command='pass', target=self.pass_vote, perms='voting:pass', admin=True), Command(command='y', aliases=['yes'], target=self.vote_yes), Command(command='n', aliases=['no'], target=self.vote_no), Command(command='replay', target=self.vote_replay), Command(command='restart', aliases=['res'], target=self.vote_restart), Command(command='skip', target=self.vote_skip), Command(command='extend', target=self.vote_extend), ) self.widget = VoteWidget(self) await self.widget.display() # Register callback. self.context.signals.listen(mp_signals.flow.podium_start, self.podium_start) self.context.signals.listen(mp_signals.player.player_connect, self.player_connect) self.context.signals.listen(mp_signals.map.map_begin, self.map_start) if await self.setting_callvoting_disable.get_value() is True: # Disable callvoting await self.instance.gbx('SetCallVoteTimeOut', 0)
async def on_start(self): await self.instance.permission_manager.register( 'admin_pm', 'Private message for admins', app=self, min_level=2 ) await self.instance.permission_manager.register( 'pm_log', 'Private message log for admins', app=self, min_level=2 ) await self.instance.command_manager.register( Command( 'pm', target=self.command_pm ).add_param( 'player', required=True, type=str, help='Login to send private message to' ).add_param('message', required=True, type=str, help='Message') ) await self.instance.command_manager.register( Command( 'adminpm', target=self.command_adminpm, perms='private_message:admin_pm', admin=True ).add_param( 'message', required=True, type=str, help='Message' ) ) await self.instance.command_manager.register( Command( 'pmlog', target=self.command_pm_log, perms='private_message:pm_log', admin=True ) )
async def on_start(self): await self.instance.permission_manager.register( 'locdel', 'delete all local record', app=self.app, min_level=2) await self.instance.permission_manager.register('waitingmap', 'set waiting map', app=self.app, min_level=2) await self.instance.command_manager.register( Command(command='omerde', target=self.get_top), Command(command='locdel', target=self.delete_locals, admin=True), Command(command='waitingmap', target=self.waiting_map, admin=True), Command(command='test', target=self.db_debug), ) player_chat.register(self.on_chat)
async def on_start(self): # Register commands. await self.app.instance.command_manager.register( Command( 'topactive', target=self.top_active, description='Displays the most active players on this server.' ), Command( 'topdons', target=self.top_donators, description= 'Displays the players who donated the most planets to this server.' ), )
async def test_registering(self): instance = Controller.prepare(name='default').instance await instance.db.connect() await instance.apps.discover() await instance.db.initiate() self.target_called = 0 from pyplanet.apps.core.maniaplanet.models import Player from pyplanet.contrib.command import Command test1 = Command( 'test', self.target, aliases=['tst'], admin=False, ) await instance.command_manager.register(test1) # Try to fetch the command. player, _ = await Player.get_or_create(login='******', nickname='sample-1', level=Player.LEVEL_MASTER) await instance.command_manager._on_chat(player, '/test', True) await instance.command_manager._on_chat(player, '/tst', True) assert self.target_called == 2
async def on_start(self): await super().on_start() self.context.signals.listen(mp_signals.ui.manialink_answer, self.compare_click) self.context.signals.listen(mp_signals.map.map_start, self.map_start) self.context.signals.listen(tm_signals.start_countdown, self.display_graph) await self.instance.command_manager.register( Command(command='compare', target=self.compare_chat).add_param('playerlogin', nargs='1', type=str, required=True, help='Playerlogin to compare to. (Will be plotted in blue.)'), ) self.widget = GraphView(self) self.local_records = self.instance.apps.apps["local_records"] if "dedimania" not in self.instance.apps.apps: class StubDedi(): def __init__(self): self.current_records = [] class StubRecord(): def __init__(self, cps, player): self.cps = cps self.login = player self.dedimania = StubDedi() # self.dedimania.current_records.append(StubRecord("1000,2300,2800,3000", "tomriddle")) # self.dedimania.current_records.append(StubRecord("1300,2400,2800,3500", "steven")) # self.dedimania.current_records.append(StubRecord("1100,2300,2400,3700", "peavis")) else: self.dedimania = self.instance.apps.apps["dedimania"] await self.reset_widget()
async def on_start(self): # Init settings. await self.context.setting.register( self.setting_server_login, self.setting_dedimania_code, self.setting_chat_welcome, self.setting_chat_announce, self.setting_sent_announce ) # Load settings + initiate api. if self.instance.game.game == "tm": await self.reload_settings() return # Register signals self.context.signals.listen(mp_signals.map.map_begin, self.map_begin) self.context.signals.listen(mp_signals.map.map_start, self.map_start) self.context.signals.listen(mp_signals.map.map_end, self.map_end) self.context.signals.listen(mp_signals.flow.podium_start, self.podium_start) self.context.signals.listen(tm_signals.finish, self.player_finish) self.context.signals.listen(mp_signals.player.player_connect, self.player_connect) self.context.signals.listen(mp_signals.player.player_disconnect, self.player_disconnect) # Register commands await self.instance.command_manager.register( Command( 'dedicps', target=self.command_dedicps, description='Compare your dedimania record checkpoints with another record.' ).add_param('record', required=False, type=int, help='Custom record rank to compare with. Defaults to 1.', default=1) ) # Change round results widget location. # Load initial data. self.widget = DedimaniaRecordsWidget(self)
async def on_start(self): # Register commands. await self.instance.command_manager.register( Command(command='whokarma', target=self.show_map_list)) # Register signals. self.context.signals.listen(mp_signals.map.map_begin, self.map_begin) self.context.signals.listen(mp_signals.map.map_end, self.mx_karma.map_end) self.context.signals.listen(mp_signals.player.player_chat, self.player_chat) self.context.signals.listen(mp_signals.player.player_connect, self.player_connect) await self.context.setting.register( self.setting_finishes_before_voting, self.setting_expanded_voting) # Load initial data. await self.get_votes_list(self.instance.map_manager.current_map) await self.calculate_karma() await self.mx_karma.on_start() await self.chat_current_karma() self.widget = KarmaWidget(self) await self.widget.display() await self.load_map_votes()
async def on_start(self): await super().on_start() await self.instance.permission_manager.register( 'admin', 'Administer the messages', app=self, min_level=3) await self.instance.command_manager.register( Command('messages', admin=True, target=self.show_setting_window, perms='messages:admin')) await self.context.setting.register(self.msg_interval_setting) self.context.signals.listen(mp_signals.map.map_start, self.map_start) self.context.signals.listen(mp_signals.flow.podium_start, self.on_map_end) self.context.signals.listen(mp_signals.player.player_connect, self.on_connect) self.manialinks = [ ml for ml in await Message.execute(Message.select()) ] await self.manialinks_updated() await self.display() self.loop = asyncio.get_event_loop() self.msg_loop_task = asyncio.ensure_future(self.handle_messages(), loop=self.loop) await self.manialinks_updated()
async def on_start(self): await self.instance.permission_manager.register( 'end_round', 'Force ending a round (warmup, race or custom)', app=self.app, min_level=2) await self.instance.permission_manager.register( 'points_repartition', 'Change the points repartition', app=self.app, min_level=2) # Trackmania specific: if self.instance.game.game == 'tm': await self.instance.command_manager.register( Command(command='endround', target=self.end_round, perms='admin:end_round', admin=True, description='Ends the current round of play.'), Command(command='endwuround', target=self.end_wu_round, perms='admin:end_round', admin=True, description='Ends the current warm-up round of play.'), Command(command='endwu', target=self.end_wu, perms='admin:end_round', admin=True, description='Ends the complete warm-up on this map.'), Command( command='pointsrepartition', aliases=['pointsrep'], target=self.set_point_repartition, perms='admin:points_repartition', admin=True, description='Alters the points repartitioning.').add_param( 'repartition', nargs='*', type=str, required=True, help='Repartition, comma or space separated.'), ) # Shootmania specific. if self.instance.game.game == 'sm': pass
async def on_start(self): await self.instance.permission_manager.register('callvoting', 'Handle server callvoting', app=self.app, min_level=1) await self.instance.permission_manager.register('password', 'Set the server passwords', app=self.app, min_level=2) await self.instance.permission_manager.register('servername', 'Set the server name', app=self.app, min_level=2) await self.instance.permission_manager.register('mode', 'Set the server game mode', app=self.app, min_level=2) await self.instance.permission_manager.register('chat_toggle', 'Turn the public chat on or off', app=self.app, min_level=2) await self.instance.command_manager.register( Command(command='cancelcallvote', aliases=['cancelcall'], target=self.cancel_callvote, perms='admin:callvoting', admin=True, description='Cancels the current callvote (server vote).'), Command(command='setpassword', aliases=['srvpass'], target=self.set_password, perms='admin:password', admin=True, description='Sets the player password of the server.').add_param(name='password', required=False), Command(command='setspecpassword', aliases=['spectpass'], target=self.set_spec_password, perms='admin:password', admin=True, description='Sets the spectator password of the server.').add_param(name='password', required=False), Command(command='servername', target=self.set_servername, perms='admin:servername', admin=True, description='Changes the name of the server.').add_param(name='server_name', required=True, nargs='*'), Command(command='mode', target=self.set_mode, perms='admin:mode', admin=True, description='Changes the gamemode of the server.').add_param(name='mode', required=True, nargs='*'), Command(command='modesettings', target=self.mode_settings, perms='admin:mode', admin=True, description='Displays and allows for updating of the gamemode settings.') .add_param(name='setting', required=False) .add_param(name='content', required=False), Command(command='chat', target=self.chat_toggle, perms='admin:chat_toggle', admin=True, description='Enables/disables the chat.') .add_param(name='enable', required=False), ) # Register signal receivers. player_chat.register(self.on_chat)
async def on_start(self): await self.instance.permission_manager.register( 'add_remote', 'Add map from remote source (such as MX)', app=self, min_level=2) await self.context.setting.register( self.setting_mx_key ) await self.instance.command_manager.register( Command(command='info', namespace='mx', target=self.mx_info, description='Display ManiaExchange information for current map.'), # support backwards Command(command='mx', namespace='add', target=self.add_mx_map, perms='mx:add_remote', admin=True, description='Add map from ManiaExchange to the maplist.').add_param( 'maps', nargs='*', type=str, required=True, help='MX ID(s) of maps to add.'), # new mx namespace Command(command='search', aliases=['list'], namespace='mx', target=self.search_mx_map, perms='mx:add_remote', admin=True, description='Search for maps on ManiaExchange.'), Command(command='add', namespace='mx', target=self.add_mx_map, perms='mx:add_remote', admin=True, description='Add map from ManiaExchange to the maplist.').add_param( 'maps', nargs='*', type=str, required=True, help='MX ID(s) of maps to add.'), Command(command='status', namespace='mx', target=self.status_mx_maps, perms='mx:add_remote', admin=True, description='View the map statuses compared to ManiaExchange.'), # new mxpack namespace Command(command='search', aliases=['list'], namespace='mxpack', target=self.search_mx_pack, perms='mx:add_remote', admin=True, description='Search for mappacks on ManiaExchange.'), Command(command='add', namespace='mxpack', target=self.add_mx_pack, perms='mx:add_remote', admin=True, description='Add mappack from ManiaExchange to the maplist.') .add_param('pack', nargs='*', type=str, required=True, help='MX ID(s) of mappacks to add.'), )
async def on_start(self): await self.instance.command_manager.register( Command(command='qjoin', target=self.command_qjoin, admin=False, description='QuickJoin a other Server')) self.serverswitch_widget = views.ServerswitchWidget(self)
async def on_start(self): await self.app.instance.permission_manager.register( 'edit_server_settings', 'Edit server global settings.', app=self.app, min_level=3 ) await self.app.instance.command_manager.register( # Command('settings', self.player_settings, admin=False), Command('settings', self.admin_settings, perms='core.pyplanet:edit_server_settings', admin=True, description='Displays and allows editing PyPlanet/plugin settings.'), )