Skip to content

Commit 6d7c78d

Browse files
committed
Bot API 4.0
1 parent 83f897a commit 6d7c78d

File tree

5 files changed

+95
-8
lines changed

5 files changed

+95
-8
lines changed

telebot.nimble

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
version = "0.3.7"
1+
version = "0.4.0"
22
author = "Huy Doan"
33
description = "Async Telegram Bot API Client"
44
license = "MIT"

telebot/api.nim

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ magic Venue:
8888
title: string
8989
address: string
9090
foursquareId: string {.optional.}
91+
foursquareType: string {.optional.}
9192
disableNotification: bool {.optional.}
9293
replyToMessageId: int {.optional.}
9394
replyMarkup: KeyboardMarkup {.optional.}
@@ -97,6 +98,7 @@ magic Contact:
9798
phoneNumber: string
9899
firstName: string
99100
lastName: string {.optional.}
101+
vcard: string {.optional.}
100102
disableNotification: bool {.optional.}
101103
replyToMessageId: int {.optional.}
102104
replyMarkup: KeyboardMarkup {.optional.}
@@ -126,6 +128,19 @@ magic Invoice:
126128
replyToMessageId: int {.optional.}
127129
replyMarkup: KeyboardMarkup {.optional.}
128130

131+
magic Animation:
132+
chatId: int
133+
animation: string
134+
duration: int {.optional.}
135+
width: int {.optional.}
136+
height: int {.optional.}
137+
thumb: string {.optional.}
138+
caption: string {.optional.}
139+
parseMode: string {.optional.}
140+
disableNotification: string {.optional.}
141+
replyToMessageId: int {.optional.}
142+
replyMarkup: KeyboardMarkup {.optional.}
143+
129144

