@@ -0,0 +1,82 @@
|
||||
/** 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
|
||||
}
|
||||
}
|
||||
|
||||
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 }
|
||||
}
|
||||
Reference in New Issue
Block a user