aboutsummaryrefslogblamecommitdiff
path: root/models.go
blob: 6c506516d8fd0c903f0865806f57ff7a2b5c0b56 (plain) (tree)
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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789




















































































































































































































































































































































































































































































































































































































































































































































































































                                                                                                                                                                  
/*
 * TamTam Bot API
 *
 * Bot API allows bots to interact with TamTam
 *
 * API version: 0.1.3
 * Generated by: OpenAPI Generator (https://openapi-generator.tech)
 */
package tamtam

type ActionRequestBody struct {
	Action SenderAction `json:"action"`
}

type AttachmentType string

const (
	AttachmentImage    AttachmentType = "image"
	AttachmentVideo                   = "video"
	AttachmentAudio                   = "audio"
	AttachmentFile                    = "file"
	AttachmentContact                 = "contact"
	AttachmentSticker                 = "sticker"
	AttachmentShare                   = "share"
	AttachmentLocation                = "location"
	AttachmentKeyboard                = "inline_keyboard"
)

// Generic schema representing message attachment
type Attachment struct {
	Type AttachmentType `json:"type,omitempty"`
}

type AttachmentPayload struct {
	// Media attachment URL
	Url string `json:"url"`
}

// Request to attach some data to message
type AttachmentRequest struct {
	Type string `json:"type,omitempty"`
}

type AudioAttachment struct {
	Type    string            `json:"type,omitempty"`
	Payload AttachmentPayload `json:"payload"`
}

// Request to attach audio to message. MUST be the only attachment in message
type AudioAttachmentRequest struct {
	Type    string       `json:"type,omitempty"`
	Payload UploadedInfo `json:"payload"`
}

// You will receive this update when bot has been added to chat
type BotAddedToChatUpdate struct {
	UpdateType string `json:"update_type,omitempty"`
	// Unix-time when event has occured
	Timestamp int64 `json:"timestamp"`
	// Chat id where bot was added
	ChatId int64 `json:"chat_id"`
	// User id who added bot to chat
	UserId int64 `json:"user_id"`
}

// You will receive this update when bot has been removed from chat
type BotRemovedFromChatUpdate struct {
	UpdateType string `json:"update_type,omitempty"`
	// Unix-time when event has occured
	Timestamp int64 `json:"timestamp"`
	// Chat identifier bot removed from
	ChatId int64 `json:"chat_id"`
	// User id who removed bot from chat
	UserId int64 `json:"user_id"`
}

// Bot gets this type of update as soon as user pressed `Start` button
type BotStartedUpdate struct {
	UpdateType string `json:"update_type,omitempty"`
	// Unix-time when event has occured
	Timestamp int64 `json:"timestamp"`
	// Dialog identifier where event has occurred
	ChatId int64 `json:"chat_id"`
	// User pressed the 'Start' button
	UserId int64 `json:"user_id"`
}

type Button struct {
	Type string `json:"type,omitempty"`
	// Visible text of button
	Text string `json:"text"`
	// Intent of button. Affects clients representation.
	Intent Intent `json:"intent"`
}

// Object sent to bot when user presses button
type Callback struct {
	// Unix-time when user pressed the button
	Timestamp int64 `json:"timestamp"`
	// Current keyboard identifier
	CallbackId string `json:"callback_id"`
	// Button payload
	Payload string `json:"payload"`
	// User pressed the button
	User User `json:"user"`
}

// Send this object when your bot wants to react to when a button is pressed
type CallbackAnswer struct {
	UserId int64 `json:"user_id,omitempty"`
	// Fill this if you want to modify current message
	Message NewMessageBody `json:"message,omitempty"`
	// Fill this if you just want to send one-time notification to user
	Notification string `json:"notification,omitempty"`
}

// After pressing this type of button client sends to server payload it contains
type CallbackButton struct {
	Type string `json:"type,omitempty"`
	// Visible text of button
	Text string `json:"text"`
	// Intent of button. Affects clients representation.
	Intent Intent `json:"intent"`
	// Button payload
	Payload string `json:"payload"`
}