130145
proc getMe*(b: TeleBot): Future[User] {.async.} =
131146
## Returns basic information about the bot in form of a ``User`` object.
@@ -438,7 +453,9 @@ proc stopMessageLiveLocation*(b: TeleBot, chatId = "", messageId = 0, inlineMess
438453
proc sendMediaGroup*(b: TeleBot, chatId = "", media: seq[InputMedia], disableNotification = false, replyToMessageId = 0): Future[bool] {.async.} =
439454
END_POINT("sendMediaGroup")
440455
var data = newMultipartData()
441-
data["chat_id"] = chat_id
456+
data["chat_id"] = chatId
457+
for m in media:
458+
uploadInputMedia(data, m)
442459
var json = ""
443460
marshal(media, json)
444461
data["media"] = json
@@ -450,6 +467,26 @@ proc sendMediaGroup*(b: TeleBot, chatId = "", media: seq[InputMedia], disableNot
450467
let res = await makeRequest(endpoint % b.token, data)
451468
result = res.bval
452469

470+
proc editMessageMedia*(b: TeleBot, media: InputMedia, chatId = "", messageId = 0, inlineMessageId = 0, replyMarkup: KeyboardMarkup = nil): Future[bool] {.async.} =
471+
END_POINT("editMessageMedia")
472+
var data = newMultipartData()
473+
if chatId.len > 0:
474+
data["chat_id"] = chat_id
475+
if messageId != 0:
476+
data["message_id"] = $messageId
477+
if inlineMessageId != 0:
478+
data["inline_message_id"] = $inlineMessageId
479+
480+
uploadInputMedia(data, media)
481+
var json = ""
482+
marshal(media, json)
483+
data["media"] = json
484+
if replyMarkup != nil:
485+
data["reply_markup"] = $replyMarkup
486+
487+
let res = await makeRequest(endpoint % b.token, data)
488+
result = res.bval
489+
453490
proc answerCallbackQuery*(b: TeleBot, callbackQueryId: string, text = "", showAlert = false, url = "", cacheTime = 0): Future[bool] {.async.} =
454491
END_POINT("answerCallbackQuery")
455492
var data = newMultipartData()

telebot/inputmedia.nim

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import types, json, strutils, utils, options
2+
3+
proc `$`*(m: InputMedia): string =
4+
result = ""
5+
if m of InputMediaPhoto:
6+
var photo = InputMediaPhoto(m)
7+
photo.kind = "photo"
8+
marshal(photo[], result)
9+
elif m of InputMediaVideo:
10+
var video = InputMediaVideo(m)
11+
marshal(video[], result)
12+
13+
proc newInputMediaPhoto*(media: string, caption = "", parseMode = ""): InputMediaPhoto =
14+
new(result)
15+
result.kind = "photo"
16+
result.media = media
17+
if caption.len > 0:
18+
result.caption = some(caption)
19+
if parseMode.len > 0:
20+
result.parseMode = some(parseMode)
21+
22+
proc newInputMediaVideo*(media: string, caption = "", parseMode = ""): InputMediaVideo =
23+
new(result)
24+
result.kind = "video"
25+
result.media = media
26+
if caption.len > 0:
27+
result.caption = some(caption)
28+
if parseMode.len > 0:
29+
result.parseMode = some(parseMode)

telebot/types.nim

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ type
5252
title*: Option[string]
5353
mimeType*: Option[string]
5454
fileSize*: Option[int]
55+
thumb*: Option[PhotoSize]
5556

5657
Document* = object of TelegramObject
5758
fileId*: string
@@ -107,6 +108,7 @@ type
107108
firstName*: string
108109
lastName*: Option[string]
109110
userId*: Option[string]
111+
vcard*: Option[string]
110112

111113
Location* = object of TelegramObject
112114
longitude*: float
@@ -117,6 +119,7 @@ type
117119
title*: string
118120
address*: string
119121
foursquareId*: Option[string]
122+
foursquareName*: Option[string]
120123

121124
UserProfilePhotos* = object of TelegramObject
122125
totalCount*: int
@@ -196,6 +199,7 @@ type
196199
captionEntities*: Option[seq[MessageEntity]]
197200
audio*: Option[Audio]
198201
document*: Option[Document]
202+
animation*: Option[Animation]
199203
game*: Option[Game]
200204
photo*: Option[seq[PhotoSize]]
201205
sticker*: Option[Sticker]
@@ -360,12 +364,14 @@ type
360364
longitude*: float
361365
title*: string
362366
address*: string
363-
foursquareId*: string
367+
foursquareId*: Option[string]
368+
foursquareName*: Option[string]
364369

365370
InputContactMessageContent* = object of InputMessageContent
366371
phoneNumber*: string
367372
firstName*: string
368-
lastName*: string
373+
lastName*: Option[string]
374+
vcard*: Option[string]
369375

370376
InlineQueryResultArticle* = object of InlineQueryResultWithThumb
371377
title*: string
@@ -441,12 +447,14 @@ type
441447
longitude*: float
442448
title*: string
443449
address*: string
444-
foursquareId*: string
450+
foursquareId*: Option[string]
451+
foursquareName*: Option[string]
445452

446453
InlineQueryResultContact* = object of InlineQueryResultWithThumb
447454
phoneNumber*: string
448455
firstName*: string
449456
lastName*: string
457+
vcard*: Option[string]
450458

451459
InlineQueryResultGame* = object of InlineQueryResult
452460
gameShortName*: string
@@ -511,13 +519,13 @@ type
511519
InputMedia* = ref object of TelegramObject
512520
kind*: string
513521
media*: string
522+
thumb*: Option[string]
514523
caption*: Option[string]
515524
parseMode*: Option[string]
516525

517526
InputMediaPhoto* = ref object of InputMedia
518527

519528
InputMediaVideo* = ref object of InputMedia
520-
thumb*: Option[string]
521529
width*: Option[int]
522530
height*: Option[int]
523531
duration*: Option[int]
@@ -534,5 +542,4 @@ type
534542
title*: Option[string]
535543

536544
InputMediaDocument* = ref object of InputMedia
537-
thumb*: Option[string]
538545

telebot/utils.nim

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1+
import macros, httpclient, asyncdispatch, json, strutils, types, options, logging, strtabs, random
12

2-
import macros, httpclient, asyncdispatch, json, strutils, types, options, logging, strtabs
3+
randomize()
34

45
const
56
API_URL* = "https://api.telegram.org/bot$#/"
@@ -194,6 +195,19 @@ proc addData*(p: var MultipartData, name: string, content: auto, fileCheck = fal
194195
else:
195196
p.add(name, $content)
196197

198+
proc uploadInputMedia*(p: var MultipartData, m: InputMedia) =
199+
var name = "file_upload_" & $rand(high(int))
200+
if m.media.startsWith("file://"):
201+
m.media = "attach://" & name
202+
p.addFiles({name: m.media[7..m.media.len-1]})
203+
204+
if m.thumb.isSome:
205+
name = "file_upload_" & $rand(high(int))
206+
m.thumb = some("attach://" & name)
207+
p.addFiles({name: m.media[7..m.media.len-1]})
208+
209+
210+
197211

198212
macro magic*(head, body: untyped): untyped =
199213
result = newStmtList()

0 commit comments

Comments
 (0)