-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmatch.go
106 lines (87 loc) · 2.75 KB
/
match.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
package main
import (
"fmt"
"log"
tb "gopkg.in/tucnak/telebot.v2"
)
// Match contains all data about the match
type Match struct {
CardsNumber int
Cards []Card
Bot *tb.Bot
}
// ShowCards show all cards on match to user
func (match *Match) ShowCards(sender *tb.User, messageToEdit ...*tb.Message) {
selectorCards := match.Bot.NewMarkup()
for ii := range match.Cards {
var btn = newButton(fmt.Sprintf(`🎆 Number: %s Color: %s`, match.Cards[ii].Number, match.Cards[ii].Color), selectCardBtn.Unique, ButtonData{
CardIndex: &ii,
})
selectorCards.InlineKeyboard = append(selectorCards.InlineKeyboard, []tb.InlineButton{*btn.Inline()})
}
if len(messageToEdit) > 0 {
if _, err := match.Bot.Edit(messageToEdit[0], "Cards Info:", selectorCards); err != nil {
log.Panic(err)
}
} else {
if _, err := match.Bot.Send(sender, "Cards Info:", selectorCards); err != nil {
log.Panic(err)
}
}
}
// newMatch initialize a new match with the initial values
func newMatch(b *tb.Bot, cardsNumber int) (match *Match) {
match = &Match{Bot: b, CardsNumber: cardsNumber}
for ii := 0; ii < cardsNumber; ii++ {
match.Cards = append(match.Cards, newCard())
}
return
}
// getCurrentMatch get a current match of an user
func getCurrentMatch(senderID int) (*Match, bool) {
var match, ok = matches[senderID]
return match, ok
}
// Handlers
func startMatchHandler(m *tb.Message) {
var (
numCardsSelector = &tb.ReplyMarkup{ResizeReplyKeyboard: true, OneTimeKeyboard: true, ReplyKeyboardRemove: true}
err error
)
numCardsSelector.Reply(
numCardsSelector.Row(*numCardsBtn4),
numCardsSelector.Row(*numCardsBtn5),
)
if _, err = bot.Send(m.Sender, "Select cards number", numCardsSelector); err != nil {
log.Fatal(err)
}
}
func selectCardHandler(c *tb.Callback) {
var (
match *Match
matchOK bool
infoToAddSelector = bot.NewMarkup()
actionsRows = []tb.Row{
infoToAddSelector.Row(infoToAddSelector.Data(addNumberCardBtn.Text, addNumberCardBtn.Unique, c.Data)),
infoToAddSelector.Row(infoToAddSelector.Data(addColorCardBtn.Text, addColorCardBtn.Unique, c.Data)),
}
btnData ButtonData
err error
)
btnData.Parse(c.Data)
if match, matchOK = getCurrentMatch(c.Sender.ID); !matchOK {
log.Panic("No match")
}
if match.Cards[*btnData.CardIndex].HasAnyInfo() {
actionsRows = append(actionsRows, infoToAddSelector.Row(infoToAddSelector.Data(removeInfoBtn.Text, removeInfoBtn.Unique, c.Data)))
}
infoToAddSelector.Inline(
actionsRows...,
)
if _, err = bot.Edit(c.Message, "What information do you want to add to "+positionsText[*btnData.CardIndex]+" Card?", infoToAddSelector); err != nil {
log.Fatal(err)
}
if err = bot.Respond(c, &tb.CallbackResponse{}); err != nil {
log.Fatal(err)
}
}