/
create-command.go
109 lines (99 loc) · 2.29 KB
/
create-command.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
107
108
109
package app
import (
"fmt"
"github.com/edkliff/rollbot/internal/generator"
"strings"
)
type CreateResult struct {
set1 []characteristic
set2 []characteristic
sumSet1 int64
sumSet2 int64
reason string
}
type characteristic struct {
sum int64
roll []int64
}
func (app *RollBot) CreateCommand(vk VKReq) (Resulter, error) {
tmpString := vk.Object.Message.Text
reason, err := GetReason(tmpString)
if err != nil {
return nil, err
}
if reason != "" {
tmpString = strings.ReplaceAll(tmpString, reason, "")
}
reason = strings.ReplaceAll(strings.ReplaceAll(reason, "(", ""), ")", "")
set1, err := app.CreateCharacteristics()
if err != nil {
return nil, err
}
set2, err := app.CreateCharacteristics()
if err != nil {
return nil, err
}
c := CreateResult{
set1: set1,
set2: set2,
sumSet1: 0,
sumSet2: 0,
reason: reason,
}
for _, v := range set1 {
c.sumSet1 += v.sum
}
for _, v := range set2 {
c.sumSet2 += v.sum
}
return &c, nil
}
func (app *RollBot) CreateCharacteristics() ([]characteristic, error) {
resultSet := make([]characteristic, 0, 6)
for i := 0; i < 6; i++ {
ok := true
c := characteristic{}
for ok {
res, err := app.Generator.Roll(4, 6)
if err != nil {
return nil, err
}
res = generator.Sort(res)
c.roll = res
c.sum = generator.Sum(res[:3])
if c.sum >= 8 {
ok = false
}
}
resultSet = append(resultSet, c)
}
return resultSet, nil
}
func (h *CreateResult) VKString() string {
s := fmt.Sprintf("Набор 1:\nВсего очков: %d\n", h.sumSet1)
for _, v := range h.set1 {
s += fmt.Sprintf("%d : %v\n", v.sum, v.roll)
}
s += fmt.Sprintf("\nНабор 2:\nВсего очков: %d\n", h.sumSet2)
for _, v := range h.set2 {
s += fmt.Sprintf("%d : %v\n", v.sum, v.roll)
}
if h.reason != "" {
s = fmt.Sprintf("%s\n%s", h.reason, s)
}
return s
}
func (h *CreateResult) Comment() string {
return h.reason
}
func (h *CreateResult) HTML() string {
s := fmt.Sprintf("<div>Набор 1:</div><div>Всего очков: %d</div>", h.sumSet1)
for _, v := range h.set1 {
s += fmt.Sprintf("<div>%d : %v</div>", v.sum, v.roll)
}
s += fmt.Sprintf("<br><div>Набор 2:</div><div>Всего очков: %d</div>", h.sumSet2)
for _, v := range h.set2 {
s += fmt.Sprintf("<div>%d : %v</div>", v.sum, v.roll)
}
return s
}