Amchik / telegram-bot

πŸ€– ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ Ρ‚Π΅Π»Π΅Π³Ρ€Π°ΠΌ Π±ΠΎΡ‚ Π½Π° си.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

telegram-bot

ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ Ρ‚Π΅Π»Π΅Π³Ρ€Π°ΠΌ Π±ΠΎΡ‚, написанный Π½Π° си.

Π‘Π±ΠΎΡ€ΠΊΠ° ΠΈ запуск

Зависимости

Для компиляции Π»ΡƒΡ‡ΡˆΠ΅ всСго ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ компилятор clang. Π’Π°ΠΊ ΠΆΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ gcc.

Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ:

  • json-c для парсинга JSON
  • libcurl для запросов ΠΊ 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);

About

πŸ€– ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ Ρ‚Π΅Π»Π΅Π³Ρ€Π°ΠΌ Π±ΠΎΡ‚ Π½Π° си.


Languages

Language:C 86.8%Language:Makefile 13.2%