ketracel/src/irce/modules/ngircd/channel.moon

44 lines
984 B
Plaintext

modeconv = require "irce.modules.ngircd.modes"
class Channel
new: (data) =>
assert data.name
data.members = {} unless data.members
data.modes = {} unless data.modes
data.topic = "" unless data.topic
for k, v in pairs data
self[k] = v
add_hat: (who, mode) =>
hat = modeconv.convert mode
usermodes = assert @members[who\lower!]
for _, chhat in pairs usermodes
return if chhat == hat
usermodes[#usermodes+1] = hat
del_hat: (who, mode) =>
hat = modeconv.convert mode
usermodes = assert @members[who\lower!]
for i, v in pairs usermodes
if v == hat
table.remove usermodes, i
return
add_mode: (mode) =>
for _, chmd in pairs @modes
return if chmd == mode
@modes[#@modes+1] = mode
del_mode: (mode) =>
for i, v in pairs @modes
if v == mode
table.remove @modes, i
return
string.format "desync detected: mode %s isn't set on %s", mode, @name
Channel