Skip to content

Commit

Permalink
Bot API 4.0
Browse files Browse the repository at this point in the history
  • Loading branch information
ba0f3 committed Aug 4, 2018
1 parent 83f897a commit 6d7c78d
Show file tree
Hide file tree
Showing 5 changed files with 95 additions and 8 deletions.
2 changes: 1 addition & 1 deletion telebot.nimble
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
version = "0.3.7"
version = "0.4.0"
author = "Huy Doan"
description = "Async Telegram Bot API Client"
license = "MIT"
Expand Down
39 changes: 38 additions & 1 deletion telebot/api.nim
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,7 @@ magic Venue:
title: string
address: string
foursquareId: string {.optional.}
foursquareType: string {.optional.}
disableNotification: bool {.optional.}
replyToMessageId: int {.optional.}
replyMarkup: KeyboardMarkup {.optional.}
Expand All @@ -97,6 +98,7 @@ magic Contact:
phoneNumber: string
firstName: string
lastName: string {.optional.}
vcard: string {.optional.}
disableNotification: bool {.optional.}
replyToMessageId: int {.optional.}
replyMarkup: KeyboardMarkup {.optional.}
Expand Down Expand Up @@ -126,6 +128,19 @@ magic Invoice:
replyToMessageId: int {.optional.}
replyMarkup: KeyboardMarkup {.optional.}

magic Animation:
chatId: int
animation: string
duration: int {.optional.}
width: int {.optional.}
height: int {.optional.}
thumb: string {.optional.}
caption: string {.optional.}
parseMode: string {.optional.}
disableNotification: string {.optional.}
replyToMessageId: int {.optional.}
replyMarkup: KeyboardMarkup {.optional.}


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

proc editMessageMedia*(b: TeleBot, media: InputMedia, chatId = "", messageId = 0, inlineMessageId = 0, replyMarkup: KeyboardMarkup = nil): Future[bool] {.async.} =
END_POINT("editMessageMedia")
var data = newMultipartData()
if chatId.len > 0:
data["chat_id"] = chat_id
if messageId != 0:
data["message_id"] = $messageId
if inlineMessageId != 0:
data["inline_message_id"] = $inlineMessageId

uploadInputMedia(data, media)
var json = ""
marshal(media, json)
data["media"] = json
if replyMarkup != nil:
data["reply_markup"] = $replyMarkup

let res = await makeRequest(endpoint % b.token, data)
result = res.bval

proc answerCallbackQuery*(b: TeleBot, callbackQueryId: string, text = "", showAlert = false, url = "", cacheTime = 0): Future[bool] {.async.} =
END_POINT("answerCallbackQuery")
var data = newMultipartData()
Expand Down
29 changes: 29 additions & 0 deletions telebot/inputmedia.nim
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
import types, json, strutils, utils, options

proc `$`*(m: InputMedia): string =
result = ""
if m of InputMediaPhoto:
var photo = InputMediaPhoto(m)
photo.kind = "photo"
marshal(photo[], result)
elif m of InputMediaVideo:
var video = InputMediaVideo(m)
marshal(video[], result)

proc newInputMediaPhoto*(media: string, caption = "", parseMode = ""): InputMediaPhoto =
new(result)
result.kind = "photo"
result.media = media
if caption.len > 0:
result.caption = some(caption)
if parseMode.len > 0:
result.parseMode = some(parseMode)

proc newInputMediaVideo*(media: string, caption = "", parseMode = ""): InputMediaVideo =
new(result)
result.kind = "video"
result.media = media
if caption.len > 0:
result.caption = some(caption)
if parseMode.len > 0:
result.parseMode = some(parseMode)
17 changes: 12 additions & 5 deletions telebot/types.nim
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ type
title*: Option[string]
mimeType*: Option[string]
fileSize*: Option[int]
thumb*: Option[PhotoSize]

Document* = object of TelegramObject
fileId*: string
Expand Down Expand Up @@ -107,6 +108,7 @@ type
firstName*: string
lastName*: Option[string]
userId*: Option[string]
vcard*: Option[string]

Location* = object of TelegramObject
longitude*: float
Expand All @@ -117,6 +119,7 @@ type
title*: string
address*: string
foursquareId*: Option[string]
foursquareName*: Option[string]

UserProfilePhotos* = object of TelegramObject
totalCount*: int
Expand Down Expand Up @@ -196,6 +199,7 @@ type
captionEntities*: Option[seq[MessageEntity]]
audio*: Option[Audio]
document*: Option[Document]
animation*: Option[Animation]
game*: Option[Game]
photo*: Option[seq[PhotoSize]]
sticker*: Option[Sticker]
Expand Down Expand Up @@ -360,12 +364,14 @@ type
longitude*: float
title*: string
address*: string
foursquareId*: string
foursquareId*: Option[string]
foursquareName*: Option[string]

InputContactMessageContent* = object of InputMessageContent
phoneNumber*: string
firstName*: string
lastName*: string
lastName*: Option[string]
vcard*: Option[string]

InlineQueryResultArticle* = object of InlineQueryResultWithThumb
title*: string
Expand Down Expand Up @@ -441,12 +447,14 @@ type
longitude*: float
title*: string
address*: string
foursquareId*: string
foursquareId*: Option[string]
foursquareName*: Option[string]

InlineQueryResultContact* = object of InlineQueryResultWithThumb
phoneNumber*: string
firstName*: string
lastName*: string
vcard*: Option[string]

InlineQueryResultGame* = object of InlineQueryResult
gameShortName*: string
Expand Down Expand Up @@ -511,13 +519,13 @@ type
InputMedia* = ref object of TelegramObject
kind*: string
media*: string
thumb*: Option[string]
caption*: Option[string]
parseMode*: Option[string]

InputMediaPhoto* = ref object of InputMedia

InputMediaVideo* = ref object of InputMedia
thumb*: Option[string]
width*: Option[int]
height*: Option[int]
duration*: Option[int]
Expand All @@ -534,5 +542,4 @@ type
title*: Option[string]

InputMediaDocument* = ref object of InputMedia
thumb*: Option[string]

16 changes: 15 additions & 1 deletion telebot/utils.nim
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import macros, httpclient, asyncdispatch, json, strutils, types, options, logging, strtabs, random

import macros, httpclient, asyncdispatch, json, strutils, types, options, logging, strtabs
randomize()

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

proc uploadInputMedia*(p: var MultipartData, m: InputMedia) =
var name = "file_upload_" & $rand(high(int))
if m.media.startsWith("file://"):
m.media = "attach://" & name
p.addFiles({name: m.media[7..m.media.len-1]})

if m.thumb.isSome:
name = "file_upload_" & $rand(high(int))
m.thumb = some("attach://" & name)
p.addFiles({name: m.media[7..m.media.len-1]})




macro magic*(head, body: untyped): untyped =
result = newStmtList()
Expand Down

0 comments on commit 6d7c78d

Please sign in to comment.