type Chat struct {
	// Chats identifier
	ChatId int64 `json:"chat_id"`
	// Type of chat. One of: dialog, chat, channel
	Type ChatType `json:"type"`
	// Chat status. One of:  - active: bot is active member of chat  - removed: bot was kicked  - left: bot intentionally left chat  - closed: chat was closed
	Status ChatStatus `json:"status"`
	// Visible title of chat
	Title string `json:"title"`
	// Icon of chat
	Icon Image `json:"icon"`
	// Time of last event occured in chat
	LastEventTime int64 `json:"last_event_time"`
	// Number of people in chat. Always 2 for `dialog` chat type
	ParticipantsCount int32 `json:"participants_count"`
	// Identifier of chat owner. Visible only for chat admins
	OwnerId int64 `json:"owner_id,omitempty"`
	// Participants in chat with time of last activity. Can be *null* when you request list of chats. Visible for chat admins only
	Participants map[string]int64 `json:"participants,omitempty"`
	// Is current chat publicly available. Always `false` for dialogs
	IsPublic bool `json:"is_public"`
	// Link on chat if it is public
	Link string `json:"link,omitempty"`
	// Chat description
	Description map[string]interface{} `json:"description"`
}

// ChatAdminPermission : Chat admin permissions
type ChatAdminPermission string

// List of ChatAdminPermission
const (
	READ_ALL_MESSAGES  ChatAdminPermission = "read_all_messages"
	ADD_REMOVE_MEMBERS ChatAdminPermission = "add_remove_members"
	ADD_ADMINS         ChatAdminPermission = "add_admins"
	CHANGE_CHAT_INFO   ChatAdminPermission = "change_chat_info"
	PIN_MESSAGE        ChatAdminPermission = "pin_message"
	WRITE              ChatAdminPermission = "write"
)

type ChatList struct {
	// List of requested chats
	Chats []Chat `json:"chats"`
	// Reference to the next page of requested chats
	Marker int64 `json:"marker"`
}

type ChatMember struct {
	// Users identifier
	UserId int64 `json:"user_id"`
	// Users visible name
	Name string `json:"name"`
	// Unique public user name. Can be `null` if user is not accessible or it is not set
	Username string `json:"username"`
	// URL of avatar
	AvatarUrl string `json:"avatar_url"`
	// URL of avatar of a bigger size
	FullAvatarUrl  string `json:"full_avatar_url"`
	LastAccessTime int64  `json:"last_access_time"`
	IsOwner        bool   `json:"is_owner"`
	IsAdmin        bool   `json:"is_admin"`
	JoinTime       int64  `json:"join_time"`
	// Permissions in chat if member is admin. `null` otherwise
	Permissions []ChatAdminPermission `json:"permissions"`
}

type ChatMembersList struct {
	// Participants in chat with time of last activity. Visible only for chat admins
	Members []ChatMember `json:"members"`
	// Pointer to the next data page
	Marker int64 `json:"marker"`
}

type ChatPatch struct {
	Icon  PhotoAttachmentRequestPayload `json:"icon,omitempty"`
	Title string                        `json:"title,omitempty"`
}

// ChatStatus : Chat status for current bot
type ChatStatus string

// List of ChatStatus
const (
	ACTIVE    ChatStatus = "active"
	REMOVED   ChatStatus = "removed"
	LEFT      ChatStatus = "left"
	CLOSED    ChatStatus = "closed"
	SUSPENDED ChatStatus = "suspended"
)

// Bot gets this type of update as soon as title has been changed in chat
type ChatTitleChangedUpdate struct {
	UpdateType string `json:"update_type,omitempty"`
	// Unix-time when event has occured
	Timestamp int64 `json:"timestamp"`
	// Chat identifier where event has occurred
	ChatId int64 `json:"chat_id"`
	// User who changed title
	UserId int64 `json:"user_id"`
	// New title
	Title string `json:"title"`
}

// ChatType : Type of chat. Dialog (one-on-one), chat or channel
type ChatType string

// List of ChatType
const (
	DIALOG  ChatType = "dialog"
	CHAT    ChatType = "chat"
	CHANNEL ChatType = "channel"
)

