/
set.go
81 lines (78 loc) · 2.94 KB
/
set.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
package commands
import (
"fmt"
"strings"
"github.com/NexonSU/telegram-go-chatbot/utils"
tele "gopkg.in/telebot.v3"
"gorm.io/gorm/clause"
)
// Save Get to DB on /set
func Set(context tele.Context) error {
var get utils.Get
var inputGet string
//args check
if (context.Message().ReplyTo == nil && len(context.Args()) < 2) || (context.Message().ReplyTo != nil && len(context.Args()) == 0) {
return utils.ReplyAndRemove("Пример использования: <code>/set {гет} {значение}</code>\nИли отправь в ответ на какое-либо сообщение <code>/set {гет}</code>", context)
}
if context.Message().ReplyTo == nil {
inputGet = context.Args()[1]
} else {
inputGet = context.Data()
}
//ownership check
result := utils.DB.Where(&utils.Get{Name: strings.ToLower(inputGet)}).First(&get)
if result.RowsAffected != 0 {
creator, err := utils.GetUserFromDB(fmt.Sprint(get.Creator))
if err != nil {
return err
}
if get.Creator != context.Sender().ID && !utils.IsAdminOrModer(context.Sender().ID) {
return utils.ReplyAndRemove(fmt.Sprintf("Данный гет могут изменять либо администраторы, либо %v.", utils.UserFullName(&creator)), context)
}
}
//filling Get from message
if context.Message().ReplyTo == nil {
get.Name = strings.ToLower(inputGet)
get.Title = inputGet
get.Type = "Text"
get.Data = utils.GetHtmlText(*context.Message())
} else {
get.Name = strings.ToLower(inputGet)
get.Title = inputGet
get.Caption = utils.GetHtmlText(*context.Message().ReplyTo)
switch {
case context.Message().ReplyTo.Animation != nil:
get.Type = "Animation"
get.Data = context.Message().ReplyTo.Animation.FileID
case context.Message().ReplyTo.Audio != nil:
get.Type = "Audio"
get.Data = context.Message().ReplyTo.Audio.FileID
case context.Message().ReplyTo.Photo != nil:
get.Type = "Photo"
get.Data = context.Message().ReplyTo.Photo.FileID
case context.Message().ReplyTo.Video != nil:
get.Type = "Video"
get.Data = context.Message().ReplyTo.Video.FileID
case context.Message().ReplyTo.Voice != nil:
get.Type = "Voice"
get.Data = context.Message().ReplyTo.Voice.FileID
case context.Message().ReplyTo.Document != nil:
get.Type = "Document"
get.Data = context.Message().ReplyTo.Document.FileID
case context.Message().ReplyTo.Text != "":
get.Type = "Text"
get.Data = utils.GetHtmlText(*context.Message().ReplyTo)
default:
return utils.ReplyAndRemove("Не удалось распознать файл в сообщении, возможно, он не поддерживается.", context)
}
}
get.Creator = context.Sender().ID
//writing get to DB
result = utils.DB.Clauses(clause.OnConflict{
UpdateAll: true,
}).Create(&get)
if result.Error != nil {
return result.Error
}
return utils.ReplyAndRemove(fmt.Sprintf("Гет <code>%v</code> сохранён как <code>%v</code>.", get.Name, get.Type), context)
}