HEX
Server: nginx/1.28.3
System: Linux lightweb-s1 5.15.0-173-generic #183-Ubuntu SMP Fri Mar 6 13:29:34 UTC 2026 x86_64
User: drdrivek-71 (1047)
PHP: 8.3.30
Disabled: NONE
Upload Files
File: /home/eslinced-103/brise-edu.or.kr/node_modules/ziggy/index.js
var EE = require('events').EventEmitter

var extend = require('xtend')
  , irc = require('irc')

var attachListeners = require('./lib/attach-listeners')
  , populateUsers = require('./lib/populate-users')

module.exports = createZiggy

function Ziggy(settings) {
  EE.call(this)

  this.setMaxListeners(0)

  this.settings = {}

  this.settings.server = settings.server || 'irc.freenode.net'
  this.settings.port = settings.port || 6667
  this.settings.channels = settings.channels || []
  this.settings.nickname = settings.nickname || 'Ziggy'
  this.settings.username = settings.username || 'ziggy'
  this.settings.realName = settings.realName || 'Ziggy'
  this.settings.plugins = settings.plugins || []
  this.settings.password = settings.password
  this.settings.secure = !!settings.secure
  this.settings.client = settings.client

  this.settings.users = populateUsers(settings.users)

  this.started = Date.now()

  return this
}

Ziggy.prototype = Object.create(EE.prototype)

Ziggy.prototype.activatePlugins = function Ziggy$activatePlugins() {
  var plugin

  for(var i = 0, l = this.settings.plugins.length; i < l; ++i) {
    plugin = this.settings.plugins[i]

    plugin.setup(this, plugin.settings)
  }
}

Ziggy.prototype.deactivatePlugins = function Ziggy$deactivatePlugins() {
  this.removeAllListeners()
  require.cache = {}
}

Ziggy.prototype.start = function Ziggy$start() {
  this.activatePlugins()

  var options = {
      channels: this.settings.channels
    , userName: this.settings.username
    , realName: this.settings.realName
    , password: this.settings.password
    , thisSigned: true
    , certExpired: true
    , port: this.settings.port
    , secure: this.settings.secure
  }

  this.client = this.settings.client || new irc.Client(
      this.settings.server
    , this.settings.nickname
    , options
  )

  attachListeners(this)
}

Ziggy.prototype.say = function Ziggy$say(target, text) {
  return this.client.say(target, text)
}

Ziggy.prototype.action = function Ziggy$action(channel, message) {
  return this.client.action(channel, message)
}

Ziggy.prototype.notice = function Ziggy$notice(target, message) {
  return this.client.notice(target, message)
}

Ziggy.prototype.invite = function Ziggy$invite(nickname, channel) {
  this.client.send('INVITE', nickname, channel)
}

Ziggy.prototype.topic = function Ziggy$topic(channel, topic) {
  this.client.send('TOPIC', channel, topic)
}

Ziggy.prototype.part = function Ziggy$part(channels, callback) {
  var self = this

  callback = callback || noop

  if(Array.isArray(channels)) {
    channels.forEach(function(channel) {
      self.part(channel)
    })

    return callback()
  }

  self.client.part(channels, function () {
    if(self.settings.channels[channels]) {
      delete self.settings.channels[channels]
    }

    callback()
  })
}

Ziggy.prototype.join = function Ziggy$join(channels, callback) {
  var self = this

  callback = callback || noop

  if(Array.isArray(channels)) {
    channels.forEach(function(channel) {
      self.join(channel)
    })

    return callback()
  }

  self.client.join(channels, function () {
    if(!self.settings.channels[channels]) {
      self.settings.channels[channels] = {}
      callback()
    }
  })
}

Ziggy.prototype.whois = function Ziggy$whois(nick, callback) {
  var self = this

  self.client.whois(nick, function (info) {
    if(!self.settings.users[nick]) self.settings.users[nick] = { shared: {} }
    self.settings.users[nick].shared.whois = info

    if(callback) callback(self.user(nick))
  })
}

Ziggy.prototype.colorize = function Ziggy$colorize(text, color) {
  return irc.colors.wrap(color, text)
}

Ziggy.prototype.disconnect = function Ziggy$disconnect(message, callback) {
  this.client.disconnect(message, callback)
}

Ziggy.prototype.channels = function Ziggy$channels() {
  return this.settings.channels
}

Ziggy.prototype.channel = function Ziggy$channel(channel) {
  return this.settings.channels[channel]
}

Ziggy.prototype.users = function Ziggy$users(callback) {
  var users = Object.keys(this.settings.users)
    , userList = {}
    , user

  for(var i = 0, l = users.length; i < l; ++i) {
    user = users[i]

    userList[user] = this.settings.users[user].shared
  }

  return userList
}

Ziggy.prototype.user = function Ziggy$user(nickname) {
  var defaultUserInfo = {userLevel: 0, authenticated: false}
    , userInfo = this.settings.users[nickname] ?
      this.settings.users[nickname].shared : defaultUserInfo

  return {
      nick: nickname
    , info: userInfo
  }
}

Ziggy.prototype.nick = function Ziggy$nick(nickname) {
  this.client.send('NICK', nickname)
}

Ziggy.prototype.level = function Ziggy$level(channel) {
  return this.settings.channels[channel].users[this.settings.nickname].level
}

Ziggy.prototype.mode = function Ziggy$mode(channel, mode, nick) {
  if(nick) return this.client.send('MODE', channel, mode, nick)

  this.client.send('MODE', channel, mode)
}

Ziggy.prototype.op = function Ziggy$op(channel, nick) {
  this.mode(channel, '+o', nick)
}

Ziggy.prototype.deop = function Ziggy$deop(channel, nick) {
  this.mode(channel, '-o', nick)
}

Ziggy.prototype.register = function Ziggy$register(users) {
  this.settings.users =  extend(
      this.settings.users
    , populateUsers(this, users)
  )
}

Ziggy.prototype.update = function Ziggy$update(userObjects) {
  var users = Object.keys(userObjects)
    , user

  for(i = 0, l = users.length; i < l; ++i) {
    user = users[i]

    if(!this.settings.users[user]) {
      this.settings.users[user] = userObjects[user]
    }

    this.settings.users[user] = extend(
        this.settings.users[user]
      , userObjects[user]
    )
  }
}

Ziggy.prototype.unregister = function Ziggy$unregister(users) {
  if(!Array.isArray(users)) users = [users]

  for(var i = 0, l = users.length; i < l; ++i) {
    delete this.settings.users[users[i]]
  }
}

function createZiggy(options) {
  return new Ziggy(options)
}

function noop() {}