type ContactAttachment struct {
	Type    string                   `json:"type,omitempty"`
	Payload ContactAttachmentPayload `json:"payload"`
}

type ContactAttachmentPayload struct {
	// User info in VCF format
	VcfInfo string `json:"vcfInfo"`
	// User info
	TamInfo User `json:"tamInfo"`
}

// Request to attach contact card to message. MUST be the only attachment in message
type ContactAttachmentRequest struct {
	Type    string                          `json:"type,omitempty"`
	Payload ContactAttachmentRequestPayload `json:"payload"`
}

type ContactAttachmentRequestPayload struct {
	// Contact name
	Name string `json:"name"`
	// Contact identifier
	ContactId int64 `json:"contactId"`
	// Full information about contact in VCF format
	VcfInfo string `json:"vcfInfo"`
	// Contact phone in VCF format
	VcfPhone string `json:"vcfPhone"`
}

// Server returns this if there was an exception to your request
type Error struct {
	// Error
	Error string `json:"error,omitempty"`
	// Error code
	Code string `json:"code"`
	// Human-readable description
	Message string `json:"message"`
}

type FileAttachment struct {
	Type    string            `json:"type,omitempty"`
	Payload AttachmentPayload `json:"payload"`
}

// Request to attach file to message. MUST be the only attachment in message
type FileAttachmentRequest struct {
	Type    string           `json:"type,omitempty"`
	Payload UploadedFileInfo `json:"payload"`
}

// List of all WebHook subscriptions
type GetSubscriptionsResult struct {
	// Current suscriptions
	Subscriptions []Subscription `json:"subscriptions"`
}

// Generic schema describing image object
type Image struct {
	// URL of image
	Url string `json:"url"`
}

// Buttons in messages
type InlineKeyboardAttachment struct {
	Type string `json:"type,omitempty"`
	// Unique identifier of keyboard
	CallbackId string   `json:"callback_id"`
	Payload    Keyboard `json:"payload"`
}

// Request to attach keyboard to message
type InlineKeyboardAttachmentRequest struct {
	Type    string                                 `json:"type,omitempty"`
	Payload InlineKeyboardAttachmentRequestPayload `json:"payload"`
}

type InlineKeyboardAttachmentRequestPayload struct {
	// Two-dimensional array of buttons
	Buttons [][]Button `json:"buttons"`
}

// Intent : Intent of button
type Intent string

// List of Intent
const (
	POSITIVE Intent = "positive"
	NEGATIVE Intent = "negative"
	DEFAULT  Intent = "default"
)

// Keyboard is two-dimension array of buttons
type Keyboard struct {
	Buttons [][]Button `json:"buttons"`
}

// After pressing this type of button user follows the link it contains
type LinkButton struct {
	Type string `json:"type,omitempty"`
	// Visible text of button
	Text string `json:"text"`
	// Intent of button. Affects clients representation.
	Intent Intent `json:"intent"`
	Url    string `json:"url"`
}

type LinkedMessage struct {
	// Type of linked message
	Type MessageLinkType `json:"type"`
	// User sent this message
	Sender User `json:"sender"`
	// Chat where message was originally posted
	ChatId  int64       `json:"chat_id"`
	Message MessageBody `json:"message"`
}

type LocationAttachment struct {
	Type      string  `json:"type,omitempty"`
	Latitude  float64 `json:"latitude"`
	Longitude float64 `json:"longitude"`
}

// Request to attach keyboard to message
type LocationAttachmentRequest struct {
	Type      string  `json:"type,omitempty"`
	Latitude  float64 `json:"latitude"`
	Longitude float64 `json:"longitude"`
}

// Message in chat
type Message struct {
	// User that sent this message
	Sender User `json:"sender"`
	// Message recipient. Could be user or chat
	Recipient Recipient `json:"recipient"`
	// Unix-time when message was created
	Timestamp int64 `json:"timestamp"`
	// Forwarder or replied message
	Link LinkedMessage `json:"link,omitempty"`
	// Body of created message. Text + attachments. Could be null if message contains only forwarded message.
	Body MessageBody `json:"message"`
}

