Implement proper version command
This commit is contained in:
@@ -5,8 +5,11 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
"os/signal"
|
"os/signal"
|
||||||
|
"regexp"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
_ "embed"
|
||||||
|
|
||||||
"buny-jabber-bot/internal/jabber"
|
"buny-jabber-bot/internal/jabber"
|
||||||
|
|
||||||
"github.com/eleksir/go-xmpp"
|
"github.com/eleksir/go-xmpp"
|
||||||
@@ -14,8 +17,13 @@ import (
|
|||||||
"gopkg.in/tomb.v2"
|
"gopkg.in/tomb.v2"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
//go:embed version
|
||||||
|
var version string
|
||||||
|
|
||||||
// main - фактичеcки, начало и основное тело программы.
|
// main - фактичеcки, начало и основное тело программы.
|
||||||
func main() {
|
func main() {
|
||||||
|
var err error
|
||||||
|
|
||||||
for {
|
for {
|
||||||
var j = jabber.Jabber{ //nolint:exhaustruct
|
var j = jabber.Jabber{ //nolint:exhaustruct
|
||||||
SigChan: make(chan os.Signal, 1),
|
SigChan: make(chan os.Signal, 1),
|
||||||
@@ -37,6 +45,8 @@ func main() {
|
|||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
j.C.Version = version
|
||||||
|
|
||||||
// no panic
|
// no panic
|
||||||
switch j.C.Loglevel {
|
switch j.C.Loglevel {
|
||||||
case "fatal":
|
case "fatal":
|
||||||
@@ -66,6 +76,23 @@ func main() {
|
|||||||
log.SetOutput(logfile)
|
log.SetOutput(logfile)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
j.C.ExeName, err = os.Executable()
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
log.Panicf("Unable to find my executable: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// handle pricky windows case. But honestly i do not expect it runs on windows.
|
||||||
|
if regexp.MustCompile(".[Ee][Xx][Ee]$").MatchString(j.C.ExeName) {
|
||||||
|
j.C.ExeName = j.C.ExeName[:len(j.C.ExeName)-4]
|
||||||
|
|
||||||
|
if j.C.ExeName == "" {
|
||||||
|
j.C.ExeName = "buny-jabber-bot"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Infof("Service %s v%s starting", j.C.ExeName, j.C.Version)
|
||||||
|
|
||||||
myLogLevel := log.GetLevel()
|
myLogLevel := log.GetLevel()
|
||||||
log.Warnf("Loglevel set to %v", myLogLevel)
|
log.Warnf("Loglevel set to %v", myLogLevel)
|
||||||
|
|
||||||
|
|||||||
1
cmd/buny-jabber-bot/version
Normal file
1
cmd/buny-jabber-bot/version
Normal file
@@ -0,0 +1 @@
|
|||||||
|
0.1
|
||||||
@@ -30,9 +30,10 @@ func (j *Jabber) Cmd(v xmpp.Chat) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if chosenOneTalks {
|
if chosenOneTalks {
|
||||||
answer = fmt.Sprintf("%sпомощь - этот список команд\n", j.C.CSign)
|
answer = fmt.Sprintf("%sпомощь - этот список команд\n", j.C.CSign)
|
||||||
answer += fmt.Sprintf("%shelp - this commands list\n", j.C.CSign)
|
answer += fmt.Sprintf("%shelp - this commands list\n", j.C.CSign)
|
||||||
answer += fmt.Sprintf("%srehash - reload white and black lists", j.C.CSign)
|
answer += fmt.Sprintf("%srehash - reload white and black lists (available to bot admins only)\n", j.C.CSign)
|
||||||
|
answer += fmt.Sprintf("%sver|%sversion - prints version of software", j.C.CSign, j.C.CSign)
|
||||||
} else {
|
} else {
|
||||||
answer = "Ничем помочь не могу. Луна не светит на тебя."
|
answer = "Ничем помочь не могу. Луна не светит на тебя."
|
||||||
}
|
}
|
||||||
@@ -88,6 +89,13 @@ func (j *Jabber) Cmd(v xmpp.Chat) error {
|
|||||||
v.Remote,
|
v.Remote,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var msg xmpp.Chat
|
||||||
|
msg.Remote = v.Remote
|
||||||
|
msg.Type = v.Type
|
||||||
|
msg.Text = "Ничем помочь не могу. Луна не светит на тебя."
|
||||||
|
|
||||||
|
_, err := j.Talk.Send(msg)
|
||||||
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -156,6 +164,13 @@ func (j *Jabber) Cmd(v xmpp.Chat) error {
|
|||||||
v.Remote,
|
v.Remote,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var msg xmpp.Chat
|
||||||
|
msg.Remote = v.Remote
|
||||||
|
msg.Type = v.Type
|
||||||
|
msg.Text = "Ничем помочь не могу. Луна не светит на тебя."
|
||||||
|
|
||||||
|
_, err := j.Talk.Send(msg)
|
||||||
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -202,6 +217,29 @@ func (j *Jabber) Cmd(v xmpp.Chat) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return err
|
return err
|
||||||
|
case v.Text == fmt.Sprintf("%sver", j.C.CSign) || v.Text == fmt.Sprintf("%sversion", j.C.CSign):
|
||||||
|
var (
|
||||||
|
answer = fmt.Sprintf("Version %s", j.C.Version)
|
||||||
|
)
|
||||||
|
|
||||||
|
dest := v.Remote
|
||||||
|
|
||||||
|
if v.Type == "groupchat" {
|
||||||
|
dest = (strings.SplitN(v.Remote, "/", 2))[0]
|
||||||
|
}
|
||||||
|
|
||||||
|
if _, err := j.Talk.Send(
|
||||||
|
xmpp.Chat{ //nolint:exhaustruct
|
||||||
|
Remote: dest,
|
||||||
|
Text: strings.TrimSpace(answer),
|
||||||
|
Type: v.Type,
|
||||||
|
},
|
||||||
|
); err != nil {
|
||||||
|
err = fmt.Errorf("unable to send message to %s: %w", v.Remote, err)
|
||||||
|
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -121,8 +121,8 @@ func (j *Jabber) ParseEvent(e interface{}) { //nolint:maintidx,gocognit,gocyclo
|
|||||||
|
|
||||||
if id, err := j.Talk.IqVersionResponse(
|
if id, err := j.Talk.IqVersionResponse(
|
||||||
v,
|
v,
|
||||||
"buny-jabber-bot",
|
j.C.ExeName,
|
||||||
"1.dev",
|
j.C.Version,
|
||||||
(strings.SplitN(runtime.GOOS, "/", 2))[0],
|
(strings.SplitN(runtime.GOOS, "/", 2))[0],
|
||||||
); err != nil {
|
); err != nil {
|
||||||
err := fmt.Errorf(
|
err := fmt.Errorf(
|
||||||
|
|||||||
@@ -58,6 +58,8 @@ type MyConfig struct {
|
|||||||
CSign string `json:"csign,omitempty"`
|
CSign string `json:"csign,omitempty"`
|
||||||
Loglevel string `json:"loglevel,omitempty"`
|
Loglevel string `json:"loglevel,omitempty"`
|
||||||
Log string `json:"log,omitempty"`
|
Log string `json:"log,omitempty"`
|
||||||
|
Version string `json:"version,omitempty"`
|
||||||
|
ExeName string `json:"exe_name,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// MyWhiteList прототип структурки с белым списком jid-ов.
|
// MyWhiteList прототип структурки с белым списком jid-ов.
|
||||||
|
|||||||
Reference in New Issue
Block a user