add line message command , not fin
This commit is contained in:
@@ -2,6 +2,7 @@ package linemsg
|
||||
|
||||
import (
|
||||
lineobj "git.trj.tw/golang/mtfosbot/module/line-message/line-object"
|
||||
msgcmd "git.trj.tw/golang/mtfosbot/module/message-command"
|
||||
)
|
||||
|
||||
func messageType(e *lineobj.EventObject) {
|
||||
@@ -31,8 +32,8 @@ func textMsg(e *lineobj.EventObject) {
|
||||
|
||||
// group action
|
||||
if e.Source.Type == "group" {
|
||||
if _, ok := mtxt.(string); ok {
|
||||
|
||||
if txt, ok := mtxt.(string); ok {
|
||||
msgcmd.ParseLineMsg(txt, e.ReplyToken, e.Source)
|
||||
}
|
||||
}
|
||||
return
|
||||
|
||||
@@ -0,0 +1,148 @@
|
||||
package msgcmd
|
||||
|
||||
import (
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"git.trj.tw/golang/mtfosbot/module/apis/twitch"
|
||||
|
||||
"git.trj.tw/golang/mtfosbot/model"
|
||||
lineobj "git.trj.tw/golang/mtfosbot/module/line-message/line-object"
|
||||
)
|
||||
|
||||
func selectAct(cmd, sub, txt string, s *lineobj.SourceObject) (res string) {
|
||||
switch cmd {
|
||||
case "addgroup":
|
||||
return addLineGroup(sub, txt, s)
|
||||
case "addpage":
|
||||
return addFacebookPage(sub, txt, s)
|
||||
case "addtwitch":
|
||||
return addTwitchChannel(sub, txt, s)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func addLineGroup(sub, txt string, s *lineobj.SourceObject) (res string) {
|
||||
// args = groupName notify
|
||||
exists, err := model.CheckGroup(s.GroupID)
|
||||
if err != nil {
|
||||
return "run check group error"
|
||||
}
|
||||
if exists {
|
||||
return "group exists"
|
||||
}
|
||||
args := strings.Split(strings.Trim(txt, " "), " ")
|
||||
if len(args) < 2 {
|
||||
return "command args not match"
|
||||
}
|
||||
i, err := strconv.ParseInt(args[1], 10, 8)
|
||||
if err != nil || i < 0 || i > 1 {
|
||||
return "notify plases input 1 or 0"
|
||||
}
|
||||
|
||||
_, err = model.AddLineGroup(args[0], s.UserID, i == 1)
|
||||
if err != nil {
|
||||
return "add group fail"
|
||||
}
|
||||
|
||||
return "Success"
|
||||
}
|
||||
|
||||
func addFacebookPage(sub, txt string, s *lineobj.SourceObject) (res string) {
|
||||
// args = pageid tmpl
|
||||
exists, err := model.CheckGroup(s.GroupID)
|
||||
if err != nil {
|
||||
return "run check group error"
|
||||
}
|
||||
if !exists {
|
||||
return "group not exists"
|
||||
}
|
||||
ok, err := model.CheckGroupOwner(s.UserID, s.GroupID)
|
||||
if err != nil {
|
||||
return "run check group owner fail"
|
||||
}
|
||||
if !ok {
|
||||
return "not owner"
|
||||
}
|
||||
|
||||
args := strings.Split(strings.Trim(txt, " "), " ")
|
||||
if len(args) < 2 {
|
||||
return "command args not match"
|
||||
}
|
||||
|
||||
page, err := model.GetFacebookPage(args[0])
|
||||
if err != nil {
|
||||
return "check facebook page fail"
|
||||
}
|
||||
if page == nil {
|
||||
page = &model.FacebookPage{
|
||||
ID: args[0],
|
||||
}
|
||||
err = page.AddPage()
|
||||
if err != nil {
|
||||
return "add facebook page fail"
|
||||
}
|
||||
}
|
||||
|
||||
rt := &model.LineFacebookRT{
|
||||
Line: s.GroupID,
|
||||
Facebook: args[0],
|
||||
Tmpl: strings.Join(args[1:], " "),
|
||||
}
|
||||
|
||||
err = rt.AddRT()
|
||||
if err != nil {
|
||||
return "add facebook page fail"
|
||||
}
|
||||
|
||||
return "Success"
|
||||
}
|
||||
|
||||
func addTwitchChannel(sub, txt string, s *lineobj.SourceObject) (res string) {
|
||||
// args = twitchLogin type tmpl
|
||||
exists, err := model.CheckGroup(s.GroupID)
|
||||
if err != nil {
|
||||
return "run check group error"
|
||||
}
|
||||
if !exists {
|
||||
return "group not exists"
|
||||
}
|
||||
ok, err := model.CheckGroupOwner(s.UserID, s.GroupID)
|
||||
if err != nil {
|
||||
return "run check group owner fail"
|
||||
}
|
||||
if !ok {
|
||||
return "not owner"
|
||||
}
|
||||
|
||||
args := strings.Split(strings.Trim(txt, " "), " ")
|
||||
if len(args) < 3 {
|
||||
return "command args not match"
|
||||
}
|
||||
|
||||
info := twitch.GetUserDataByName(args[0])
|
||||
if info == nil {
|
||||
return "get twitch user id fail"
|
||||
}
|
||||
|
||||
ch := &model.TwitchChannel{
|
||||
ID: info.ID,
|
||||
Name: info.DisplayName,
|
||||
}
|
||||
err = ch.Add()
|
||||
if err != nil {
|
||||
return "add twitch channel fail"
|
||||
}
|
||||
|
||||
rt := &model.LineTwitchRT{
|
||||
Line: s.GroupID,
|
||||
Twitch: info.ID,
|
||||
Tmpl: strings.Join(args[2:], " "),
|
||||
}
|
||||
err = rt.AddRT()
|
||||
if err != nil {
|
||||
return "add rt data fail"
|
||||
}
|
||||
|
||||
return "Success"
|
||||
}
|
||||
@@ -0,0 +1,102 @@
|
||||
package msgcmd
|
||||
|
||||
import (
|
||||
"regexp"
|
||||
"strings"
|
||||
|
||||
"git.trj.tw/golang/mtfosbot/model"
|
||||
|
||||
"git.trj.tw/golang/mtfosbot/module/apis/line"
|
||||
lineobj "git.trj.tw/golang/mtfosbot/module/line-message/line-object"
|
||||
)
|
||||
|
||||
func parseCMD(in string) (c [][]string) {
|
||||
re, err := regexp.Compile("{{(.+?)}}")
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
c = re.FindAllStringSubmatch(in, -1)
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
// ParseLineMsg -
|
||||
func ParseLineMsg(txt, replyToken string, source *lineobj.SourceObject) {
|
||||
if source.Type != "group" {
|
||||
return
|
||||
}
|
||||
strs := strings.Split(strings.Trim(txt, " "), " ")
|
||||
// skip empty string
|
||||
if len(strs[0]) == 0 {
|
||||
return
|
||||
}
|
||||
|
||||
if strings.HasPrefix(strs[0], "!") || strings.HasPrefix(strs[0], "!") {
|
||||
// nor cmd
|
||||
cmd := strs[0][1:]
|
||||
if len(cmd) == 0 {
|
||||
return
|
||||
}
|
||||
c, err := model.GetGroupCommand(cmd, source.GroupID)
|
||||
if err != nil || c == nil {
|
||||
return
|
||||
}
|
||||
|
||||
str := runCMD(strings.Join(strs[1:], " "), c.Message, source)
|
||||
m := parseResult(str)
|
||||
line.ReplyMessage(replyToken, m)
|
||||
|
||||
} else {
|
||||
// key cmd
|
||||
c, err := model.GetGroupKeyCommand(strs[0], source.GroupID)
|
||||
if err != nil || c == nil {
|
||||
return
|
||||
}
|
||||
|
||||
str := runCMD(strings.Join(strs[1:], " "), c.Message, source)
|
||||
m := parseResult(str)
|
||||
line.ReplyMessage(replyToken, m)
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
func parseResult(str string) interface{} {
|
||||
var m interface{}
|
||||
|
||||
if strings.HasPrefix(str, "$image$") {
|
||||
str = strings.Replace(str, "$image$", "", 1)
|
||||
strs := strings.Split(str, ";")
|
||||
m = &line.ImageMessage{
|
||||
OriginalContentURL: strs[0],
|
||||
PreviewImageURL: strs[1],
|
||||
}
|
||||
} else {
|
||||
m = &line.TextMessage{
|
||||
Text: str,
|
||||
}
|
||||
}
|
||||
|
||||
return m
|
||||
}
|
||||
|
||||
func runCMD(txt, c string, s *lineobj.SourceObject) (res string) {
|
||||
cmdAct := parseCMD(c)
|
||||
if len(cmdAct) == 0 {
|
||||
return c
|
||||
}
|
||||
res = c
|
||||
for _, v := range cmdAct {
|
||||
if len(v) > 1 {
|
||||
// run cmd
|
||||
m := strings.Split(v[1], "=")
|
||||
sub := ""
|
||||
if len(m) > 1 {
|
||||
sub = strings.Join(m[1:], " ")
|
||||
}
|
||||
cmdRes := selectAct(m[0], sub, txt, s)
|
||||
res = strings.Replace(res, v[1], cmdRes, 1)
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
@@ -73,13 +73,6 @@ func JoinChannel(ch string) {
|
||||
},
|
||||
}
|
||||
queue.Add(m)
|
||||
|
||||
// msg := &irc.Message{}
|
||||
// msg.Command = "JOIN"
|
||||
// msg.Params = []string{
|
||||
// fmt.Sprintf("#%s", ch),
|
||||
// }
|
||||
// client.WriteMessage(msg)
|
||||
}
|
||||
|
||||
// LeaveChannel -
|
||||
|
||||
Reference in New Issue
Block a user