1
0
forked from x/icebergs

add chat.script

This commit is contained in:
IT 老营长 @云轩领航-创始人 2024-01-21 16:00:59 +08:00
parent 5d8cfa9138
commit 2db2f39649
7 changed files with 44 additions and 24 deletions

View File

@ -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"

View File

@ -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:

View File

@ -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
}

View File

@ -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)

View File

@ -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...)

View File

@ -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)
}
}},
})

View File

@ -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)
})
},
})
})()