import vibe.vibe;
import vibe.stream.tls;
import vibe.data.json;
import std.string;
import std.typecons;
immutable string botName = "somebotname";
immutable string tgWebhookUrl = "/urlforwebhook";
immutable string tApiUrl = "https://api.telegram.org/bot123456789:TOKENISHERE";
void main()
{
auto settings = new HTTPServerSettings;
// на каком порту слушать вебхуки, проксируемые сюда nginx'ом
settings.port = 8080;
// на каких интерфейсах хоста слушать вебхуки
settings.bindAddresses = ["::1", "127.0.0.1"];
auto router = new URLRouter;
// установка обработчика вебхуков
router.post(tgWebhookUrl, &tgWebhookDispatcher);
listenHTTP(settings, router);
runApplication();
}
// обработчик вебхуков
void tgWebhookDispatcher(HTTPServerRequest req, HTTPServerResponse res)
{
res.contentType("application/json");
string resJson;
// проверка на то, что пришедшее сообщение является replay'ем
if("reply_to_message" in req.json["message"]) {
// проверка на то, что в пришедшем сообщении команда для бота
if("entities" in req.json["message"] &&
"type" in req.json["message"]["entities"][0] &&
req.json["message"]["entities"][0]["type"].get!string == "bot_command")
{
// диспетчеризация команд для бота и ответ на них
switch(req.json["message"]["text"].get!string)
{
case "/somecommand1@" ~ botName:
resJson = q"[{"method":"sendMessage","chat_id":]"
~ to!string(req.json["message"]["chat"]["id"])
~ q"[,"text":"Answer1"}]";
break;
case "/somecommand2@" ~ botName:
resJson = q"[{"method":"sendMessage","chat_id":]"
~ to!string(req.json["message"]["chat"]["id"])
~ q"[,"text":"Answer2"}]";
break;
default:
break;
}
}
}
res.writeBody(resJson);
}