start to track modes
This commit is contained in:
parent
aa777a6ab6
commit
ac061dff7d
|
@ -21,7 +21,12 @@ dependencies = {
|
||||||
build = {
|
build = {
|
||||||
type = "builtin",
|
type = "builtin",
|
||||||
modules = {
|
modules = {
|
||||||
["ketracel"] = "src/ketracel.lua",
|
["ketracel.bot.commands"] = "src/ketracel/bot/commands.lua",
|
||||||
|
["ketracel.bot.ketracel"] = "src/ketracel/bot/ketracel.lua",
|
||||||
|
["ketracel.main"] = "src/ketracel/main.lua",
|
||||||
|
["ketracel.server"] = "src/ketracel/server.lua",
|
||||||
|
["irce.modules.ngircd"] = "src/irce/modules/ngircd/init.lua",
|
||||||
|
["irce.modules.ngircd.modes"] = "src/irce/modules/ngircd/modes.lua",
|
||||||
["irce.modules.oper"] = "src/irce/modules/oper.lua",
|
["irce.modules.oper"] = "src/irce/modules/oper.lua",
|
||||||
},
|
},
|
||||||
install = {
|
install = {
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
moonc `find -type f | grep -v spec | grep 'moon$'`
|
moonc `find -type f | grep -v spec | grep 'moon$'`
|
||||||
busted --defer-print
|
busted
|
||||||
|
|
|
@ -0,0 +1,20 @@
|
||||||
|
modes = require "irce.modules.ngircd.modes"
|
||||||
|
|
||||||
|
describe "mode conversion", ->
|
||||||
|
it "has modes2prefix", ->
|
||||||
|
assert.truthy modes.mode2prefix
|
||||||
|
|
||||||
|
it "has prefix2modes", ->
|
||||||
|
assert.truthy modes.prefix2mode
|
||||||
|
|
||||||
|
it "has convert", ->
|
||||||
|
assert.truthy modes.convert
|
||||||
|
|
||||||
|
describe "convert", ->
|
||||||
|
for k, v in pairs modes.mode2prefix
|
||||||
|
msg = string.format "%s: %s", k, v
|
||||||
|
it msg, ->
|
||||||
|
assert.equal(modes.convert(k), v)
|
||||||
|
msg = string.format "%s: %s", v, k
|
||||||
|
it msg, ->
|
||||||
|
assert.equal(modes.convert(v), k)
|
|
@ -3,6 +3,7 @@ util = require "irce.util"
|
||||||
stringx = require "pl.stringx"
|
stringx = require "pl.stringx"
|
||||||
moon = require "moon"
|
moon = require "moon"
|
||||||
ln = require "ln"
|
ln = require "ln"
|
||||||
|
modeconv = require "irce.modules.ngircd.modes"
|
||||||
|
|
||||||
{
|
{
|
||||||
init: (state) =>
|
init: (state) =>
|
||||||
|
@ -12,10 +13,10 @@ ln = require "ln"
|
||||||
|
|
||||||
senders:
|
senders:
|
||||||
["REGISTER"]: (state, password, software, version, sname, real, nicklen) =>
|
["REGISTER"]: (state, password, software, version, sname, real, nicklen) =>
|
||||||
assert self\PASS password, software, version
|
assert @PASS password, software, version
|
||||||
assert self\SERVER sname, real
|
assert @SERVER sname, real
|
||||||
assert self\NICKLEN nicklen
|
assert @NICKLEN nicklen
|
||||||
assert self\EMOTD!
|
assert @EMOTD!
|
||||||
string.format ":%s PING :%s", sname, sname
|
string.format ":%s PING :%s", sname, sname
|
||||||
|
|
||||||
["PASS"]: (state, password, software, version) =>
|
["PASS"]: (state, password, software, version) =>
|
||||||
|
@ -44,18 +45,30 @@ ln = require "ln"
|
||||||
|
|
||||||
["NICK"]: (state, nick, user, host, modes, real) =>
|
["NICK"]: (state, nick, user, host, modes, real) =>
|
||||||
state.clients[string.lower nick] =
|
state.clients[string.lower nick] =
|
||||||
:nick, :user, :host, :modes, :real, metadata: {}
|
:nick, :user, :host, modes: string.sub(modes, 2), :real, metadata: {}
|
||||||
string.format ":%s NICK %s 1 %s %s 1 %s :%s", state.sname, nick, user, host, modes, real
|
string.format ":%s NICK %s 1 %s %s 1 %s :%s", state.sname, nick, user, host, modes, real
|
||||||
|
|
||||||
["NJOIN"]: (state, channame, who) =>
|
["NJOIN"]: (state, channame, who, prefix) =>
|
||||||
string.format ":%s NJOIN %s :%s", state.sname, channame, who
|
if state.channels[channame] == nil
|
||||||
|
state.channels[channame] =
|
||||||
|
name: channame,
|
||||||
|
mode: ""
|
||||||
|
topic: ""
|
||||||
|
members: {}
|
||||||
|
|
||||||
|
pfxarr = {}
|
||||||
|
if prefix
|
||||||
|
for i = 1, #prefix
|
||||||
|
pfxarr[i] = string.sub prefix, i, i
|
||||||
|
state.channels[channame].members[string.lower who] = pfxarr
|
||||||
|
string.format ":%s NJOIN %s :%s%s", state.sname, channame, prefix or "", who
|
||||||
|
|
||||||
["METADATA"]: (state, nick, key, val) =>
|
["METADATA"]: (state, nick, key, val) =>
|
||||||
state.clients[string.lower nick].metadata[key] = val
|
state.clients[string.lower nick].metadata[key] = val
|
||||||
string.format ":%s METADATA %s %s :%s", state.sname, nick, key, val
|
string.format ":%s METADATA %s %s :%s", state.sname, nick, key, val
|
||||||
|
|
||||||
["VHOST"]: (state, nick, vhost) =>
|
["VHOST"]: (state, nick, vhost) =>
|
||||||
self\METADATA nick, "cloakhost", vhost
|
@METADATA nick, "cloakhost", vhost
|
||||||
string.format ":%s MODE %s +x", state.sname, nick
|
string.format ":%s MODE %s +x", state.sname, nick
|
||||||
|
|
||||||
["PRIVMSG"]: (state, nick, target, message) =>
|
["PRIVMSG"]: (state, nick, target, message) =>
|
||||||
|
@ -73,13 +86,13 @@ ln = require "ln"
|
||||||
|
|
||||||
handlers:
|
handlers:
|
||||||
["461"]: (state, sender, params) =>
|
["461"]: (state, sender, params) =>
|
||||||
self\handle "DIE", string.format("%s: %s", sender[1], params[1])
|
@handle "DIE", string.format("%s: %s", sender[1], params[1])
|
||||||
|
|
||||||
["ERROR"]: (state, sender, params) =>
|
["ERROR"]: (state, sender, params) =>
|
||||||
error string.format "%s: %s", sender[1], params[1]
|
error string.format "%s: %s", sender[1], params[1]
|
||||||
|
|
||||||
["PING"]: (state, sender, params) =>
|
["PING"]: (state, sender, params) =>
|
||||||
self\send "PONG", params[1]
|
@send "PONG", params[1]
|
||||||
sender, params[1]
|
sender, params[1]
|
||||||
|
|
||||||
["PONG"]: (state, sender, params) =>
|
["PONG"]: (state, sender, params) =>
|
||||||
|
@ -92,8 +105,7 @@ ln = require "ln"
|
||||||
if bell
|
if bell
|
||||||
sp = {string.sub(chan, 1, bell - 1), string.sub(chan, bell + 1)}
|
sp = {string.sub(chan, 1, bell - 1), string.sub(chan, bell + 1)}
|
||||||
chan = sp[1]
|
chan = sp[1]
|
||||||
mode = if sp[2] == "o"
|
mode = {modeconv.convert sp[2]}
|
||||||
{"@"}
|
|
||||||
nick = string.lower sender[1]
|
nick = string.lower sender[1]
|
||||||
|
|
||||||
if not state.channels[chan]
|
if not state.channels[chan]
|
||||||
|
@ -179,7 +191,7 @@ ln = require "ln"
|
||||||
pfxarr = {}
|
pfxarr = {}
|
||||||
|
|
||||||
for i = 1, #prefix
|
for i = 1, #prefix
|
||||||
pfxarr[i] = string.sub prefix, i, i
|
pfxarr[i] = modes.convert string.sub prefix, i, i
|
||||||
|
|
||||||
state.channels[chan].members[nick] = pfxarr
|
state.channels[chan].members[nick] = pfxarr
|
||||||
|
|
||||||
|
@ -214,13 +226,13 @@ ln = require "ln"
|
||||||
code = string.sub(params[2], 7)
|
code = string.sub(params[2], 7)
|
||||||
print string.format "%s %s %s - evaling", params[1], sender[1], code
|
print string.format "%s %s %s - evaling", params[1], sender[1], code
|
||||||
fun, err = load(code, sender[1].."-"..params[1], "t", {
|
fun, err = load(code, sender[1].."-"..params[1], "t", {
|
||||||
state: state, :string,
|
state: state, :string, irc: @, :_VERSION
|
||||||
})
|
})
|
||||||
if err ~= nil
|
if err ~= nil
|
||||||
error err
|
error err
|
||||||
result = fun!
|
result = fun!
|
||||||
if result ~= nil
|
if result ~= nil
|
||||||
self\PRIVMSG state.sname, params[1], tostring result
|
@PRIVMSG state.sname, params[1], tostring result
|
||||||
|
|
||||||
sender, params
|
sender, params
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
mode2prefix =
|
||||||
|
q: "~"
|
||||||
|
a: "&"
|
||||||
|
o: "@"
|
||||||
|
h: "%"
|
||||||
|
v: "+"
|
||||||
|
|
||||||
|
prefix2mode =
|
||||||
|
["~"]: "q"
|
||||||
|
["&"]: "a"
|
||||||
|
["@"]: "o"
|
||||||
|
["%"]: "h"
|
||||||
|
["+"]: "v"
|
||||||
|
|
||||||
|
convert = (mode_or_prefix) ->
|
||||||
|
mode2prefix[mode_or_prefix] or prefix2mode[mode_or_prefix]
|
||||||
|
|
||||||
|
{
|
||||||
|
:mode2prefix
|
||||||
|
:prefix2mode
|
||||||
|
:convert
|
||||||
|
}
|
|
@ -11,11 +11,13 @@ class Ketracel
|
||||||
router = CommandRouter self
|
router = CommandRouter self
|
||||||
router\register "DIE", (sender, target, verb, args) -> @die sender, target, verb, args
|
router\register "DIE", (sender, target, verb, args) -> @die sender, target, verb, args
|
||||||
router\register "VHOST", (...) -> @set_vhost ...
|
router\register "VHOST", (...) -> @set_vhost ...
|
||||||
self.router = router
|
router\register "STATE", ->
|
||||||
|
router\register "EVAL", ->
|
||||||
|
@router = router
|
||||||
|
|
||||||
burst: =>
|
burst: =>
|
||||||
@irc\NICK "Ketracel", "white", "the.dominion", "+io", "Ketracel White"
|
@irc\NICK "Ketracel", "white", "the.dominion", "+io", "Ketracel White"
|
||||||
@irc\NJOIN "#ketracel", "&@Ketracel"
|
@irc\NJOIN "#ketracel", "Ketracel", "&@"
|
||||||
|
|
||||||
njoin: (chan) =>
|
njoin: (chan) =>
|
||||||
@irc\NJOIN chan, "Ketracel"
|
@irc\NJOIN chan, "Ketracel"
|
||||||
|
|
Loading…
Reference in New Issue