// Schema representing body of message
type MessageBody struct {
	// Unique identifier of message
	Mid string `json:"mid"`
	// Sequence identifier of message in chat
	Seq int64 `json:"seq"`
	// Message text
	Text string `json:"text"`
	// Message attachments. Could be one of `Attachment` type. See description of this schema
	Attachments []Attachment `json:"attachments"`
	// In case this message is repled to, it is the unique identifier of the replied message
	ReplyTo string `json:"reply_to,omitempty"`
}

// You will get this `update` as soon as user presses button
type MessageCallbackUpdate struct {
	UpdateType string `json:"update_type,omitempty"`
	// Unix-time when event has occured
	Timestamp int64    `json:"timestamp"`
	Callback  Callback `json:"callback"`
	// Original message containing inline keyboard. Can be `null` in case it had been deleted by the moment a bot got this update.
	Message Message `json:"message"`
}

// You will get this `update` as soon as message is created
type MessageCreatedUpdate struct {
	UpdateType string `json:"update_type,omitempty"`
	// Unix-time when event has occured
	Timestamp int64 `json:"timestamp"`
	// Newly created message
	Message Message `json:"message"`
}

// You will get this `update` as soon as message is edited
type MessageEditedUpdate struct {
	UpdateType string `json:"update_type,omitempty"`
	// Unix-time when event has occured
	Timestamp int64 `json:"timestamp"`
	// Edited message
	Message Message `json:"message"`
}

// MessageLinkType : Type of linked message
type MessageLinkType string

// List of MessageLinkType
const (
	FORWARD MessageLinkType = "forward"
	REPLY   MessageLinkType = "reply"
)

// Paginated list of messages
type MessageList struct {
	// List of messages
	Messages []Message `json:"messages"`
}

// You will get this `update` as soon as message is removed
type MessageRemovedUpdate struct {
	UpdateType string `json:"update_type,omitempty"`
	// Unix-time when event has occured
	Timestamp int64 `json:"timestamp"`
	// Identifier of removed message
	MessageId string `json:"message_id"`
}

// You will get this `update` as soon as message is restored
type MessageRestoredUpdate struct {
	UpdateType string `json:"update_type,omitempty"`
	// Unix-time when event has occured
	Timestamp int64 `json:"timestamp"`
	// Restored message identifier
	MessageId string `json:"message_id"`
}

type NewMessageBody struct {
	// Message text
	Text string `json:"text"`
	// Single message attachment.
	Attachment interface{} `json:"attachment,omitempty"`
	// Message attachments. See `AttachmentRequest` and it's inheritors for full information.
	Attachments []interface{} `json:"attachments,omitempty"`
	// If false, chat participants wouldn't be notified
	Notify bool `json:"notify,omitempty"`
}

// Image attachment
type PhotoAttachment struct {
	Type    string                 `json:"type,omitempty"`
	Payload PhotoAttachmentPayload `json:"payload"`
}

type PhotoAttachmentPayload struct {
	// Unique identifier of this image
	PhotoId int64  `json:"photo_id"`
	Token   string `json:"token"`
	// Image URL
	Url string `json:"url"`
}

type PhotoAttachmentRequest struct {
	Type    string                        `json:"type,omitempty"`
	Payload PhotoAttachmentRequestPayload `json:"payload"`
}

// Request to attach image. All fields are mutually exclusive.
type PhotoAttachmentRequestPayload struct {
	// If specified, given URL will be attached to message as image
	Url string `json:"url,omitempty"`
	// Token of any existing attachment
	Token string `json:"token,omitempty"`
	// Tokens were obtained after uploading images
	Photos map[string]PhotoToken `json:"photos,omitempty"`
}

type PhotoToken struct {
	// Encoded information of uploaded image
	Token string `json:"token"`
}

// This is information you will recieve as soon as an image uploaded
type PhotoTokens struct {
	Photos map[string]PhotoToken `json:"photos"`
}

