start on Channel class
This commit is contained in:
parent
ac061dff7d
commit
fa56644a7e
|
@ -0,0 +1,27 @@
|
||||||
|
Channel = require "irce.modules.ngircd.channel"
|
||||||
|
|
||||||
|
describe "Channel", ->
|
||||||
|
it "requires a channel name", ->
|
||||||
|
assert.has.errors -> Channel {}
|
||||||
|
|
||||||
|
it "lets you create a channel", ->
|
||||||
|
assert.truthy Channel name: "#butts"
|
||||||
|
|
||||||
|
it "lets you set modes", ->
|
||||||
|
with Channel name: "#butts"
|
||||||
|
\add_mode "p"
|
||||||
|
assert .modes[1] == "p"
|
||||||
|
\del_mode "p"
|
||||||
|
assert #.modes == 0
|
||||||
|
|
||||||
|
it "requires channel membership to give hats", ->
|
||||||
|
with Channel name: "#butts"
|
||||||
|
assert.has.errors -> \add_hat "cadey", "@"
|
||||||
|
assert.has.errors -> \del_hat "cadey", "@"
|
||||||
|
|
||||||
|
it "lets you give people hats", ->
|
||||||
|
with Channel name: "#butts", members: {cadey: {}}
|
||||||
|
\add_hat "cadey", "@"
|
||||||
|
assert .members.cadey[1] == "o"
|
||||||
|
\del_hat "cadey", "@"
|
||||||
|
assert #.members.cadey == 0
|
|
@ -0,0 +1,43 @@
|
||||||
|
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
|
Loading…
Reference in New Issue