/** IRC session buffers and members. */ var BARE_IRC_MAX_TRANSCRIPT = 2000 function bareIrcCreateState(opts) { opts = opts || {} var max = opts.maxTranscript > 0 ? opts.maxTranscript : BARE_IRC_MAX_TRANSCRIPT return { connection: 'idle', nick: opts.nick || '', requestedNick: opts.nick || '', account: '', away: false, network: opts.network || '', isupport: bareIrcIsupportDefaults(), capsOffered: {}, capsEnabled: {}, buffers: {}, currentId: 'server', maxTranscript: max, registered: false, tls: opts.tls !== false, saslOk: false, channelList: [], listBusy: false, ignore: {} } } function bareIrcBufferId(kind, name, mapping) { if (kind === 'server') return 'server' return kind + ':' + bareIrcCasemap(name, mapping) } function bareIrcEnsureBuffer(state, kind, name) { var mapping = bareIrcCasemapping(state.isupport) var id = bareIrcBufferId(kind, name, mapping) if (!state.buffers[id]) { state.buffers[id] = { id: id, kind: kind, name: name || '*server', topic: '', members: {}, lines: [], unread: 0, highlight: false } } return state.buffers[id] } function bareIrcPushLine(state, buf, rec) { if (!buf) return buf.lines.push(rec) while (buf.lines.length > state.maxTranscript) buf.lines.shift() if (buf.id !== state.currentId) { buf.unread++ if (rec && rec.highlight) buf.highlight = true } } function bareIrcListBuffers(state) { var ids = Object.keys(state.buffers) ids.sort(function (a, b) { if (a === 'server') return -1 if (b === 'server') return 1 return a < b ? -1 : a > b ? 1 : 0 }) return ids.map(function (id) { return state.buffers[id] }) } function bareIrcMemberPrefixes(state, nickRaw) { var pref = bareIrcPrefixMap(state.isupport) var nick = String(nickRaw || '') var modes = '' while (nick && pref.byPref[nick.charAt(0)]) { modes += pref.byPref[nick.charAt(0)] nick = nick.slice(1) } return { nick: nick, modes: modes } }