// New message recepient. Could be user or chat
type Recipient struct {
	// Chat identifier
	ChatId int64 `json:"chat_id"`
	// Chat type
	ChatType ChatType `json:"chat_type"`
	// User identifier, if message was sent to user
	UserId int64 `json:"user_id"`
}

// After pressing this type of button client sends new message with attachment of curent user contact
type RequestContactButton struct {
	Type string `json:"type,omitempty"`
	// Visible text of button
	Text string `json:"text"`
	// Intent of button. Affects clients representation.
	Intent Intent `json:"intent"`
}

// After pressing this type of button client sends new message with attachment of current user geo location
type RequestGeoLocationButton struct {
	Type string `json:"type,omitempty"`
	// Visible text of button
	Text string `json:"text"`
	// Intent of button. Affects clients representation.
	Intent Intent `json:"intent"`
	// If *true*, sends location without asking user's confirmation
	Quick bool `json:"quick,omitempty"`
}

type SendMessageResult struct {
	Message Message `json:"message"`
}

// SenderAction : Different actions to send to chat members
type SenderAction string

// List of SenderAction
const (
	TYPING_ON     SenderAction = "typing_on"
	TYPING_OFF    SenderAction = "typing_off"
	SENDING_PHOTO SenderAction = "sending_photo"
	SENDING_VIDEO SenderAction = "sending_video"
	SENDING_AUDIO SenderAction = "sending_audio"
	MARK_SEEN     SenderAction = "mark_seen"
)

type ShareAttachment struct {
	Type    string            `json:"type,omitempty"`
	Payload AttachmentPayload `json:"payload"`
}

// Simple response to request
type SimpleQueryResult struct {
	// `true` if request was successful. `false` otherwise
	Success bool `json:"success"`
}

type StickerAttachment struct {
	Type    string            `json:"type,omitempty"`
	Payload AttachmentPayload `json:"payload"`
}

// Request to attach sticker. MUST be the only attachment request in message
type StickerAttachmentRequest struct {
	Type    string                          `json:"type,omitempty"`
	Payload StickerAttachmentRequestPayload `json:"payload"`
}

type StickerAttachmentRequestPayload struct {
	// Sticker code
	Code string `json:"code"`
}

// Schema to describe WebHook subscription
type Subscription struct {
	// WebHook URL
	Url string `json:"url"`
	// Unix-time when subscription was created
	Time int64 `json:"time"`
	// Update types bot subscribed for
	UpdateTypes []string `json:"update_types"`
	Version     string   `json:"version"`
}

// Request to set up WebHook subscription
type SubscriptionRequestBody struct {
	// URL of HTTP(S)-endpoint of your bot
	Url string `json:"url"`
	// List of update types your bot want to receive. See `Update` object for a complete list of types
	UpdateTypes []string `json:"update_types,omitempty"`
	// Version of API. Affects model representation
	Version string `json:"version,omitempty"`
}

type UpdateType string

const (
	UpdateTypeMessageCallback  UpdateType = "message_callback"
	UpdateTypeMessageCreated              = "message_created"
	UpdateTypeMessageRemoved              = "message_removed"
	UpdateTypeMessageEdited               = "message_edited"
	UpdateTypeMessageRestored             = "message_restored"
	UpdateTypeBotAdded                    = "bot_added"
	UpdateTypeBotRemoved                  = "bot_removed"
	UpdateTypeUserAdded                   = "user_added"
	UpdateTypeUserRemoved                 = "user_removed"
	UpdateTypeBotStarted                  = "bot_started"
	UpdateTypeChatTitleChanged            = "chat_title_changed"
)

// `Update` object repsesents different types of events that happened in chat. See its inheritors
type Update struct {
	UpdateType UpdateType `json:"update_type,omitempty"`
	// Unix-time when event has occured
	Timestamp int64 `json:"timestamp"`
}

type UpdateMessageCallback struct {
	Update
	Callback Callback `json:"callback"`
	Message  Message  `json:"message"`
}

type UpdateMessageCreated struct {
	Update
	Message Message `json:"message"`
}

type UpdateMessageEdited struct {
	Update
	Message Message `json:"message"`
}

