Improved dispatchers and doc handler
This commit is contained in:
parent
1ce64520e1
commit
e1be5d24c4
34
handlers.go
34
handlers.go
|
@ -7,6 +7,7 @@ import (
|
||||||
"math/rand"
|
"math/rand"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/url"
|
"net/url"
|
||||||
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"git.nefrace.ru/nefrace/nechotron"
|
"git.nefrace.ru/nefrace/nechotron"
|
||||||
|
@ -14,8 +15,7 @@ import (
|
||||||
"github.com/NicoNex/echotron/v3"
|
"github.com/NicoNex/echotron/v3"
|
||||||
)
|
)
|
||||||
|
|
||||||
var docApiURL40 = "https://docs.godotengine.org/_/api/v2/search/?q=%s&project=godot&version=latest&language=en"
|
var docApiURL = "https://docs.godotengine.org/_/api/v2/search/?q=%s&project=godot&version=%s&language=en"
|
||||||
var docApiURL35 = "https://docs.godotengine.org/_/api/v2/search/?q=%s&project=godot&version=3.5&language=en"
|
|
||||||
var docURL = "https://docs.godotengine.org/ru/stable/search.html?q=%s"
|
var docURL = "https://docs.godotengine.org/ru/stable/search.html?q=%s"
|
||||||
|
|
||||||
type DocResponse struct {
|
type DocResponse struct {
|
||||||
|
@ -36,10 +36,10 @@ type DocHighlights struct {
|
||||||
Title []string `json:"title"`
|
Title []string `json:"title"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func getDocs(topic string) (string, error) {
|
func getDocs(topic string, version string) (string, error) {
|
||||||
topic_escaped := nechotron.EscapeMd2(topic)
|
topic_escaped := nechotron.EscapeMd2(topic)
|
||||||
not_found := fmt.Sprintf("Извините, по запросу *%s* ничего не найдено.", topic_escaped)
|
not_found := fmt.Sprintf("Извините, по запросу *%s* ничего не найдено.", topic_escaped)
|
||||||
req, err := url.ParseRequestURI(fmt.Sprintf(docApiURL40, url.QueryEscape(topic)))
|
req, err := url.ParseRequestURI(fmt.Sprintf(docApiURL, url.QueryEscape(topic), version))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return not_found, err
|
return not_found, err
|
||||||
}
|
}
|
||||||
|
@ -62,7 +62,7 @@ func getDocs(topic string) (string, error) {
|
||||||
link, _ := url.JoinPath(r.Domain, r.Path)
|
link, _ := url.JoinPath(r.Domain, r.Path)
|
||||||
textResults += fmt.Sprintf("%d\\. [%s](%s)\n", i+1, text, link)
|
textResults += fmt.Sprintf("%d\\. [%s](%s)\n", i+1, text, link)
|
||||||
}
|
}
|
||||||
text := fmt.Sprintf("Вот что я нашла по запросу *%s*: \n\n%s", topic_escaped, textResults)
|
text := fmt.Sprintf("Вот что я нашла по запросу *%s* \\(для версии `%s`\\): \n\n%s", topic_escaped, version, textResults)
|
||||||
return text, nil
|
return text, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -71,7 +71,7 @@ func handleDocRequest(u *nechotron.Update) error {
|
||||||
kb := nechotron.NewInlineKeyboard().
|
kb := nechotron.NewInlineKeyboard().
|
||||||
Row(
|
Row(
|
||||||
nechotron.InButtonCallback("Дай для 3.5", fmt.Sprintf("docs3:%s", topic)),
|
nechotron.InButtonCallback("Дай для 3.5", fmt.Sprintf("docs3:%s", topic)),
|
||||||
nechotron.InButtonCallback("А на русском можно?", fmt.Sprintf("docs3:%s", topic))).
|
nechotron.InButtonCallback("А на русском можно?", "rudocs")).
|
||||||
Row(nechotron.InButtonURL("Поищу сам", fmt.Sprintf(docURL, url.QueryEscape(topic)))).
|
Row(nechotron.InButtonURL("Поищу сам", fmt.Sprintf(docURL, url.QueryEscape(topic)))).
|
||||||
Row(nechotron.InButtonCallback("Спасибо, не надо", "delete"))
|
Row(nechotron.InButtonCallback("Спасибо, не надо", "delete"))
|
||||||
opts := nechotron.NewOptions().
|
opts := nechotron.NewOptions().
|
||||||
|
@ -80,7 +80,7 @@ func handleDocRequest(u *nechotron.Update) error {
|
||||||
ReplyMarkup(kb.Markup()).
|
ReplyMarkup(kb.Markup()).
|
||||||
MessageOptions()
|
MessageOptions()
|
||||||
|
|
||||||
text, docerr := getDocs(topic)
|
text, docerr := getDocs(topic, "latest")
|
||||||
if docerr != nil {
|
if docerr != nil {
|
||||||
log.Println("Can't get docs: ", docerr)
|
log.Println("Can't get docs: ", docerr)
|
||||||
}
|
}
|
||||||
|
@ -88,6 +88,26 @@ func handleDocRequest(u *nechotron.Update) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func handleDocRequest3(u *nechotron.Update) error {
|
||||||
|
topic := strings.TrimPrefix(u.Callback(), "docs3:")
|
||||||
|
kb := nechotron.NewInlineKeyboard().
|
||||||
|
Row(
|
||||||
|
nechotron.InButtonCallback("А на русском можно?", "rudocs")).
|
||||||
|
Row(nechotron.InButtonURL("Поищу сам", fmt.Sprintf(docURL, url.QueryEscape(topic)))).
|
||||||
|
Row(nechotron.InButtonCallback("Спасибо, не надо", "delete"))
|
||||||
|
opts := nechotron.NewOptions().
|
||||||
|
MarkdownV2().
|
||||||
|
ReplyMarkup(kb.Markup()).
|
||||||
|
MessageTextOptions()
|
||||||
|
|
||||||
|
text, docerr := getDocs(topic, "3.5")
|
||||||
|
if docerr != nil {
|
||||||
|
log.Println("Can't get docs: ", docerr)
|
||||||
|
}
|
||||||
|
_, err := u.EditText(text, opts)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
func handleKarma(u *nechotron.Update) error {
|
func handleKarma(u *nechotron.Update) error {
|
||||||
from, _ := u.Ctx.Value("userfrom").(*User)
|
from, _ := u.Ctx.Value("userfrom").(*User)
|
||||||
to, _ := u.Ctx.Value("userto").(*User)
|
to, _ := u.Ctx.Value("userto").(*User)
|
||||||
|
|
1
main.go
1
main.go
|
@ -17,6 +17,7 @@ var BuildTime string
|
||||||
var db *tongo.Database
|
var db *tongo.Database
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
log.Println("Starting Go-Dette")
|
||||||
godotenv.Load()
|
godotenv.Load()
|
||||||
var err error
|
var err error
|
||||||
db, err = tongo.NewConnection(os.Getenv("MONGO_URI"), "godette")
|
db, err = tongo.NewConnection(os.Getenv("MONGO_URI"), "godette")
|
||||||
|
|
12
states.go
12
states.go
|
@ -6,22 +6,20 @@ import (
|
||||||
|
|
||||||
var MainState = neco.State{
|
var MainState = neco.State{
|
||||||
Fn: func(u *neco.Update) error {
|
Fn: func(u *neco.Update) error {
|
||||||
callbackDispatcher := neco.NewDispatcher().
|
|
||||||
HandleCallback(neco.CallbackExact("delete"), handleDeleteCallback)
|
|
||||||
// HandleCallback(neco.CallbackPrefix("docs3"), handleDocRequest3)
|
|
||||||
adminOnly := neco.NewDispatcher().
|
adminOnly := neco.NewDispatcher().
|
||||||
HandleFilter(neco.IsUserAdmin, callbackDispatcher.Run)
|
HandleCallback(neco.CallbackExact("delete"), handleDeleteCallback).
|
||||||
|
HandleCommand(commandSay, handleSay)
|
||||||
mainCommands := neco.NewDispatcher().
|
mainCommands := neco.NewDispatcher().
|
||||||
HandleCommand(commandMe, handleMe).
|
HandleCommand(commandMe, handleMe).
|
||||||
HandleCommand(commandHelp, handleHelp).
|
HandleCommand(commandHelp, handleHelp)
|
||||||
HandleCommand(commandSay, handleSay)
|
|
||||||
replyDispatcher := neco.NewDispatcher().
|
replyDispatcher := neco.NewDispatcher().
|
||||||
HandleCommand(commandWarn, handleWarn).
|
HandleCommand(commandWarn, handleWarn).
|
||||||
HandleFilter(karmaTriggers, handleKarma)
|
HandleFilter(karmaTriggers, handleKarma)
|
||||||
replies := neco.NewDispatcher().
|
replies := neco.NewDispatcher().
|
||||||
HandleFilter(neco.IsReply, replyDispatcher.Run)
|
HandleFilter(neco.IsReply, replyDispatcher.Run)
|
||||||
docs := neco.NewDispatcher().
|
docs := neco.NewDispatcher().
|
||||||
HandleFilter(docRequest, handleDocRequest)
|
HandleFilter(docRequest, handleDocRequest).
|
||||||
|
HandleCallback(neco.CallbackPrefix("docs3"), handleDocRequest3)
|
||||||
triggers := neco.NewDispatcher().
|
triggers := neco.NewDispatcher().
|
||||||
HandleFilter(offtopTrigger, handleOfftop)
|
HandleFilter(offtopTrigger, handleOfftop)
|
||||||
return neco.ChainRun(u, mainCommands, replies, docs, adminOnly, triggers)
|
return neco.ChainRun(u, mainCommands, replies, docs, adminOnly, triggers)
|
||||||
|
|
Loading…
Reference in New Issue