mirror of
https://shylinux.com/x/icebergs
synced 2025-04-25 17:18:05 +08:00
add chat.script
This commit is contained in:
parent
5d8cfa9138
commit
2db2f39649
@ -83,6 +83,7 @@ const (
|
||||
CLEAR = "clear"
|
||||
DELAY = "delay"
|
||||
RELOAD = "reload"
|
||||
RECORD = "record"
|
||||
RESTART = "restart"
|
||||
INTERVAL = "interval"
|
||||
|
||||
@ -93,6 +94,7 @@ const (
|
||||
OPEN = "open"
|
||||
CLOSE = "close"
|
||||
|
||||
PLAY = "play"
|
||||
MAIN = "main"
|
||||
CODE = "code"
|
||||
COST = "cost"
|
||||
|
@ -37,6 +37,7 @@ func _mdb_select(m *ice.Message, cb Any, key string, value Map, fields []string,
|
||||
if m.FieldsIsDetail() {
|
||||
m.Push(ice.FIELDS_DETAIL, value)
|
||||
} else {
|
||||
m.Debug("what %v %v", value, val)
|
||||
m.Push(key, value, fields, val)
|
||||
}
|
||||
default:
|
||||
|
@ -250,7 +250,7 @@ func ZoneSelect(m *ice.Message, arg ...string) *ice.Message {
|
||||
if m.Cmdy(SELECT, m.PrefixKey(), "", ZONE, arg, logs.FileLineMeta(-1)); len(arg) == 0 {
|
||||
m.Sort(ZoneShort(m)).PushAction(Config(m, ACTION), REMOVE).Action(CREATE)
|
||||
} else if len(arg) == 1 {
|
||||
m.Action(INSERT).StatusTimeCountTotal(_zone_meta(m, m.PrefixKey(), kit.Keys(HASH, HashSelectField(m, arg[0], HASH)), COUNT))
|
||||
m.Action(INSERT).StatusTimeCountTotal(_zone_meta(m, m.PrefixKey(), kit.Keys(HASH, HashSelectField(m, arg[0], HASH)), COUNT), "step", "0")
|
||||
}
|
||||
return m
|
||||
}
|
||||
|
@ -221,10 +221,12 @@ func _space_send(m *ice.Message, name string, arg ...string) (h string) {
|
||||
}
|
||||
if target := kit.Split(name, nfs.PT, nfs.PT); !mdb.HashSelectDetail(m, target[0], func(value ice.Map) {
|
||||
if c, ok := value[mdb.TARGET].(*websocket.Conn); !m.Warn(!ok, ice.ErrNotValid, mdb.TARGET) {
|
||||
kit.For([]string{
|
||||
ice.LOG_TRACEID,
|
||||
ice.MSG_USERROLE,
|
||||
}, func(k string) { m.Optionv(k, m.Optionv(k)) })
|
||||
m.Debug("what %v", value[mdb.TYPE])
|
||||
kit.If(kit.Format(value[mdb.TYPE]) == MASTER, func() {
|
||||
m.Options(ice.MSG_USERWEB, value[mdb.TEXT], ice.MSG_USERPOD, "", ice.MSG_USERHOST, "")
|
||||
})
|
||||
m.Debug("what %v", value[mdb.TYPE])
|
||||
kit.For([]string{ice.MSG_USERROLE, ice.LOG_TRACEID}, func(k string) { m.Optionv(k, m.Optionv(k)) })
|
||||
kit.For(m.Optionv(ice.MSG_OPTS), func(k string) { m.Optionv(k, m.Optionv(k)) })
|
||||
if withecho {
|
||||
_space_echo(m.Set(ice.MSG_DETAIL, arg...), []string{h}, target, c)
|
||||
|
@ -32,7 +32,7 @@ func init() {
|
||||
}, arg...)
|
||||
}},
|
||||
nfs.SCRIPT: {Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmd(SCRIPT, mdb.INSERT, mdb.ZONE, "default", ctx.INDEX, arg[0], ice.AUTO, arg[2])
|
||||
m.Cmd(SCRIPT, mdb.INSERT, mdb.ZONE, arg[0], web.SPACE, arg[1], ctx.INDEX, arg[2], cli.PLAY, arg[4], ctx.OPTS, kit.Format(arg[5:]))
|
||||
}},
|
||||
ctx.CONFIG: {Hand: func(m *ice.Message, arg ...string) {
|
||||
_footer_plugin(m, ctx.CONFIG, arg, arg...)
|
||||
|
@ -2,6 +2,7 @@ package chat
|
||||
|
||||
import (
|
||||
ice "shylinux.com/x/icebergs"
|
||||
"shylinux.com/x/icebergs/base/cli"
|
||||
"shylinux.com/x/icebergs/base/mdb"
|
||||
)
|
||||
|
||||
@ -9,13 +10,14 @@ const SCRIPT = "script"
|
||||
|
||||
func init() {
|
||||
Index.MergeCommands(ice.Commands{
|
||||
SCRIPT: {Name: "script zone id auto", Help: "脚本", Actions: ice.MergeActions(mdb.ZoneAction(mdb.FIELDS, "time,index,auto")), Hand: func(m *ice.Message, arg ...string) {
|
||||
mdb.ZoneSelect(m, arg...)
|
||||
m.Display("")
|
||||
if len(arg) == 0 {
|
||||
m.PushAction("play", mdb.REMOVE)
|
||||
SCRIPT: {Name: "script zone id auto", Help: "脚本化", Icon: "script.png", Actions: ice.MergeActions(ice.Actions{
|
||||
mdb.INSERT: {Name: "insert zone space index"},
|
||||
}, mdb.ImportantZoneAction(mdb.FIELDS, "time,id,space,index,play,status"),
|
||||
), Hand: func(m *ice.Message, arg ...string) {
|
||||
if mdb.ZoneSelect(m.Options(mdb.CACHE_LIMIT, "30"), arg...).Display(""); len(arg) == 0 {
|
||||
m.PushAction(cli.RECORD, mdb.REMOVE).Action(mdb.CREATE, cli.STOP)
|
||||
} else {
|
||||
m.Action("play")
|
||||
m.Sort(mdb.ID, ice.INT).PushAction("preview").Action(mdb.INSERT, cli.PLAY)
|
||||
}
|
||||
}},
|
||||
})
|
||||
|
@ -1,19 +1,32 @@
|
||||
(function() { SCRIPT_ZONE = "web.chat.script:zone"
|
||||
Volcanos(chat.ONIMPORT, {
|
||||
_init: function(can, msg) {
|
||||
can.onappend.table(can, msg)
|
||||
can.onappend.board(can, msg)
|
||||
_init: function(can, msg) { can.onappend.table(can, msg), can.onappend.board(can, msg)
|
||||
var zone = can.misc.sessionStorage(can, SCRIPT_ZONE), tr = can.page.Select(can, can._output, html.TR)[1]
|
||||
msg.Table(function(value, index) { zone && value.zone == zone && can.onmotion.select(can, tr.parentNode, html.TR, index, function(target) {
|
||||
can.onappend.style(can, html.DANGER, target)
|
||||
}) })
|
||||
},
|
||||
})
|
||||
Volcanos(chat.ONACTION, {
|
||||
play: function(event, can) {
|
||||
can.core.Next(can._msg.Table(), function(value, next) {
|
||||
var done = false
|
||||
can.onappend.plugin(can, {index: value.index}, function(sub) {
|
||||
can.onmotion.delay(can, function() {
|
||||
if (!sub._auto) { sub.Update({}, [ctx.ACTION, value.auto], function() { next() }) }
|
||||
}, 300)
|
||||
sub.onexport.output = function() { done || sub.Update({}, [ctx.ACTION, value.auto], function() { next() }), done = true }
|
||||
})
|
||||
record: function(event, can, msg) { can.misc.sessionStorage(can, SCRIPT_ZONE, msg.Option(mdb.ZONE)), can.user.toastSuccess(can, msg.Option(mdb.ZONE)), can.Update(event) },
|
||||
enable: function(event, can, msg) { can.runAction(event, mdb.MODIFY, [mdb.STATUS, mdb.ENABLE]) },
|
||||
disable: function(event, can, msg) { can.runAction(event, mdb.MODIFY, [mdb.STATUS, mdb.DISABLE]) },
|
||||
stop: function(event, can, msg) { can.misc.sessionStorage(can, SCRIPT_ZONE, ""), can.Update(event) },
|
||||
play: function(event, can) { can.core.Next(can._msg.Table(), function(value, next, index) {
|
||||
can.user.toastProcess(can, `${value.index} ${value.play} ${index} / ${can._msg.Length()}`)
|
||||
can.Status(cli.STEP, value.index)
|
||||
var tr = can.page.Select(can, can._output, html.TR)[1]; can.onmotion.select(can, tr.parentNode, html.TR, index)
|
||||
value.status == mdb.DISABLE? next(): can.onaction.preview({}, can, can.request({}, value), next)
|
||||
}, function() { can.user.toastSuccess(can) }) },
|
||||
preview: function(event, can, msg, next) {
|
||||
can.onappend.plugin(can, {space: msg.Option(web.SPACE), index: msg.Option(ctx.INDEX)}, function(sub) { var done = false
|
||||
function action(skip) { sub.Update(can.request({}, {_handle: ice.TRUE}), [ctx.ACTION, msg.Option(cli.PLAY)], function(msg) {
|
||||
sub.onimport._process(sub, msg) || msg.Length() == 0 && msg.Result() == "" || can.onappend._output(sub, msg), next && next() }) }
|
||||
can.onmotion.delay(can, function() { if (done || sub._auto) { return } done = true, action() }, 300)
|
||||
sub.onexport.output = function() { if (done) { return } done = true, action(true)
|
||||
can.page.style(can, sub._output, html.HEIGHT, "", html.MAX_HEIGHT, "")
|
||||
}, can.onmotion.scrollIntoView(can, sub._target)
|
||||
})
|
||||
},
|
||||
})
|
||||
})()
|
||||
|
Loading…
x
Reference in New Issue
Block a user