Compare commits
6 Commits
async-post
...
master
Author | SHA1 | Date | |
---|---|---|---|
6a21c7f54f | |||
7c2cc5e8d3 | |||
a8be017843 | |||
9d95c98424 | |||
607f26e4c1 | |||
a6936c2f30 |
@ -1,6 +1,27 @@
|
|||||||
cmake_minimum_required(VERSION 3.5)
|
cmake_minimum_required(VERSION 3.5)
|
||||||
project(mmcs-quotes-bridge LANGUAGES CXX)
|
project(mmcs-quotes-bridge LANGUAGES CXX)
|
||||||
|
|
||||||
|
option(BUILD_SHARED_LIBS "Build shared libraries by default" NO)
|
||||||
|
if(CMAKE_COMPILER_IS_GNUCXX)
|
||||||
|
set(CMAKE_EXE_LINKER_FLAGS "-static-libgcc -static-libstdc++")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(CURL_DISABLE_AWS ON)
|
||||||
|
set(CURL_DISABLE_DICT ON)
|
||||||
|
set(CURL_DISABLE_FILE ON)
|
||||||
|
set(CURL_DISABLE_FTP ON)
|
||||||
|
set(CURL_DISABLE_GOPHER ON)
|
||||||
|
set(CURL_DISABLE_IMAP ON)
|
||||||
|
set(CURL_DISABLE_LDAP ON)
|
||||||
|
set(CURL_DISABLE_LDAPS ON)
|
||||||
|
set(CURL_DISABLE_MQTT ON)
|
||||||
|
set(CURL_DISABLE_NTLM ON)
|
||||||
|
set(CURL_DISABLE_POP3 ON)
|
||||||
|
set(CURL_DISABLE_RTSP ON)
|
||||||
|
set(CURL_DISABLE_SMB ON)
|
||||||
|
set(CURL_DISABLE_TFTP ON)
|
||||||
|
set(CURL_DISABLE_WEBSOCKETS ON)
|
||||||
|
|
||||||
add_subdirectory(curl)
|
add_subdirectory(curl)
|
||||||
add_subdirectory(json)
|
add_subdirectory(json)
|
||||||
add_subdirectory(libuv)
|
add_subdirectory(libuv)
|
||||||
@ -9,6 +30,6 @@ add_subdirectory(td)
|
|||||||
|
|
||||||
add_executable(${PROJECT_NAME} main.cpp config.cpp http.cpp manager.cpp posts.cpp state.cpp tg.cpp vk.cpp)
|
add_executable(${PROJECT_NAME} main.cpp config.cpp http.cpp manager.cpp posts.cpp state.cpp tg.cpp vk.cpp)
|
||||||
|
|
||||||
target_compile_options(${PROJECT_NAME} PRIVATE -std=c++2b)
|
target_compile_options(${PROJECT_NAME} PRIVATE -std=c++2a)
|
||||||
|
|
||||||
target_link_libraries(${PROJECT_NAME} PRIVATE CURL::libcurl nlohmann_json::nlohmann_json uv spdlog::spdlog Td::TdStatic $<$<BOOL:${MINGW}>:ws2_32>)
|
target_link_libraries(${PROJECT_NAME} PRIVATE CURL::libcurl nlohmann_json::nlohmann_json uv_a spdlog::spdlog Td::TdStatic $<$<BOOL:${MINGW}>:ws2_32>)
|
23
README.md
Normal file
23
README.md
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
# MMCS Quotes Bridge
|
||||||
|
> Текущее название является рабочим вариантом, имеет мало общего с сутью проекта, все совпадения аббревиатур с реальными случайны и не несут никакой смысловой нагрузки.
|
||||||
|
>
|
||||||
|
> *P.S. кто знает тот знает короче :DDD*
|
||||||
|
|
||||||
|
Этот проект - реализация бота, предназначенного для репоста текстовых постов из источников в VK и Telegram в один выходной Telegram-канал. Изначальная цель - репостить цитаты из разных цитатников в один канал, но в принципе вы можете придумать своё применение.
|
||||||
|
|
||||||
|
## Платформа
|
||||||
|
**Операционная система.** Предполагается работа на Linux, но теоретически можно заставить бота работать и на других системах.
|
||||||
|
|
||||||
|
**Компилятор.** Проект написан на C++20 и соответственно требует более-менее современный компилятор.
|
||||||
|
|
||||||
|
## Зависимости
|
||||||
|
Большая часть необходимых библиотек присутствует в репозитории, однако для того, чтобы скачать их вместе с проектом, при клонировании требуется указать --recursive.
|
||||||
|
CMakeLists настроен на максимально портативный билд, однако всё же не все библиотеки встраиваются в исполняемый файл.
|
||||||
|
Для работы бота достаточно установленной библиотеки curl.
|
||||||
|
Для сборки (помимо CMake) нужны следующие дополнительные пакеты:
|
||||||
|
- gperf
|
||||||
|
- заголовочные файлы для OpenSSL, zlib
|
||||||
|
По вопросам сборки можно писать в issues.
|
||||||
|
|
||||||
|
## Конфигурация
|
||||||
|
Для настройки используется файл `bridge_config.json`. В качестве примера настройки оставлен `bridge_config.example.json`, который нужно отредактировать под себя.
|
11
bridge_config.example.json
Normal file
11
bridge_config.example.json
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"vk_service_key": "service_key_service_key_service_key_service_key_service_key_service_key",
|
||||||
|
|
||||||
|
"tg_api_id": 1234567,
|
||||||
|
"tg_api_hash": "53a513d108f2c7d9edc67dadd3ce4185",
|
||||||
|
"tg_phone_number": "+79528125252",
|
||||||
|
|
||||||
|
"vk_sources": [{"id": "source1"}, {"id":123451234, "link": "source2"}],
|
||||||
|
"tg_sources": [{"id": -1002282282280, "link": "tgsource"}],
|
||||||
|
"tg_destination_id": -1005252525252
|
||||||
|
}
|
@ -470,7 +470,8 @@ bool RepostManager::drop_posts_older_than(std::vector<AbstractPost> &posts, long
|
|||||||
}
|
}
|
||||||
|
|
||||||
std::optional<AbstractPost> RepostManager::to_abstract_post(const vk::Post &post, int sourceIndex) {
|
std::optional<AbstractPost> RepostManager::to_abstract_post(const vk::Post &post, int sourceIndex) {
|
||||||
return { AbstractPost(posts::SRC_VK, sourceIndex, post.id, post.date, post.text) };
|
if (post.text.empty()) return {};
|
||||||
|
else return { AbstractPost(posts::SRC_VK, sourceIndex, post.id, post.date, post.text) };
|
||||||
}
|
}
|
||||||
|
|
||||||
std::optional<AbstractPost> RepostManager::to_abstract_post(const td_api::message &post, int sourceIndex) {
|
std::optional<AbstractPost> RepostManager::to_abstract_post(const td_api::message &post, int sourceIndex) {
|
||||||
@ -486,6 +487,7 @@ std::vector<AbstractPost> RepostManager::to_abstract_posts(std::vector<vk::Post>
|
|||||||
std::vector<AbstractPost> result;
|
std::vector<AbstractPost> result;
|
||||||
result.reserve(posts.size());
|
result.reserve(posts.size());
|
||||||
for (auto &post : posts) {
|
for (auto &post : posts) {
|
||||||
|
if (post.text.empty()) continue;
|
||||||
result.emplace_back(posts::SRC_VK, sourceIndex, post.id, post.date, post.text);
|
result.emplace_back(posts::SRC_VK, sourceIndex, post.id, post.date, post.text);
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
@ -555,6 +557,10 @@ bool RepostManager::recheck_vk_posts(std::function<void()> onDone) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void RepostManager::repost(AbstractPost &post) {
|
void RepostManager::repost(AbstractPost &post) {
|
||||||
|
if (post.text.length() == 0) {
|
||||||
|
spdlog::error("repost(): zero post length (post id {} date {})", post.id, post.date);
|
||||||
|
return;
|
||||||
|
}
|
||||||
spdlog::debug("reposting (post length {})", post.text.length());
|
spdlog::debug("reposting (post length {})", post.text.length());
|
||||||
std::string_view signature = posts::add_signature(post, m_appConfig);
|
std::string_view signature = posts::add_signature(post, m_appConfig);
|
||||||
int signatureStart = post.text.length() - signature.length();
|
int signatureStart = post.text.length() - signature.length();
|
||||||
|
Loading…
Reference in New Issue
Block a user