Skip to content

Commit 5ce2767

Browse files
committed
Updates for Bot API 4.4 and 4.5.
1 parent ffe77fb commit 5ce2767

File tree

6 files changed

+266
-91
lines changed

6 files changed

+266
-91
lines changed

configs.go

+66-27
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,9 @@ const (
3434

3535
// Constant values for ParseMode in MessageConfig
3636
const (
37-
ModeMarkdown = "Markdown"
38-
ModeHTML = "HTML"
37+
ModeMarkdown = "Markdown"
38+
ModeMarkdownV2 = "MarkdownV2"
39+
ModeHTML = "HTML"
3940
)
4041

4142
// Library errors
@@ -939,11 +940,8 @@ func (config KickChatMemberConfig) params() (Params, error) {
939940
// RestrictChatMemberConfig contains fields to restrict members of chat
940941
type RestrictChatMemberConfig struct {
941942
ChatMemberConfig
942-
UntilDate int64
943-
CanSendMessages *bool
944-
CanSendMediaMessages *bool
945-
CanSendOtherMessages *bool
946-
CanAddWebPagePreviews *bool
943+
UntilDate int64
944+
Permissions *ChatPermissions
947945
}
948946

949947
func (config RestrictChatMemberConfig) method() string {
@@ -956,10 +954,9 @@ func (config RestrictChatMemberConfig) params() (Params, error) {
956954
params.AddFirstValid("chat_id", config.ChatID, config.SuperGroupUsername, config.ChannelUsername)
957955
params.AddNonZero("user_id", config.UserID)
958956

959-
params.AddNonNilBool("can_send_messages", config.CanSendMessages)
960-
params.AddNonNilBool("can_send_media_messages", config.CanSendMediaMessages)
961-
params.AddNonNilBool("can_send_other_messages", config.CanSendOtherMessages)
962-
params.AddNonNilBool("can_add_web_page_previews", config.CanAddWebPagePreviews)
957+
if err := params.AddInterface("permissions", config.Permissions); err != nil {
958+
return params, err
959+
}
963960
params.AddNonZero64("until_date", config.UntilDate)
964961

965962
return params, nil
@@ -968,14 +965,14 @@ func (config RestrictChatMemberConfig) params() (Params, error) {
968965
// PromoteChatMemberConfig contains fields to promote members of chat
969966
type PromoteChatMemberConfig struct {
970967
ChatMemberConfig
971-
CanChangeInfo *bool
972-
CanPostMessages *bool
973-
CanEditMessages *bool
974-
CanDeleteMessages *bool
975-
CanInviteUsers *bool
976-
CanRestrictMembers *bool
977-
CanPinMessages *bool
978-
CanPromoteMembers *bool
968+
CanChangeInfo bool
969+
CanPostMessages bool
970+
CanEditMessages bool
971+
CanDeleteMessages bool
972+
CanInviteUsers bool
973+
CanRestrictMembers bool
974+
CanPinMessages bool
975+
CanPromoteMembers bool
979976
}
980977

981978
func (config PromoteChatMemberConfig) method() string {
@@ -988,14 +985,35 @@ func (config PromoteChatMemberConfig) params() (Params, error) {
988985
params.AddFirstValid("chat_id", config.ChatID, config.SuperGroupUsername, config.ChannelUsername)
989986
params.AddNonZero("user_id", config.UserID)
990987

991-
params.AddNonNilBool("can_change_info", config.CanChangeInfo)
992-
params.AddNonNilBool("can_post_messages", config.CanPostMessages)
993-
params.AddNonNilBool("can_edit_messages", config.CanEditMessages)
994-
params.AddNonNilBool("can_delete_messages", config.CanDeleteMessages)
995-
params.AddNonNilBool("can_invite_users", config.CanInviteUsers)
996-
params.AddNonNilBool("can_restrict_members", config.CanRestrictMembers)
997-
params.AddNonNilBool("can_pin_messages", config.CanPinMessages)
998-
params.AddNonNilBool("can_promote_members", config.CanPromoteMembers)
988+
params.AddBool("can_change_info", config.CanChangeInfo)
989+
params.AddBool("can_post_messages", config.CanPostMessages)
990+
params.AddBool("can_edit_messages", config.CanEditMessages)
991+
params.AddBool("can_delete_messages", config.CanDeleteMessages)
992+
params.AddBool("can_invite_users", config.CanInviteUsers)
993+
params.AddBool("can_restrict_members", config.CanRestrictMembers)
994+
params.AddBool("can_pin_messages", config.CanPinMessages)
995+
params.AddBool("can_promote_members", config.CanPromoteMembers)
996+
997+
return params, nil
998+
}
999+
1000+
// SetChatAdministratorCustomTitle sets the title of an administrative user
1001+
// promoted by the bot for a chat.
1002+
type SetChatAdministratorCustomTitle struct {
1003+
ChatMemberConfig
1004+
CustomTitle string
1005+
}
1006+
1007+
func (SetChatAdministratorCustomTitle) method() string {
1008+
return "setChatAdministratorCustomTitle"
1009+
}
1010+
1011+
func (config SetChatAdministratorCustomTitle) params() (Params, error) {
1012+
params := make(Params)
1013+
1014+
params.AddFirstValid("chat_id", config.ChatID, config.SuperGroupUsername, config.ChannelUsername)
1015+
params.AddNonZero("user_id", config.UserID)
1016+
params.AddNonEmpty("custom_title", config.CustomTitle)
9991017

10001018
return params, nil
10011019
}
@@ -1041,6 +1059,27 @@ func (ChatAdministratorsConfig) method() string {
10411059
return "getChatAdministrators"
10421060
}
10431061

1062+
// SetChatPermissionsConfig allows you to set default permissions for the
1063+
// members in a group. The bot must be an administrator and have rights to
1064+
// restrict members.
1065+
type SetChatPermissionsConfig struct {
1066+
ChatConfig
1067+
Permissions *ChatPermissions
1068+
}
1069+
1070+
func (SetChatPermissionsConfig) method() string {
1071+
return "setChatPermissions"
1072+
}
1073+
1074+
func (config SetChatPermissionsConfig) params() (Params, error) {
1075+
params := make(Params)
1076+
1077+
params.AddFirstValid("chat_id", config.ChatID, config.SuperGroupUsername)
1078+
params.AddInterface("permissions", config.Permissions)
1079+
1080+
return params, nil
1081+
}
1082+
10441083
// ChatInviteLinkConfig contains information about getting a chat link.
10451084
//
10461085
// Note that generating a new link will revoke any previous links.

params.go

+4-7
Original file line numberDiff line numberDiff line change
@@ -37,13 +37,6 @@ func (p Params) AddBool(key string, value bool) {
3737
}
3838
}
3939

40-
// AddNonNilBool adds the value of a bool pointer if not nil.
41-
func (p Params) AddNonNilBool(key string, value *bool) {
42-
if value != nil {
43-
p[key] = strconv.FormatBool(*value)
44-
}
45-
}
46-
4740
// AddNonZeroFloat adds a floating point value that is not zero.
4841
func (p Params) AddNonZeroFloat(key string, value float64) {
4942
if value != 0 {
@@ -76,14 +69,17 @@ func (p Params) AddFirstValid(key string, args ...interface{}) error {
7669
case int:
7770
if v != 0 {
7871
p[key] = strconv.Itoa(v)
72+
return nil
7973
}
8074
case int64:
8175
if v != 0 {
8276
p[key] = strconv.FormatInt(v, 10)
77+
return nil
8378
}
8479
case string:
8580
if v != "" {
8681
p[key] = v
82+
return nil
8783
}
8884
case nil:
8985
default:
@@ -93,6 +89,7 @@ func (p Params) AddFirstValid(key string, args ...interface{}) error {
9389
}
9490

9591
p[key] = string(b)
92+
return nil
9693
}
9794
}
9895

params_test.go

+93
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
package tgbotapi
2+
3+
import (
4+
"testing"
5+
)
6+
7+
func assertLen(t *testing.T, params Params, l int) {
8+
actual := len(params)
9+
if actual != l {
10+
t.Fatalf("Incorrect number of params, expected %d but found %d\n", l, actual)
11+
}
12+
}
13+
14+
func assertEq(t *testing.T, a interface{}, b interface{}) {
15+
if a != b {
16+
t.Fatalf("Values did not match, a: %v, b: %v\n", a, b)
17+
}
18+
}
19+
20+
func TestAddNonEmpty(t *testing.T) {
21+
params := make(Params)
22+
params.AddNonEmpty("value", "value")
23+
assertLen(t, params, 1)
24+
assertEq(t, params["value"], "value")
25+
params.AddNonEmpty("test", "")
26+
assertLen(t, params, 1)
27+
assertEq(t, params["test"], "")
28+
}
29+
30+
func TestAddNonZero(t *testing.T) {
31+
params := make(Params)
32+
params.AddNonZero("value", 1)
33+
assertLen(t, params, 1)
34+
assertEq(t, params["value"], "1")
35+
params.AddNonZero("test", 0)
36+
assertLen(t, params, 1)
37+
assertEq(t, params["test"], "")
38+
}
39+
40+
func TestAddNonZero64(t *testing.T) {
41+
params := make(Params)
42+
params.AddNonZero64("value", 1)
43+
assertLen(t, params, 1)
44+
assertEq(t, params["value"], "1")
45+
params.AddNonZero64("test", 0)
46+
assertLen(t, params, 1)
47+
assertEq(t, params["test"], "")
48+
}
49+
50+
func TestAddBool(t *testing.T) {
51+
params := make(Params)
52+
params.AddBool("value", true)
53+
assertLen(t, params, 1)
54+
assertEq(t, params["value"], "true")
55+
params.AddBool("test", false)
56+
assertLen(t, params, 1)
57+
assertEq(t, params["test"], "")
58+
}
59+
60+
func TestAddNonZeroFloat(t *testing.T) {
61+
params := make(Params)
62+
params.AddNonZeroFloat("value", 1)
63+
assertLen(t, params, 1)
64+
assertEq(t, params["value"], "1.000000")
65+
params.AddNonZeroFloat("test", 0)
66+
assertLen(t, params, 1)
67+
assertEq(t, params["test"], "")
68+
}
69+
70+
func TestAddInterface(t *testing.T) {
71+
params := make(Params)
72+
data := struct {
73+
Name string `json:"name"`
74+
}{
75+
Name: "test",
76+
}
77+
params.AddInterface("value", data)
78+
assertLen(t, params, 1)
79+
assertEq(t, params["value"], `{"name":"test"}`)
80+
params.AddInterface("test", nil)
81+
assertLen(t, params, 1)
82+
assertEq(t, params["test"], "")
83+
}
84+
85+
func TestAddFirstValid(t *testing.T) {
86+
params := make(Params)
87+
params.AddFirstValid("value", 0, "", "test")
88+
assertLen(t, params, 1)
89+
assertEq(t, params["value"], "test")
90+
params.AddFirstValid("value2", 3, "test")
91+
assertLen(t, params, 2)
92+
assertEq(t, params["value2"], "3")
93+
}

passport.go

+2
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,8 @@ type (
6161
// Unique identifier for this file
6262
FileID string `json:"file_id"`
6363

64+
FileUniqueID string `json:"file_unique_id"`
65+
6466
// File size
6567
FileSize int `json:"file_size"`
6668

0 commit comments

Comments
 (0)