mirror of
				https://github.com/jlu5/PyLink.git
				synced 2025-11-04 08:57:25 +01:00 
			
		
		
		
	Move MODE from bots.py into a new plugin, opercmds.py
This commit is contained in:
		
							parent
							
								
									1f2b99ca26
								
							
						
					
					
						commit
						775933420a
					
				@ -121,40 +121,6 @@ def part(irc, source, args):
 | 
			
		||||
        irc.proto.partClient(u, channel, reason)
 | 
			
		||||
    irc.callHooks([u, 'PYLINK_BOTSPLUGIN_PART', {'channels': clist, 'text': reason, 'parse_as': 'PART'}])
 | 
			
		||||
 | 
			
		||||
@utils.add_cmd
 | 
			
		||||
def mode(irc, source, args):
 | 
			
		||||
    """<source> <target> <modes>
 | 
			
		||||
 | 
			
		||||
    Admin-only. Sets modes <modes> on <target> from <source>, where <source> is either the nick of a PyLink client, or the SID of a PyLink server. <target> can be either a nick or a channel."""
 | 
			
		||||
    utils.checkAuthenticated(irc, source, allowOper=False)
 | 
			
		||||
    try:
 | 
			
		||||
        modesource, target, modes = args[0], args[1], args[2:]
 | 
			
		||||
    except IndexError:
 | 
			
		||||
        irc.reply('Error: Not enough arguments. Needs 3: source nick, target, modes to set.')
 | 
			
		||||
        return
 | 
			
		||||
    target = utils.nickToUid(irc, target) or target
 | 
			
		||||
    extclient = target in irc.users and not utils.isInternalClient(irc, target)
 | 
			
		||||
    parsedmodes = utils.parseModes(irc, target, modes)
 | 
			
		||||
    ischannel = target in irc.channels
 | 
			
		||||
    if not (target in irc.users or ischannel):
 | 
			
		||||
        irc.reply("Error: Invalid channel or nick %r." % target)
 | 
			
		||||
        return
 | 
			
		||||
    elif not parsedmodes:
 | 
			
		||||
        irc.reply("Error: No valid modes were given.")
 | 
			
		||||
        return
 | 
			
		||||
    elif not (ischannel or utils.isManipulatableClient(irc, target)):
 | 
			
		||||
        irc.reply("Error: Can only set modes on channels or non-protected PyLink clients.")
 | 
			
		||||
        return
 | 
			
		||||
    if utils.isInternalServer(irc, modesource):
 | 
			
		||||
        # Setting modes from a server.
 | 
			
		||||
        irc.proto.modeServer(modesource, target, parsedmodes)
 | 
			
		||||
    else:
 | 
			
		||||
        # Setting modes from a client.
 | 
			
		||||
        modesource = utils.nickToUid(irc, modesource)
 | 
			
		||||
        irc.proto.modeClient(modesource, target, parsedmodes)
 | 
			
		||||
    irc.callHooks([modesource, 'PYLINK_BOTSPLUGIN_MODE',
 | 
			
		||||
                   {'target': target, 'modes': parsedmodes, 'parse_as': 'MODE'}])
 | 
			
		||||
 | 
			
		||||
@utils.add_cmd
 | 
			
		||||
def msg(irc, source, args):
 | 
			
		||||
    """<source> <target> <text>
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										50
									
								
								plugins/opercmds.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								plugins/opercmds.py
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,50 @@
 | 
			
		||||
"""
 | 
			
		||||
opercmds.py: Provides a subset of network management commands.
 | 
			
		||||
"""
 | 
			
		||||
 | 
			
		||||
import sys
 | 
			
		||||
import os
 | 
			
		||||
# Add the base PyLink folder to path, so we can import utils and log.
 | 
			
		||||
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
 | 
			
		||||
 | 
			
		||||
import utils
 | 
			
		||||
from log import log
 | 
			
		||||
 | 
			
		||||
@utils.add_cmd
 | 
			
		||||
def mode(irc, source, args):
 | 
			
		||||
    """<channel> <modes>
 | 
			
		||||
 | 
			
		||||
    Oper-only, sets modes <modes> on the target channel."""
 | 
			
		||||
 | 
			
		||||
    # Check that the caller is either opered or logged in as admin.
 | 
			
		||||
    utils.checkAuthenticated(irc, source)
 | 
			
		||||
 | 
			
		||||
    try:
 | 
			
		||||
        target, modes = args[0], args[1:]
 | 
			
		||||
    except IndexError:
 | 
			
		||||
        irc.reply('Error: Not enough arguments. Needs 2: target, modes to set.')
 | 
			
		||||
        return
 | 
			
		||||
 | 
			
		||||
    if target not in irc.channels:
 | 
			
		||||
        irc.reply("Error: Unknown channel '%s'." % target)
 | 
			
		||||
        return
 | 
			
		||||
    elif not modes:
 | 
			
		||||
        # No modes were given before parsing (i.e. mode list was blank).
 | 
			
		||||
        irc.reply("Error: No valid modes were given.")
 | 
			
		||||
        return
 | 
			
		||||
 | 
			
		||||
    parsedmodes = utils.parseModes(irc, target, modes)
 | 
			
		||||
 | 
			
		||||
    if not parsedmodes:
 | 
			
		||||
        # Modes were given but they failed to parse into anything meaningful.
 | 
			
		||||
        # For example, "mode #somechan +o" would be erroneous because +o
 | 
			
		||||
        # requires an argument!
 | 
			
		||||
        irc.reply("Error: No valid modes were given.")
 | 
			
		||||
        return
 | 
			
		||||
 | 
			
		||||
    irc.proto.modeClient(irc.pseudoclient.uid, target, parsedmodes)
 | 
			
		||||
 | 
			
		||||
    # Call the appropriate hooks for plugin like relay.
 | 
			
		||||
    irc.callHooks([irc.pseudoclient.uid, 'OPERCMDS_MODEOVERRIDE',
 | 
			
		||||
                   {'target': target, 'modes': parsedmodes, 'parse_as': 'MODE'}])
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user