Skip to content
This repository was archived by the owner on Apr 9, 2020. It is now read-only.

Commit fbadd19

Browse files
author
Maxim Lebedev
committed
Merge branch 'release/1.0'
2 parents a2beab8 + fae282f commit fbadd19

29 files changed

+1385
-1
lines changed

.gitignore

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,9 @@
1515
.glide/
1616

1717
# Golang project vendor packages which should be ignored
18-
vendor/
18+
vendor/
19+
20+
# Production files must not be in public repository
21+
config.yaml
22+
cert.key
23+
cert.pem

.travis.yml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
language: go
2+
3+
go:
4+
- 1.9
5+
- tip
6+
7+
install:
8+
- go get

Makefile

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
# Build package by default with all general tools and things
2+
all:
3+
make localization
4+
make build
5+
6+
# Build minimal package only
7+
build:
8+
go build
9+
10+
# Build debug version with more logs
11+
debug:
12+
go build -tags=debug
13+
14+
# Format the source code
15+
fmt:
16+
go fmt
17+
18+
# Build localization files with separated untranslated strings
19+
translation:
20+
goi18n merge -format yaml -sourceLanguage en-us -outdir ./i18n/ ./i18n/*
21+
22+
# Build localization files and merge untranslated strings
23+
localization:
24+
make translation
25+
goi18n -format yaml -sourceLanguage en-us -outdir ./i18n/ ./i18n/*.all.yaml \
26+
./i18n/*.untranslated.yaml

PATRONS.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
# [Patrons!](https://www.patreon.com/bePatron?c=243288)
2+
**These people have sponsored the current version of the project:**
3+
- **Ivan Kolesnikov**
4+
- Daniil Tlenov
5+
- Aurielb
6+
- Yami Odymel
7+
- MoD21k

add.go

Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
package main
2+
3+
import (
4+
log "github.com/kirillDanshin/dlog" // Insert logs only in debug builds
5+
"github.com/toby3d/go-telegram" // My Telegram bindings
6+
)
7+
8+
func commandAdd(msg *telegram.Message, pack bool) {
9+
bot.SendChatAction(msg.Chat.ID, telegram.ActionTyping)
10+
11+
T, err := switchLocale(msg.From.LanguageCode)
12+
errCheck(err)
13+
14+
reply := telegram.NewMessage(msg.Chat.ID, T("reply_add_sticker"))
15+
reply.ParseMode = telegram.ModeMarkdown
16+
17+
err = dbChangeUserState(msg.From.ID, stateAddSticker)
18+
errCheck(err)
19+
20+
if pack {
21+
reply.Text = T("reply_add_pack")
22+
23+
err = dbChangeUserState(msg.From.ID, stateAddPack)
24+
errCheck(err)
25+
}
26+
27+
log.Ln("Sending add reply...")
28+
_, err = bot.SendMessage(reply)
29+
errCheck(err)
30+
}
31+
32+
func actionAdd(msg *telegram.Message, pack bool) {
33+
bot.SendChatAction(msg.Chat.ID, telegram.ActionTyping)
34+
35+
T, err := switchLocale(msg.From.LanguageCode)
36+
errCheck(err)
37+
38+
reply := telegram.NewMessage(msg.Chat.ID, T("success_add_sticker"))
39+
reply.ParseMode = telegram.ModeMarkdown
40+
41+
switch {
42+
case pack && msg.Sticker.SetName == "":
43+
reply.Text = T("error_empty_add_pack", map[string]interface{}{
44+
"AddStickerCommand": cmdAddSticker,
45+
})
46+
case pack && msg.Sticker.SetName != "":
47+
set, err := bot.GetStickerSet(msg.Sticker.SetName)
48+
errCheck(err)
49+
50+
log.Ln("SetTitle:", set.Title)
51+
reply.Text = T("success_add_pack", map[string]interface{}{
52+
"SetTitle": set.Title,
53+
})
54+
55+
allExists := true
56+
for _, sticker := range set.Stickers {
57+
exists, err := dbAddSticker(msg.From.ID, sticker.FileID, sticker.Emoji)
58+
errCheck(err)
59+
60+
if !exists {
61+
allExists = false
62+
}
63+
}
64+
65+
log.Ln("All exists?", allExists)
66+
67+
if allExists {
68+
reply.Text = T("error_already_add_pack", map[string]interface{}{
69+
"SetTitle": set.Title,
70+
})
71+
} else {
72+
markup := telegram.NewInlineKeyboardMarkup(
73+
telegram.NewInlineKeyboardRow(
74+
telegram.NewInlineKeyboardButtonSwitch(
75+
T("button_share"),
76+
" ",
77+
),
78+
),
79+
)
80+
reply.ReplyMarkup = &markup
81+
}
82+
default:
83+
exists, err := dbAddSticker(msg.From.ID, msg.Sticker.FileID, msg.Sticker.Emoji)
84+
errCheck(err)
85+
86+
if exists {
87+
reply.Text = T("error_already_add_sticker")
88+
}
89+
90+
if msg.Sticker.Emoji == "" {
91+
msg.Sticker.Emoji = " "
92+
}
93+
94+
markup := telegram.NewInlineKeyboardMarkup(
95+
telegram.NewInlineKeyboardRow(
96+
telegram.NewInlineKeyboardButtonSwitch(
97+
T("button_share"),
98+
msg.Sticker.Emoji,
99+
),
100+
),
101+
)
102+
reply.ReplyMarkup = &markup
103+
}
104+
105+
_, err = bot.SendMessage(reply)
106+
errCheck(err)
107+
}

cancel.go

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package main
2+
3+
import "github.com/toby3d/go-telegram" // My Telegram bindings
4+
5+
func commandCancel(msg *telegram.Message) {
6+
bot.SendChatAction(msg.Chat.ID, telegram.ActionTyping)
7+
8+
T, err := switchLocale(msg.From.LanguageCode)
9+
errCheck(err)
10+
11+
state, err := dbGetUserState(msg.From.ID)
12+
errCheck(err)
13+
14+
var text string
15+
switch state {
16+
case stateAddSticker:
17+
text = T("cancel_add_sticker")
18+
case stateAddPack:
19+
text = T("cancel_add_pack")
20+
case stateDelete:
21+
text = T("cancel_del")
22+
case stateReset:
23+
text = T("cancel_reset")
24+
default:
25+
text = T("cancel_error")
26+
}
27+
28+
err = dbChangeUserState(msg.From.ID, stateNone)
29+
errCheck(err)
30+
31+
reply := telegram.NewMessage(msg.Chat.ID, text)
32+
_, err = bot.SendMessage(reply)
33+
errCheck(err)
34+
}

commands.go

Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
package main
2+
3+
import (
4+
"strings"
5+
6+
log "github.com/kirillDanshin/dlog" // Insert logs only in debug builds
7+
"github.com/toby3d/botan"
8+
"github.com/toby3d/go-telegram" // My Telegram bindings
9+
)
10+
11+
const (
12+
cmdAddPack = "addPack"
13+
cmdAddSticker = "addSticker"
14+
cmdCancel = "cancel"
15+
cmdHelp = "help"
16+
cmdDelete = "del"
17+
cmdReset = "reset"
18+
cmdStart = "start"
19+
)
20+
21+
func commands(msg *telegram.Message) {
22+
log.Ln("Received a", msg.Command(), "command")
23+
switch strings.ToLower(msg.Command()) {
24+
case strings.ToLower(cmdStart):
25+
appMetrika.TrackAsync(
26+
"Start", msg.From.ID, *msg,
27+
func(answer *botan.Answer, err error) {
28+
log.Ln("Asynchonous:", answer.Status)
29+
metrika <- true
30+
},
31+
)
32+
33+
commandStart(msg)
34+
35+
<-metrika
36+
case strings.ToLower(cmdHelp):
37+
appMetrika.TrackAsync(
38+
"Help", msg.From.ID, *msg,
39+
func(answer *botan.Answer, err error) {
40+
log.Ln("Asynchonous:", answer.Status)
41+
metrika <- true
42+
},
43+
)
44+
45+
commandHelp(msg)
46+
47+
<-metrika
48+
case strings.ToLower(cmdAddSticker):
49+
appMetrika.TrackAsync(
50+
"Add single sticker", msg.From.ID, *msg,
51+
func(answer *botan.Answer, err error) {
52+
log.Ln("Asynchonous:", answer.Status)
53+
metrika <- true
54+
},
55+
)
56+
57+
commandAdd(msg, false)
58+
59+
<-metrika
60+
case strings.ToLower(cmdAddPack):
61+
appMetrika.TrackAsync(
62+
"Add pack", msg.From.ID, *msg,
63+
func(answer *botan.Answer, err error) {
64+
log.Ln("Asynchonous:", answer.Status)
65+
metrika <- true
66+
},
67+
)
68+
69+
commandAdd(msg, true)
70+
71+
<-metrika
72+
case strings.ToLower(cmdDelete):
73+
appMetrika.TrackAsync(
74+
"Delete single sticker", msg.From.ID, *msg,
75+
func(answer *botan.Answer, err error) {
76+
log.Ln("Asynchonous:", answer.Status)
77+
metrika <- true
78+
},
79+
)
80+
81+
commandDelete(msg)
82+
83+
<-metrika
84+
case strings.ToLower(cmdReset):
85+
appMetrika.TrackAsync(
86+
"Reset", msg.From.ID, *msg,
87+
func(answer *botan.Answer, err error) {
88+
log.Ln("Asynchonous:", answer.Status)
89+
metrika <- true
90+
},
91+
)
92+
93+
commandReset(msg)
94+
95+
<-metrika
96+
case strings.ToLower(cmdCancel):
97+
appMetrika.TrackAsync(
98+
"Cancel", msg.From.ID, *msg,
99+
func(answer *botan.Answer, err error) {
100+
log.Ln("Asynchonous:", answer.Status)
101+
metrika <- true
102+
},
103+
)
104+
105+
commandCancel(msg)
106+
107+
<-metrika
108+
default:
109+
appMetrika.Track("Command", msg.From.ID, *msg)
110+
}
111+
}

config.example.yaml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
telegram:
2+
token: 123456789:ABCd1efGhjKLM23O4pqR5stuvwx678yz90
3+
webhook:
4+
set: https://www.google.com
5+
listen: /bot
6+
serve: 0.0.0.0:2368
7+
8+
botan: 12345a67-8b9c-01d2-e345-67fg8901hj23

0 commit comments

Comments
 (0)