/
bots.go
executable file
·100 lines (90 loc) · 2.89 KB
/
bots.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
// Copyright (c) 2024 RoseLoverX
package telegram
import "github.com/pkg/errors"
type InlineSendOptions struct {
Gallery bool `json:"gallery,omitempty"`
NextOffset string `json:"next_offset,omitempty"`
CacheTime int32 `json:"cache_time,omitempty"`
Private bool `json:"private,omitempty"`
SwitchPm string `json:"switch_pm,omitempty"`
SwitchPmText string `json:"switch_pm_text,omitempty"`
}
func (c *Client) AnswerInlineQuery(QueryID int64, Results []InputBotInlineResult, Options ...*InlineSendOptions) (bool, error) {
options := getVariadic(Options, &InlineSendOptions{}).(*InlineSendOptions)
options.CacheTime = getValue(options.CacheTime, 60).(int32)
request := &MessagesSetInlineBotResultsParams{
Gallery: options.Gallery,
Private: options.Private,
QueryID: QueryID,
Results: Results,
CacheTime: options.CacheTime,
NextOffset: options.NextOffset,
}
if options.SwitchPm != "" {
request.SwitchPm = &InlineBotSwitchPm{
Text: options.SwitchPm,
StartParam: getValue(options.SwitchPmText, "start").(string),
}
}
resp, err := c.MessagesSetInlineBotResults(request)
if err != nil {
return false, err
}
return resp, nil
}
type CallbackOptions struct {
Alert bool `json:"alert,omitempty"`
CacheTime int32 `json:"cache_time,omitempty"`
URL string `json:"url,omitempty"`
}
func (c *Client) AnswerCallbackQuery(QueryID int64, Text string, Opts ...*CallbackOptions) (bool, error) {
options := getVariadic(Opts, &CallbackOptions{}).(*CallbackOptions)
request := &MessagesSetBotCallbackAnswerParams{
QueryID: QueryID,
Message: Text,
Alert: options.Alert,
}
if options.URL != "" {
request.URL = options.URL
}
if options.CacheTime != 0 {
request.CacheTime = options.CacheTime
}
resp, err := c.MessagesSetBotCallbackAnswer(request)
if err != nil {
return false, err
}
return resp, nil
}
// BOT COMMANDS
func (c *Client) SetBotCommands(commands []*BotCommand, scope *BotCommandScope, languageCode ...string) (bool, error) {
resp, err := c.BotsSetBotCommands(*scope, getVariadic(languageCode, "en").(string), commands)
if err != nil {
return false, err
}
return resp, nil
}
func (c *Client) SetBotDefaultPrivileges(privileges *ChatAdminRights, ForChannels ...bool) (resp bool, err error) {
forCh := getVariadic(ForChannels, true).(bool)
if forCh {
resp, err = c.BotsSetBotBroadcastDefaultAdminRights(privileges)
return
}
resp, err = c.BotsSetBotGroupDefaultAdminRights(privileges)
return
}
func (c *Client) SetChatMenuButton(userID int64, button *BotMenuButton) (bool, error) {
peer, err := c.ResolvePeer(userID)
if err != nil {
return false, err
}
peerUser, ok := peer.(*InputPeerUser)
if !ok {
return false, errors.New("invalid user")
}
resp, err := c.BotsSetBotMenuButton(&InputUserObj{AccessHash: peerUser.AccessHash, UserID: peerUser.UserID}, *button)
if err != nil {
return false, err
}
return resp, nil
}