summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt4
-rw-r--r--Dockerfile_test4
-rw-r--r--include/tgbot/tgbot.h1
-rw-r--r--include/tgbot/tools/FileTools.h25
-rw-r--r--include/tgbot/types/InputFile.h5
-rw-r--r--samples/echobot/CMakeLists.txt8
-rw-r--r--samples/echobot/Dockerfile3
-rw-r--r--samples/echobot/src/main.cpp9
-rw-r--r--samples/inline-keyboard/CMakeLists.txt8
-rw-r--r--samples/inline-keyboard/src/main.cpp9
-rw-r--r--samples/photo/CMakeLists.txt14
-rw-r--r--samples/photo/Dockerfile8
-rw-r--r--samples/photo/example.jpgbin0 -> 16770 bytes
-rw-r--r--samples/photo/src/main.cpp45
-rw-r--r--src/tools/FileTools.cpp25
-rw-r--r--src/types/InputFile.cpp24
-rw-r--r--test/tgbot/tools/StringTools.cpp13
17 files changed, 182 insertions, 23 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 8c31193..ea765ad 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -11,13 +11,15 @@ set(SRC_LIST
src/Api.cpp
src/TgTypeParser.cpp
src/TgException.cpp
+ src/EventHandler.cpp
src/net/Url.cpp
src/net/HttpClient.cpp
src/net/HttpParser.cpp
src/net/TgLongPoll.cpp
src/tools/StringTools.cpp
+ src/tools/FileTools.cpp
src/types/InlineQueryResult.cpp
- src/EventHandler.cpp
+ src/types/InputFile.cpp
)
### libs
diff --git a/Dockerfile_test b/Dockerfile_test
index f203561..98f3a02 100644
--- a/Dockerfile_test
+++ b/Dockerfile_test
@@ -23,6 +23,10 @@ WORKDIR /tmp/tgbot-cpp/samples/inline-keyboard
RUN rm -rf CMakeCache.txt CMakeFiles/ && \
cmake . && make -j4
+WORKDIR /tmp/tgbot-cpp/samples/photo
+RUN rm -rf CMakeCache.txt CMakeFiles/ && \
+ cmake . && make -j4
+
WORKDIR /tmp/tgbot-cpp
ENV CTEST_OUTPUT_ON_FAILURE=1
CMD make test
diff --git a/include/tgbot/tgbot.h b/include/tgbot/tgbot.h
index 351410b..a7c8ae6 100644
--- a/include/tgbot/tgbot.h
+++ b/include/tgbot/tgbot.h
@@ -54,6 +54,7 @@
#include "tgbot/types/InlineQueryResultVideo.h"
#include "tgbot/types/ChosenInlineResult.h"
#include "tgbot/tools/StringTools.h"
+#include "tgbot/tools/FileTools.h"
#include "tgbot/net/HttpClient.h"
#include "tgbot/net/HttpParser.h"
#include "tgbot/net/HttpReqArg.h"
diff --git a/include/tgbot/tools/FileTools.h b/include/tgbot/tools/FileTools.h
new file mode 100644
index 0000000..6071852
--- /dev/null
+++ b/include/tgbot/tools/FileTools.h
@@ -0,0 +1,25 @@
+//
+// Created by Oleg on 25.01.17.
+//
+
+#ifndef TGBOT_FILETOOLS_H
+#define TGBOT_FILETOOLS_H
+
+#include <string>
+
+/**
+ * @ingroup tools
+ */
+namespace FileTools {
+
+/**
+ * Reads whole file to string.
+ * @param filePath Path to a file
+ * @return string with file contents
+ */
+std::string read(const std::string& filePath);
+
+};
+
+
+#endif //TGBOT_FILETOOLS_H
diff --git a/include/tgbot/types/InputFile.h b/include/tgbot/types/InputFile.h
index f2403e3..c56ab7a 100644
--- a/include/tgbot/types/InputFile.h
+++ b/include/tgbot/types/InputFile.h
@@ -52,6 +52,11 @@ public:
* File name.
*/
std::string fileName;
+
+ /**
+ * Creates new InputFile::Ptr from an existing file.
+ */
+ static InputFile::Ptr fromFile(const std::string& filePath, const std::string& mimeType);
};
}
diff --git a/samples/echobot/CMakeLists.txt b/samples/echobot/CMakeLists.txt
index c54109c..5df19f7 100644
--- a/samples/echobot/CMakeLists.txt
+++ b/samples/echobot/CMakeLists.txt
@@ -1,10 +1,14 @@
cmake_minimum_required(VERSION 2.8.4)
project(echobot)
-set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
+
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall")
set(Boost_USE_MULTITHREADED ON)
+
find_package(Threads REQUIRED)
find_package(OpenSSL REQUIRED)
-find_package(Boost COMPONENTS system iostreams unit_test_framework REQUIRED)
+find_package(Boost COMPONENTS system iostreams REQUIRED)
include_directories(/usr/local/include ${OPENSSL_INCLUDE_DIR} ${Boost_INCLUDE_DIR})
+
add_executable(echobot src/main.cpp)
+
target_link_libraries(echobot /usr/local/lib/libTgBot.a ${CMAKE_THREAD_LIBS_INIT} ${OPENSSL_LIBRARIES} ${Boost_LIBRARIES})
diff --git a/samples/echobot/Dockerfile b/samples/echobot/Dockerfile
index 8d8bca5..054c1c7 100644
--- a/samples/echobot/Dockerfile
+++ b/samples/echobot/Dockerfile
@@ -1,6 +1,5 @@
FROM reo7sp/tgbot-cpp
-MAINTAINER Oleg Morozenkov
-ENV REFRESHED_AT 2015-08-12
+MAINTAINER Oleg Morozenkov <a@reo7sp.ru>
WORKDIR /tmp/echobot
COPY . .
diff --git a/samples/echobot/src/main.cpp b/samples/echobot/src/main.cpp
index 05806d2..7c78112 100644
--- a/samples/echobot/src/main.cpp
+++ b/samples/echobot/src/main.cpp
@@ -32,11 +32,6 @@ using namespace TgBot;
bool sigintGot = false;
int main() {
- signal(SIGINT, [](int s) {
- printf("SIGINT got");
- sigintGot = true;
- });
-
Bot bot("PLACE YOUR TOKEN HERE");
bot.getEvents().onCommand("start", [&bot](Message::Ptr message) {
bot.getApi().sendMessage(message->chat->id, "Hi!");
@@ -49,6 +44,10 @@ int main() {
bot.getApi().sendMessage(message->chat->id, "Your message is: " + message->text);
});
+ signal(SIGINT, [](int s) {
+ printf("SIGINT got");
+ sigintGot = true;
+ });
try {
printf("Bot username: %s\n", bot.getApi().getMe()->username.c_str());
diff --git a/samples/inline-keyboard/CMakeLists.txt b/samples/inline-keyboard/CMakeLists.txt
index c59a97a..dbcff89 100644
--- a/samples/inline-keyboard/CMakeLists.txt
+++ b/samples/inline-keyboard/CMakeLists.txt
@@ -1,10 +1,14 @@
cmake_minimum_required(VERSION 2.8.4)
project(inline-keyboard)
-set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
+
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall")
set(Boost_USE_MULTITHREADED ON)
+
find_package(Threads REQUIRED)
find_package(OpenSSL REQUIRED)
-find_package(Boost COMPONENTS system iostreams unit_test_framework REQUIRED)
+find_package(Boost COMPONENTS system iostreams REQUIRED)
include_directories(/usr/local/include ${OPENSSL_INCLUDE_DIR} ${Boost_INCLUDE_DIR})
+
add_executable(inline-keyboard src/main.cpp)
+
target_link_libraries(inline-keyboard /usr/local/lib/libTgBot.a ${CMAKE_THREAD_LIBS_INIT} ${OPENSSL_LIBRARIES} ${Boost_LIBRARIES})
diff --git a/samples/inline-keyboard/src/main.cpp b/samples/inline-keyboard/src/main.cpp
index 4e6fb21..440f965 100644
--- a/samples/inline-keyboard/src/main.cpp
+++ b/samples/inline-keyboard/src/main.cpp
@@ -10,11 +10,6 @@ using namespace TgBot;
bool sigintGot = false;
int main() {
- signal(SIGINT, [](int s) {
- printf("SIGINT got");
- sigintGot = true;
- });
-
Bot bot("PLACE YOUR TOKEN HERE");
// Thanks Pietro Falessi for code
@@ -40,6 +35,10 @@ int main() {
}
});
+ signal(SIGINT, [](int s) {
+ printf("SIGINT got");
+ sigintGot = true;
+ });
try {
printf("Bot username: %s\n", bot.getApi().getMe()->username.c_str());
diff --git a/samples/photo/CMakeLists.txt b/samples/photo/CMakeLists.txt
new file mode 100644
index 0000000..d431b88
--- /dev/null
+++ b/samples/photo/CMakeLists.txt
@@ -0,0 +1,14 @@
+cmake_minimum_required(VERSION 2.8.4)
+project(photo)
+
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall")
+set(Boost_USE_MULTITHREADED ON)
+
+find_package(Threads REQUIRED)
+find_package(OpenSSL REQUIRED)
+find_package(Boost COMPONENTS system iostreams REQUIRED)
+include_directories(/usr/local/include ${OPENSSL_INCLUDE_DIR} ${Boost_INCLUDE_DIR})
+
+add_executable(photo src/main.cpp)
+
+target_link_libraries(photo /usr/local/lib/libTgBot.a ${CMAKE_THREAD_LIBS_INIT} ${OPENSSL_LIBRARIES} ${Boost_LIBRARIES})
diff --git a/samples/photo/Dockerfile b/samples/photo/Dockerfile
new file mode 100644
index 0000000..2bdbe1f
--- /dev/null
+++ b/samples/photo/Dockerfile
@@ -0,0 +1,8 @@
+FROM reo7sp/tgbot-cpp
+MAINTAINER Oleg Morozenkov <a@reo7sp.ru>
+
+WORKDIR /tmp/photo
+COPY . .
+RUN cmake .
+RUN make -j4
+CMD ./photo
diff --git a/samples/photo/example.jpg b/samples/photo/example.jpg
new file mode 100644
index 0000000..cbfd0d5
--- /dev/null
+++ b/samples/photo/example.jpg
Binary files differ
diff --git a/samples/photo/src/main.cpp b/samples/photo/src/main.cpp
new file mode 100644
index 0000000..1b81f27
--- /dev/null
+++ b/samples/photo/src/main.cpp
@@ -0,0 +1,45 @@
+//
+// Created by Oleg Morozenkov on 25.01.17.
+//
+
+#include <signal.h>
+#include <stdio.h>
+#include <exception>
+
+#include <tgbot/tgbot.h>
+
+using namespace std;
+using namespace TgBot;
+
+bool sigintGot = false;
+
+int main() {
+ const string photoFilePath = "example.jpg";
+ const string photoMimeType = "image/jpeg";
+
+ Bot bot("PLACE YOUR TOKEN HERE");
+ bot.getEvents().onCommand("start", [&bot](Message::Ptr message) {
+ bot.getApi().sendMessage(message->chat->id, "Hi!");
+ });
+ bot.getEvents().onCommand("photo", [&bot, &photoFilePath, &photoMimeType](Message::Ptr message) {
+ bot.getApi().sendPhoto(message->chat->id, InputFile::fromFile(photoFilePath, photoMimeType));
+ });
+
+ signal(SIGINT, [](int s) {
+ printf("SIGINT got");
+ sigintGot = true;
+ });
+ try {
+ printf("Bot username: %s\n", bot.getApi().getMe()->username.c_str());
+
+ TgLongPoll longPoll(bot);
+ while (!sigintGot) {
+ printf("Long poll started\n");
+ longPoll.start();
+ }
+ } catch (exception& e) {
+ printf("error: %s\n", e.what());
+ }
+
+ return 0;
+}
diff --git a/src/tools/FileTools.cpp b/src/tools/FileTools.cpp
new file mode 100644
index 0000000..1522a9d
--- /dev/null
+++ b/src/tools/FileTools.cpp
@@ -0,0 +1,25 @@
+//
+// Created by Oleg on 25.01.17.
+//
+
+#include "tgbot/tools/FileTools.h"
+
+#include <fstream>
+#include <sstream>
+
+using namespace std;
+
+namespace FileTools {
+
+std::string read(const std::string& filePath) {
+ ifstream in(filePath, ios::in | ios::binary);
+ if (in) {
+ ostringstream contents;
+ contents << in.rdbuf();
+ in.close();
+ return contents.str();
+ }
+ throw errno;
+}
+
+};
diff --git a/src/types/InputFile.cpp b/src/types/InputFile.cpp
new file mode 100644
index 0000000..0f6cb86
--- /dev/null
+++ b/src/types/InputFile.cpp
@@ -0,0 +1,24 @@
+//
+// Created by Oleg Morozenkov on 25.01.17.
+//
+
+#include "tgbot/types/InputFile.h"
+
+#include <fstream>
+
+#include "tgbot/tools/StringTools.h"
+#include "tgbot/tools/FileTools.h"
+
+using namespace std;
+
+namespace TgBot {
+
+InputFile::Ptr InputFile::fromFile(const string& filePath, const string& mimeType) {
+ InputFile::Ptr result(new InputFile);
+ result->data = FileTools::read(filePath);
+ result->mimeType = mimeType;
+ result->fileName = StringTools::split(filePath, '/').back();
+ return result;
+}
+
+};
diff --git a/test/tgbot/tools/StringTools.cpp b/test/tgbot/tools/StringTools.cpp
index 81e469a..969c3d8 100644
--- a/test/tgbot/tools/StringTools.cpp
+++ b/test/tgbot/tools/StringTools.cpp
@@ -36,22 +36,23 @@ BOOST_AUTO_TEST_SUITE(tStringTools)
BOOST_AUTO_TEST_CASE(startsWith) {
BOOST_CHECK(StringTools::startsWith("abc123", "abc"));
- BOOST_CHECK(!StringTools::startsWith("abc123", "aac"));
- BOOST_CHECK(!StringTools::startsWith("abc123", "Xabc"));
- BOOST_CHECK(!StringTools::startsWith("abc123", "abcX"));
+ BOOST_CHECK(!StringTools::startsWith("abc123", "aac"));
+ BOOST_CHECK(!StringTools::startsWith("abc123", "Xabc"));
+ BOOST_CHECK(!StringTools::startsWith("abc123", "abcX"));
BOOST_CHECK(!StringTools::startsWith("abc", "abc123"));
}
BOOST_AUTO_TEST_CASE(endsWith) {
BOOST_CHECK(StringTools::endsWith("abc123", "123"));
- BOOST_CHECK(!StringTools::endsWith("abc123", "113"));
- BOOST_CHECK(!StringTools::endsWith("abc123", "X123"));
- BOOST_CHECK(!StringTools::endsWith("abc123", "123X"));
+ BOOST_CHECK(!StringTools::endsWith("abc123", "113"));
+ BOOST_CHECK(!StringTools::endsWith("abc123", "X123"));
+ BOOST_CHECK(!StringTools::endsWith("abc123", "123X"));
BOOST_CHECK(!StringTools::endsWith("123", "abc123"));
}
BOOST_AUTO_TEST_CASE(split) {
BOOST_CHECK(StringTools::split("123 456 789", ' ') == vector<string>({"123", "456", "789"}));
+ BOOST_CHECK(StringTools::split("aaa", ' ') == vector<string>({"aaa"}));
}
BOOST_AUTO_TEST_CASE(urlEncode) {