from txircd.modbase import Mode

class OperMode(Mode):
    def checkSet(self, target, param):
        return False # Should only be set by the OPER command; hence, reject any normal setting of the mode
    
    def checkWhoFilter(self, user, targetUser, filters, fields, channel, udata):
        if "o" in filters and not udata["oper"]:
            return {}
        return udata

class Spawner(object):
    def __init__(self, ircd):
        self.ircd = ircd
        self.oper_mode = None
    
    def spawn(self):
        self.oper_mode = OperMode()
        return {
            "modes": {
                "uno": self.oper_mode
            },
            "actions": {
                "wholinemodify": self.oper_mode.checkWhoFilter
            },
            "common": True
        }
from txircd.modbase import Mode

class OperMode(Mode):
    def checkSet(self, user, target, param):
        user.sendMessage(irc.ERR_NOPRIVILEGES, ":Permission denied - User mode o may not be set")
        return False # Should only be set by the OPER command; hence, reject any normal setting of the mode
    
    def checkWhoFilter(self, user, targetUser, filters, fields, channel, udata):
        if "o" in filters and not udata["oper"]:
            return {}
        return udata

class Spawner(object):
    def __init__(self, ircd):
        self.ircd = ircd
        self.oper_mode = None
    
    def spawn(self):
        self.oper_mode = OperMode()
        return {
            "modes": {
                "uno": self.oper_mode
            },
            "actions": {
                "wholinemodify": self.oper_mode.checkWhoFilter
            },
            "common": True
        }
Fix crashing when a user attempts to set usermode +o without /oper
Fix crashing when a user attempts to set usermode +o without /oper

  from txircd.modbase import Mode
  
  class OperMode(Mode):
-     def checkSet(self, target, param):
+     def checkSet(self, user, target, param):
+         user.sendMessage(irc.ERR_NOPRIVILEGES, ":Permission denied - User mode o may not be set")
          return False # Should only be set by the OPER command; hence, reject any normal setting of the mode
      
      def checkWhoFilter(self, user, targetUser, filters, fields, channel, udata):
          if "o" in filters and not udata["oper"]:
              return {}
          return udata
  
  class Spawner(object):
      def __init__(self, ircd):
          self.ircd = ircd
          self.oper_mode = None
      
      def spawn(self):
          self.oper_mode = OperMode()
          return {
              "modes": {
                  "uno": self.oper_mode
              },
              "actions": {
                  "wholinemodify": self.oper_mode.checkWhoFilter
              },
              "common": True
          }
Fix crashing when a user attempts to set usermode +o without /oper
## Code Before:
from txircd.modbase import Mode

class OperMode(Mode):
    def checkSet(self, target, param):
        return False # Should only be set by the OPER command; hence, reject any normal setting of the mode
    
    def checkWhoFilter(self, user, targetUser, filters, fields, channel, udata):
        if "o" in filters and not udata["oper"]:
            return {}
        return udata

class Spawner(object):
    def __init__(self, ircd):
        self.ircd = ircd
        self.oper_mode = None
    
    def spawn(self):
        self.oper_mode = OperMode()
        return {
            "modes": {
                "uno": self.oper_mode
            },
            "actions": {
                "wholinemodify": self.oper_mode.checkWhoFilter
            },
            "common": True
        }
## Instruction:
Fix crashing when a user attempts to set usermode +o without /oper
## Code After:
from txircd.modbase import Mode

class OperMode(Mode):
    def checkSet(self, user, target, param):
        user.sendMessage(irc.ERR_NOPRIVILEGES, ":Permission denied - User mode o may not be set")
        return False # Should only be set by the OPER command; hence, reject any normal setting of the mode
    
    def checkWhoFilter(self, user, targetUser, filters, fields, channel, udata):
        if "o" in filters and not udata["oper"]:
            return {}
        return udata

class Spawner(object):
    def __init__(self, ircd):
        self.ircd = ircd
        self.oper_mode = None
    
    def spawn(self):
        self.oper_mode = OperMode()
        return {
            "modes": {
                "uno": self.oper_mode
            },
            "actions": {
                "wholinemodify": self.oper_mode.checkWhoFilter
            },
            "common": True
        }