type UpdateMessageRestored struct {
	Update
	MessageID string `json:"message_id"`
}

type UpdateMessageRemoved struct {
	Update
	MessageID string `json:"message_id"`
}

type UpdateBotAdded struct {
	Update
	ChatID int64 `json:"chat_id"`
	UserID int64 `json:"user_id"`
}

type UpdateBotRemoved struct {
	Update
	ChatID int64 `json:"chat_id"`
	UserID int64 `json:"user_id"`
}

type UpdateBotStarted struct {
	Update
	ChatID int64 `json:"chat_id"`
	UserID int64 `json:"user_id"`
}

type UpdateChatTitleChanged struct {
	Update
	ChatID int64  `json:"chat_id"`
	UserID int64  `json:"user_id"`
	Title  string `json:"title"`
}

type UpdateUserAdded struct {
	Update
	ChatID    int64 `json:"chat_id"`
	UserID    int64 `json:"user_id"`
	InviterID int64 `json:"inviter_id"`
}

type UpdateUserRemoved struct {
	Update
	ChatID  int64 `json:"chat_id"`
	UserID  int64 `json:"user_id"`
	AdminID int64 `json:"admin_id"`
}

// List of all updates in chats your bot participated in
type UpdateList struct {
	// Page of updates
	Updates []Update `json:"updates"`
	// Pointer to the next data page
	Marker int64 `json:"marker"`
}

// Endpoint you should upload to your binaries
type UploadEndpoint struct {
	// URL to upload
	Url string `json:"url"`
}

// UploadType : Type of file uploading
type UploadType string

// List of UploadType
const (
	PHOTO UploadType = "photo"
	VIDEO UploadType = "video"
	AUDIO UploadType = "audio"
	FILE  UploadType = "file"
)

// This is information you will recieve as soon as a file is uploaded
type UploadedFileInfo struct {
	// Unique file identifier
	FileId int64 `json:"fileId"`
}

// This is information you will recieve as soon as audio/video is uploaded
type UploadedInfo struct {
	Id int64 `json:"id"`
}

type User struct {
	// Users identifier
	UserId int64 `json:"user_id"`
	// Users visible name
	Name string `json:"name"`
	// Unique public user name. Can be `null` if user is not accessible or it is not set
	Username string `json:"username"`
}

// You will receive this update when user has been added to chat where bot is administrator
type UserAddedToChatUpdate struct {
	UpdateType string `json:"update_type,omitempty"`
	// Unix-time when event has occured
	Timestamp int64 `json:"timestamp"`
	// Chat identifier where event has occured
	ChatId int64 `json:"chat_id"`
	// User added to chat
	UserId int64 `json:"user_id"`
	// User who added user to chat
	InviterId int64 `json:"inviter_id"`
}

type UserIdsList struct {
	UserIds []int64 `json:"user_ids"`
}

// You will receive this update when user has been removed from chat where bot is administrator
type UserRemovedFromChatUpdate struct {
	UpdateType string `json:"update_type,omitempty"`
	// Unix-time when event has occured
	Timestamp int64 `json:"timestamp"`
	// Chat identifier where event has occured
	ChatId int64 `json:"chat_id"`
	// User removed from chat
	UserId int64 `json:"user_id"`
	// Administrator who removed user from chat
	AdminId int64 `json:"admin_id"`
}

type UserWithPhoto struct {
	// Users identifier
	UserId int64 `json:"user_id"`
	// Users visible name
	Name string `json:"name"`
	// Unique public user name. Can be `null` if user is not accessible or it is not set
	Username string `json:"username"`
	// URL of avatar
	AvatarUrl string `json:"avatar_url"`
	// URL of avatar of a bigger size
	FullAvatarUrl string `json:"full_avatar_url"`
}

type VideoAttachment struct {
	Type    string            `json:"type,omitempty"`
	Payload AttachmentPayload `json:"payload"`
}

// Request to attach video to message
type VideoAttachmentRequest struct {
	Type    string       `json:"type,omitempty"`
	Payload UploadedInfo `json:"payload"`
}