ΠΡΠΎΡΡΠΎΠΉ ΡΠ΅Π»Π΅Π³ΡΠ°ΠΌ Π±ΠΎΡ, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΠΉ Π½Π° ΡΠΈ.
ΠΠ»Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Π»ΡΡΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ clang
.
Π’Π°ΠΊ ΠΆΠ΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ gcc
.
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ:
json-c
Π΄Π»Ρ ΠΏΠ°ΡΡΠΈΠ½Π³Π° JSONlibcurl
Π΄Π»Ρ Π·Π°ΠΏΡΠΎΡΠΎΠ² ΠΊ API telegram
Π‘ΡΠ°Π½Π΄Π°ΡΡ:
c99
ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΌΠΎΠΌΠ΅Π½ΡΠ°Π»ΡΠ½ΠΎΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ (ΠΊΠΎΠ½ΡΡΠ°Π½Ρ).c89
Π΅ΡΠ»ΠΈ Π½Π΅ ΡΠΌΡΡΠ°Π΅Ρwarning: designated initializers are a C99 feature
Π Π΅ΡΠ΅ΠΏΡΡ make:
info
Π²ΡΠ²ΠΎΠ΄ΠΈΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΡΠ΅Π΄Π΅, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ Π±ΡΠ΄Π΅Ρ ΡΠΎΠ±ΠΈΡΠ°ΡΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°clean
ΡΠ΄Π°Π»ΡΠ΅Ρobj/
ΠΈbin/
Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈall
(ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ) ΡΠΎΠ±ΠΈΡΠ°Π΅Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ
Π‘Π±ΠΎΡΠΊΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠΎΡΡΠ΅ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠΎΠ΄ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΡ ΡΡΠ΅Π΄Ρ ΠΏΡΠΈ
ΠΏΠΎΠΌΠΎΡΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΡΡΠ΅Π΄Ρ TARGET
. ΠΠΎΡ Π΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ:
RELEASE
(ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ) ΡΠ±ΠΎΡΠΊΠ° Ρ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠ΅ΠΉ (-O3
) ΠΈ ΠΏΠΎΠ΄ ΡΠ΅ΠΊΡΡΡΡ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ (-march=native
)CLANG
Π²ΠΌΠ΅ΡΡΠ΅ Ρ ΠΎΠ±ΡΡΠ½ΡΠΌΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡΠΌΠΈ ΠΈΠ·RELEASE
ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ThinLTO (Π΄ΠΎΡΡΡΠΏΠ½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ clang)DEBUG
ΡΠ±ΠΎΡΠΊΠ° Π±Π΅Π· ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΉ Ρ debug ΡΠΈΠΌΠ²ΠΎΠ»Π°ΠΌΠΈ (-g
)
Π’Π°ΠΊ ΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΡΠ²ΠΎΠΉ TARGET
:
$ export _mytarget_CFLAGS="-O3" \
_mytarget_CFLAGS_DEFINES="-D_DEFAULT_SOURCE" \
_mytarget_LDFLAGS="-lncursesw" \
_mytarget_CC="clang" \
_mytarget_STD="gnu99"
$ TARGET=mytarget make info
telegram-bot: bin: bin, objects: obj, sources: src
Compiling for target mytarget
Target special CFLAGS: -O3
Target special LDFLAGS: -lncursesw
Target special defines: -D_DEFAULT_SOURCE
Using C standard gnu99 via clang
Default log level: -Wall -Wextra -pedantic -Wpedantic
Default defines: -Isrc/ -D _DEFAULT_SOURCE
Threads policy:
* note: for use threads set USE_THREADS=1
Full CFLAGS: -std=gnu99 -Wall -Wextra -pedantic -Wpedantic -Isrc/ -D _DEFAULT_SOURCE -O3 -D_DEFAULT_SOURCE
Full LDFLAGS: -lcurl -ljson-c -lncursesw
ΠΠΎΡΠ»Π΅ ΡΠ±ΠΎΡΠΊΠΈ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ ΡΠ°ΠΉΠ» bin/telegram-bot
.
$ echo -n "12345:telegram_token" > .telegram_token
$ bin/telegram-bot
[OK] Found token for user 12345 ends for β¦oken
[LOGGED IN] As @examplebot
ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΡΡΠ΅Π΄Ρ:
TOKEN
ΡΠΎΠΊΠ΅Π½ Π±ΠΎΡΠ°. ΠΡΠ΄Π΅Ρ ΠΈΠΌΠ΅ΡΡ ΠΏΡΠΈΠΎΡΠΈΡΠ΅Ρ Π²ΡΡΠ΅, ΡΠ΅ΠΌ./.telegram_token
Π‘ΠΌΠΎΡΡΠΈΡΠ΅ src/include/%s.h
.
ΠΠΎΠΌΠ°Π½Π΄Ρ ΡΠ°Π·Π΄Π΅Π»Π΅Π½Ρ ΠΏΠΎ ΠΌΠΎΠ΄ΡΠ»ΡΠΌ, Π½Π°Ρ
ΠΎΠ΄ΡΡΠΈΠΌΡΡ Π² src/bot.modules/module.c
. ΠΠΎΠ΄ΡΠ»ΠΈ
Π½Π΅ ΡΡΠ΅Π±ΡΡΡ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΡΡ
ΡΠ°ΠΉΠ»ΠΎΠ².
ΠΡΠΈΠΌΠ΅Ρ ΠΌΠΎΠ΄ΡΠ»Ρ:
#include <json-c/json.h>
#include "../include/botcommands.h"
#include "../include/telegram.h"
/* ΡΠΈΠ³Π½Π°ΡΡΡΠ° ΡΡΠ½ΠΊΡΠΈΠΈ Π½Π° Π»ΡΠ±ΠΎΠ΅ ΡΠΎΠ±ΡΡΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½Π° Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ
ΠΊΠ°ΠΊ void (json_object*) */
void
cmdimpl_start(json_object *event) {
const char* chat_id;
/* chat_id ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ ΡΠ΅ΡΠ΅Π· json-c */
chat_id = json_object_get_string(
/* Π½ΠΈΠΆΠ΅ ΡΡΠ½ΠΊΡΠΈΡ ΠΏΡΠΎΡΡΠΎ Π·Π°ΠΌΠ΅Π½ΡΠ΅Ρ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΠ΅ json_object_object_get(...) */
tg_json_getpathobject(event, "chat", "id", 0)
);
tg_request("sendMessage",
topt_new("chat_id", chat_id,
topt_new("text", "ΠΠΎΠΉ Π°Π²ΡΠΎΡ Π΄Π΅Π³Π΅Π½Π΅ΡΠ°Ρ! https://github.com/Amchik", 0)));
}
/* ΡΠ΅Π³ΠΈΡΡΡΠΈΡΡΠ΅ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρ */
TelegramEvent cmdstart = TelegramEvent$command("start", cmdimpl_start);
/* ΠΈΠ»ΠΈ ΡΠ°ΠΊ */
TelegramEvent eventcmdstart = TelegramEvent$new("start", TGCB_COMMAND, cmdimpl_start);