pull/184/merge
Vincent Heins 7 years ago committed by GitHub
commit 29c21ed893
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 20
      bot.go
  2. 2
      bot_test.go
  3. 3
      helpers_test.go
  4. 48
      types.go
  5. 35
      types_test.go

@ -505,17 +505,25 @@ func (bot *BotAPI) GetUpdatesChan(config UpdateConfig) (UpdatesChannel, error) {
return ch, nil
}
//GetWebhookUpdate gathers webhook information from a http.Request
func GetWebhookUpdate(r *http.Request) (*Update, error) {
b, err := ioutil.ReadAll(r.Body)
if err != nil {
return nil, err
}
var update Update
err = json.Unmarshal(b, &update)
return &update, err
}
// ListenForWebhook registers a http handler for a webhook.
func (bot *BotAPI) ListenForWebhook(pattern string) UpdatesChannel {
ch := make(chan Update, bot.Buffer)
http.HandleFunc(pattern, func(w http.ResponseWriter, r *http.Request) {
bytes, _ := ioutil.ReadAll(r.Body)
var update Update
json.Unmarshal(bytes, &update)
ch <- update
update, _ := GetWebhookUpdate(r)
ch <- *update
})
return ch

@ -8,7 +8,7 @@ import (
"testing"
"time"
"github.com/go-telegram-bot-api/telegram-bot-api"
"github.com/TheMysteriousVincent/telegram-bot-api"
)
const (

@ -1,8 +1,9 @@
package tgbotapi_test
import (
"github.com/go-telegram-bot-api/telegram-bot-api"
"testing"
"github.com/TheMysteriousVincent/telegram-bot-api"
)
func TestNewInlineQueryResultArticle(t *testing.T) {

@ -184,6 +184,54 @@ func (m *Message) IsCommand() bool {
return entity.Offset == 0 && entity.Type == "bot_command"
}
//Command represents a command contained in a message
type Command struct {
Name string
Arguments []string
}
//Commands represents a slice of Command
type Commands []Command
//GetCommands returns all commands
func (m *Message) GetCommands() (*Commands, error) {
var botCmdsEntries []MessageEntity
for _, e := range *m.Entities {
if e.Type == "bot_command" {
botCmdsEntries = append(botCmdsEntries, e)
}
}
var cmds Commands
text := []rune(m.Text)
textLen := len(text)
for i := 0; i < len(botCmdsEntries); i++ {
e := botCmdsEntries[i]
nOff := textLen
if i+1 < len(botCmdsEntries) {
nOff = (botCmdsEntries[i+1]).Offset
}
cmd := Command{
Name: string(text[e.Offset+1 : e.Offset+e.Length]),
Arguments: strings.Fields(string(text[e.Offset+e.Length : nOff])),
}
cmds = append(cmds, cmd)
}
return &cmds, nil
}
//CountCommands counts all commands in a message
func (m *Message) CountCommands() int {
var c int
for _, e := range *m.Entities {
if e.Type == "bot_command" {
c++
}
}
return c
}
// Command checks if the message was a command and if it was, returns the
// command. If the Message was not a command, it returns an empty string.
//

@ -1,10 +1,11 @@
package tgbotapi_test
import (
"fmt"
"testing"
"time"
"github.com/go-telegram-bot-api/telegram-bot-api"
"github.com/TheMysteriousVincent/telegram-bot-api"
)
func TestUserStringWith(t *testing.T) {
@ -45,6 +46,38 @@ func TestMessageTime(t *testing.T) {
}
}
func TestGetCommands(t *testing.T) {
message := tgbotapi.Message{Text: "/test t\n/testCommandsWith2Arguments TestArgument1 TestArgument2"}
message.Entities = &[]tgbotapi.MessageEntity{
{
Type: "bot_command",
Offset: 0,
Length: 5,
},
{
Type: "bot_command",
Offset: 8,
Length: 27,
},
}
cmds, _ := message.GetCommands()
fmt.Println(*cmds)
if len(*cmds) != 2 {
t.Fatal("there have to be exactly two entries")
}
cmd := (*cmds)[0]
if cmd.Name != "test" {
t.Fatal("name of cmd 1 is '", cmd.Name, "' (test)")
}
cmd = (*cmds)[1]
if cmd.Name != "testCommandsWith2Arguments" {
t.Fatal("name of cmd 1 is '", cmd.Name, "' (testCommandsWith2Arguments)")
}
}
func TestMessageIsCommandWithCommand(t *testing.T) {
message := tgbotapi.Message{Text: "/command"}
message.Entities = &[]tgbotapi.MessageEntity{{Type: "bot_command", Offset: 0, Length: 8}}