Новости | FAQ | Авторы | Документация | В действии | Библиотека |
Инструменты | Полезные ссылки | Хостинги | Скачать | Примеры | Форум |
moko 22.09.2019 17:45
Сделать понятно можно. Начать вероятно стоит с изучения API Телеграм. У нас каркас одного из ботов выглядит примерно так:@CLASS Webhook @OPTIONS locals static @auto[] $self.CURL_OPTIONS[ $.connecttimeout(5) $.timeout(60) $.post(true) $.httpheader[ $.[Content-Type][application/json] ] ] @sendRequest[sUrl;sRequestBody] ^try{ $f[^curl:load[$CURL_OPTIONS $.url[$sUrl] $.postfields[$sRequestBody] ]] $result[$f.text] }{ ^self.logError[] $exception.handled(true) } ... @CLASS WebhookTelegram @OPTIONS locals static @BASE Webhook @auto[] $self.TELEGRAM_API_URL[***] @run[] $response:status(200) ^switch[$env:REQUEST_METHOD]{ ^case[GET;POST]{ ^self.handlePost[] } ^case[DEFAULT]{ $response:status(403) } } @handlePost[] ^switch(true){ ^case(!(def $form:method)){ ^try{ ^if(!def $form:body){ $hBody[^json:parse[^taint[clean][$request:body]]] }{ $hBody[^json:parse[^taint[clean][$form:body]]] } }{ $hBody[] $exception.handled(true) } ^if(def $hBody){ ^self.handleUpdate[$hBody] }{ $response:status(500) } } ^case[DEFAULT]{ ^switch[$form:method]{ ^case[getMe;setWebhook]{ ^if($self.[$form:method] is junction){ ^self.[$form:method][] } } ^case[DEFAULT]{ $response:status(404) } } } } @handleUpdate[hBody] ^if(^hBody.update_id.double(0) > 0){ ^connect[$MAIN:SQL.connect-string]{ $sReceivedMessage[^hBody.message.text.trim[]] ^switch[$sReceivedMessage]{ ^case[/start]{ $sPayload[GET_STARTED] $sText[Добрый день! Кого позвать?] $hReplyMarkup[ $.keyboard[^table::create{Студию Магазинус}] $.one_time_keyboard(true) $.resize_keyboard(true) ] } ^case[Студию]{ $sPayload[GET_STUDIO] $sText[^self.getStudio[]] } ^case[Магазинус]{ $sPayload[GET_STORE] $sText[Отлично! Вот о чем я готов поболтать:] $hReplyMarkup[ $.keyboard[^table::create{***}] $.one_time_keyboard(true) $.resize_keyboard(true) ] } ^case[DEFAULT]{ $sText[^self.makeMessage[$hBody.message.from.id;^self.getPayload[$hBody.message.from.id];$sReceivedMessage]] } } ^if(def $sPayload){ ^self.saveRequest[ $.sender_id[$hBody.message.from.id] $.recipient_id[$hBody.message.chat.id] $.timestamp[$hBody.message.date] $.payload[$sPayload] ] } $result[^self.apiResponse[sendMessage][ $.chat_id[$hBody.message.chat.id] $.reply_to_message_id[$hBody.message.id] $.text[$sText] ^if(def $hReplyMarkup){ $.reply_markup[$hReplyMarkup] } ]] ^if(!def $sPayload){ ^self.resetPayload[$hBody.message.from.id] ^self.saveMessage[ $.sender_id[$hBody.message.from.id] $.timestamp[$hBody.message.date] $.message[$sReceivedMessage] ] } } } @getMe[] $response:body[^self.apiResponse[getMe]] @setWebhook[] $response:body[^self.apiResponse[setWebhook][ $.url[***] ]] @apiResponse[sMethod;hResponse] ^if(!(def $sMethod)){ ^self.logError[Method name must be a string^#0A] ^return[] } ^if(!def $hResponse){ $hResponse[^hash::create[]] }(!($hResponse is hash)){ ^self.logError[hResponse must be an hash^#0A] ^return[] } $result[^self.sendRequest[${TELEGRAM_API_URL}/$sMethod][^json:string[$hResponse][ $.indent(false) $.one-line(true) $.table[array] ]]]