R๋กœ ํ…”๋ ˆ๊ทธ๋žจ ๋ด‡ ์ž‘์„ฑ(2๋ถ€): ๋ด‡์— ๋ช…๋ น ์ง€์› ๋ฐ ๋ฉ”์‹œ์ง€ ํ•„ํ„ฐ ์ถ”๊ฐ€

ะ’ ์ด์ „ ๊ฐ„ํ–‰๋ฌผ ์šฐ๋ฆฌ๋Š” ๋ด‡์„ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ƒˆ๊ณ , ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ดˆ๊ธฐํ™”ํ–ˆ์Šต๋‹ˆ๋‹ค. Bot ๊ทธ๊ฒƒ์„ ์ด์šฉํ•˜์—ฌ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด๋Š” ๋ฐฉ๋ฒ•์— ์ต์ˆ™ํ•ด์กŒ์Šต๋‹ˆ๋‹ค.

์ด ๊ธฐ์‚ฌ์—์„œ๋Š” ์ด ์ฃผ์ œ๋ฅผ ๊ณ„์†ํ•˜๋ฏ€๋กœ ์ฝ์€ ํ›„์—๋งŒ ์ด ๊ธฐ์‚ฌ๋ฅผ ์ฝ๊ธฐ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ๋ถ€๋ถ„.

์ด๋ฒˆ์—๋Š” ๋ด‡์„ ๋ถ€ํ™œ์‹œํ‚ค๊ณ  ๋ช…๋ น ์ง€์›์„ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ ํด๋ž˜์Šค์— ๋Œ€ํ•ด ์•Œ์•„ ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. Updater.

๊ธฐ์‚ฌ๊ฐ€ ์ง„ํ–‰๋˜๋Š” ๋™์•ˆ ์šฐ๋ฆฌ๋Š” ๋ช‡ ๊ฐ€์ง€ ๊ฐ„๋‹จํ•œ ๋ด‡์„ ์ž‘์„ฑํ•  ๊ฒƒ์ด๋ฉฐ, ํ›„์ž๋Š” ์ฃผ์–ด์ง„ ๋‚ ์งœ์™€ ๊ตญ๊ฐ€ ์ฝ”๋“œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ƒ์‚ฐ ์ผ์ •์— ๋”ฐ๋ผ ํŠน์ • ๊ตญ๊ฐ€์˜ ํ•˜๋ฃจ๊ฐ€ ์ฃผ๋ง์ธ์ง€ ๊ทผ๋ฌด์ผ์ธ์ง€ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด์ „๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ด ๊ธฐ์‚ฌ์˜ ๋ชฉ์ ์€ ํŒจํ‚ค์ง€ ์ธํ„ฐํŽ˜์ด์Šค์— ์ต์ˆ™ํ•ด์ง€๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. telegram.bot ์ž์‹ ์˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด.

R๋กœ ํ…”๋ ˆ๊ทธ๋žจ ๋ด‡ ์ž‘์„ฑ(2๋ถ€): ๋ด‡์— ๋ช…๋ น ์ง€์› ๋ฐ ๋ฉ”์‹œ์ง€ ํ•„ํ„ฐ ์ถ”๊ฐ€

"R๋กœ ํ…”๋ ˆ๊ทธ๋žจ ๋ด‡ ์ž‘์„ฑ" ์‹œ๋ฆฌ์ฆˆ์˜ ๋ชจ๋“  ๊ธฐ์‚ฌ

  1. ์šฐ๋ฆฌ๋Š” ๋ด‡์„ ๋งŒ๋“ค๊ณ  ๊ทธ๊ฒƒ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ…”๋ ˆ๊ทธ๋žจ์œผ๋กœ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋ƒ…๋‹ˆ๋‹ค.
  2. ๋ด‡์— ๋ช…๋ น ์ง€์› ๋ฐ ๋ฉ”์‹œ์ง€ ํ•„ํ„ฐ ์ถ”๊ฐ€

๋‚ด์šฉ

๋ฐ์ดํ„ฐ ๋ถ„์„์— ๊ด€์‹ฌ์ด ์žˆ๋‹ค๋ฉด ์ œ ๊ธ€์—๋„ ๊ด€์‹ฌ์ด ์žˆ์œผ์‹ค ๊ฒ๋‹ˆ๋‹ค. ์ „๋ณด ะธ ์œ ํŠœ๋ธŒ ์ฑ„๋„. ๋Œ€๋ถ€๋ถ„์˜ ์ฝ˜ํ…์ธ ๋Š” R ์–ธ์–ด์— ์ „๋…ํ•ฉ๋‹ˆ๋‹ค.

  1. ์—…๋ฐ์ดํ„ฐ ํด๋ž˜์Šค
  2. ํ•ธ๋“ค๋Ÿฌ - ํ•ธ๋“ค๋Ÿฌ
  3. ๋ด‡, ๋ช…๋ น ์ฒ˜๋ฆฌ๊ธฐ์— ์ฒซ ๋ฒˆ์งธ ๋ช…๋ น์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
  4. ๋ฌธ์ž ๋ฉ”์‹œ์ง€ ํ”„๋กœ์„ธ์„œ ๋ฐ ํ•„ํ„ฐ
  5. ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์žˆ๋Š” ๋ช…๋ น ์ถ”๊ฐ€
  6. ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ๋ด‡ ์‹คํ–‰
  7. ๊ฒฐ๋ก 

์—…๋ฐ์ดํ„ฐ ํด๋ž˜์Šค

Updater ํ…”๋ ˆ๊ทธ๋žจ ๋ด‡์„ ๋ณด๋‹ค ์‰ฝ๊ฒŒ โ€‹โ€‹๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” ํด๋ž˜์Šค์ด๋ฉฐ ๋‚ด๋ถ€์ ์œผ๋กœ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. Dispetcher. ์ˆ˜์—… ๊ณผ์ œ Updater ๋ด‡์œผ๋กœ๋ถ€ํ„ฐ ์—…๋ฐ์ดํŠธ๋ฅผ ์ˆ˜์‹ ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค(์ด์ „ ๊ธฐ์‚ฌ์—์„œ๋Š” ์ด ๋ชฉ์ ์œผ๋กœ ์ด ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค). getUpdates()), ์ด๋ฅผ ๋‹ค์Œ์œผ๋กœ ๋” ์ „์†กํ•ฉ๋‹ˆ๋‹ค. Dispetcher.

์ฐจ๋ก€๋กœ Dispetcher ๋‹น์‹ ์ด ๋งŒ๋“  ํ•ธ๋“ค๋Ÿฌ๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ํด๋ž˜์Šค ๊ฐ์ฒด Handler.

ํ•ธ๋“ค๋Ÿฌ - ํ•ธ๋“ค๋Ÿฌ

ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด Dispetcher ๋‹ค์–‘ํ•œ ์ด๋ฒคํŠธ์— ๋Œ€ํ•œ ๋ด‡์˜ ๋ฐ˜์‘. ์ด ๊ธ€์„ ์“ฐ๋Š” ์‹œ์ ์—๋Š” telegram.bot ๋‹ค์Œ ์œ ํ˜•์˜ ํ•ธ๋“ค๋Ÿฌ๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

  • MessageHandler โ€” ๋ฉ”์‹œ์ง€ ํ•ธ๋“ค๋Ÿฌ
  • CommandHandler โ€” ๋ช…๋ น ํ•ธ๋“ค๋Ÿฌ
  • CallbackQueryHandler โ€” ์ธ๋ผ์ธ์—์„œ ์ „์†ก๋œ ํ‚ค๋ณด๋“œ์šฉ ๋ฐ์ดํ„ฐ ํ•ธ๋“ค๋Ÿฌ
  • ErrorHandler โ€” ๋ด‡์—์„œ ์—…๋ฐ์ดํŠธ๋ฅผ ์š”์ฒญํ•  ๋•Œ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ๊ธฐ

๋ด‡, ๋ช…๋ น ์ฒ˜๋ฆฌ๊ธฐ์— ์ฒซ ๋ฒˆ์งธ ๋ช…๋ น์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

์ด์ „์— ๋ด‡์„ ์‚ฌ์šฉํ•ด ๋ณธ ์ ์ด ์—†๊ณ  ๋ช…๋ น์ด ๋ฌด์—‡์ธ์ง€ ๋ชจ๋ฅด๋Š” ๊ฒฝ์šฐ ์Šฌ๋ž˜์‹œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ด‡์— ๋Œ€ํ•œ ๋ช…๋ น์„ ์ „์†กํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. / ์ ‘๋‘์‚ฌ๋กœ.

๊ฐ„๋‹จํ•œ ๋ช…๋ น๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๋ด‡์—๊ฒŒ ๋ช…๋ น์— ๋”ฐ๋ผ ์ธ์‚ฌํ•˜๋„๋ก ๊ฐ€๋ฅด์น˜์ž /hi.

์ฝ”๋“œ 1: ๋ด‡์—๊ฒŒ ์ธ์‚ฌํ•˜๋„๋ก ๊ฐ€๋ฅด์น˜๊ธฐ

library(telegram.bot)

# ัะพะทะดะฐั‘ะผ ัะบะทะตะผะฟะปัั€ ะบะปะฐััะฐ Updater
updater <- Updater('ะขะžะšะ•ะ ะ’ะะจะ•ะ“ะž ะ‘ะžะขะ')

# ะŸะธัˆะตะผ ะผะตั‚ะพะด ะดะปั ะฟั€ะธะฒะตั‚ัะฒะธั
say_hello <- function(bot, update) {

  # ะ˜ะผั ะฟะพะปัŒะทะพะฒะฐั‚ะตะปั ั ะบะพั‚ะพั€ั‹ะผ ะฝะฐะดะพ ะฟะพะทะดะฐั€ะพะฒะฐั‚ัŒัั
  user_name <- update$message$from$first_name

  # ะžั‚ะฟั€ะฐะฒะบะฐ ะฟั€ะธะฒะตั‚ัั‚ะฒะตะฝะฝะพะณะพ ัะพะพะฑั‰ะตะฝะธั
  bot$sendMessage(update$message$chat_id, 
                  text = paste0("ะœะพั‘ ะฟะพั‡ั‚ะตะฝะธะต, ", user_name, "!"), 
                  parse_mode = "Markdown")

}

# ัะพะทะดะฐั‘ะผ ะพะฑั€ะฐะฑะพั‚ั‡ะธะบ 
hi_hendler <- CommandHandler('hi', say_hello)

# ะดะพะฑะฐะปัะตะผ ะพะฑั€ะฐะฑะพั‚ั‡ะธะบ ะฒ ะดะธัะฟะตั‚ั‡ะตั€
updater <- updater + hi_hendler

# ะทะฐะฟัƒัะบะฐะตะผ ะฑะพั‚ะฐ
updater$start_polling()

'YOUR BOT TOKEN'์„ ๋ด‡์„ ์ƒ์„ฑํ•  ๋•Œ ๋ฐ›์€ ์‹ค์ œ ํ† ํฐ์œผ๋กœ ๋ฐ”๊พผ ํ›„ ์œ„์˜ ์ฝ”๋“œ ์˜ˆ์ œ๋ฅผ ์‹คํ–‰ํ•˜์„ธ์š”. ๋ด‡ ์•„๋ฒ„์ง€ (์ €๋Š” ๋ด‡์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ–ˆ์Šต๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ๊ธฐ์‚ฌ).

๋ฐฉ๋ฒ• start_polling() ํด๋ž˜์Šค Updater์ฝ”๋“œ ๋์— ์‚ฌ์šฉ๋˜๋Š” ๋Š” ๋ด‡์—์„œ ์—…๋ฐ์ดํŠธ๋ฅผ ์š”์ฒญํ•˜๊ณ  ์ฒ˜๋ฆฌํ•˜๋Š” ๋์—†๋Š” ๋ฃจํ”„๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

์ด์ œ Telegram์„ ์—ด๊ณ  ๋ด‡์— ์ฒซ ๋ฒˆ์งธ ๋ช…๋ น์„ ์ž‘์„ฑํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. /hi.

R๋กœ ํ…”๋ ˆ๊ทธ๋žจ ๋ด‡ ์ž‘์„ฑ(2๋ถ€): ๋ด‡์— ๋ช…๋ น ์ง€์› ๋ฐ ๋ฉ”์‹œ์ง€ ํ•„ํ„ฐ ์ถ”๊ฐ€

์ด์ œ ์šฐ๋ฆฌ ๋ด‡์€ ๋ช…๋ น์„ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค. /hi, ๊ทธ๋ฆฌ๊ณ  ์šฐ๋ฆฌ์—๊ฒŒ ์ธ์‚ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๊ฐ„๋‹จํ•œ ๋ด‡์„ ๊ตฌ์ถ•ํ•˜๋Š” ๊ณผ์ •์„ ๊ฐœ๋žต์ ์œผ๋กœ ํ‘œํ˜„ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

R๋กœ ํ…”๋ ˆ๊ทธ๋žจ ๋ด‡ ์ž‘์„ฑ(2๋ถ€): ๋ด‡์— ๋ช…๋ น ์ง€์› ๋ฐ ๋ฉ”์‹œ์ง€ ํ•„ํ„ฐ ์ถ”๊ฐ€

  1. ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค ๋งŒ๋“ค๊ธฐ Updater;
  2. ์šฐ๋ฆฌ๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ ๋ด‡์ด ์ˆ˜ํ–‰ํ•  ๊ธฐ๋Šฅ. ์ฝ”๋“œ ์˜ˆ์ œ์—์„œ ์ด๊ฒƒ์€ ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. say_hello(). ๋ด‡ ๋ฉ”์„œ๋“œ๋กœ ์‚ฌ์šฉํ•  ํ•จ์ˆ˜์—๋Š” ๋‘ ๊ฐ€์ง€ ํ•„์ˆ˜ ์ธ์ˆ˜๊ฐ€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํฌ๊ตฌ ะธ ์ตœ์‹  ์ •๋ณด, ๊ทธ๋ฆฌ๊ณ  ํ•˜๋‚˜๋Š” ์„ ํƒ ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค - ์ธ์ˆ˜. ๋…ผ์Ÿ ํฌ๊ตฌ, ์ด๊ฒƒ์€ ๊ท€ํ•˜์˜ ๋ด‡์ž…๋‹ˆ๋‹ค. ๋„์›€์„ ๋ฐ›์•„ ๋ฉ”์‹œ์ง€์— ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜, ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด๊ฑฐ๋‚˜, ๋ด‡์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋…ผ์Ÿ ์ตœ์‹  ์ •๋ณด ์ด๋Š” ๋ด‡์ด ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ๋ฐ›์€ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ์ฒซ ๋ฒˆ์งธ ๊ธฐ์‚ฌ์—์„œ ๋‹ค์Œ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ›์€ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค. getUpdates(). ๋…ผ์Ÿ ์ธ์ˆ˜ ๋ช…๋ น๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉ์ž๊ฐ€ ๋ณด๋‚ธ ์ถ”๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž ์‹œ ํ›„์— ์ด ์ฃผ์ œ๋กœ ๋Œ์•„์˜ค๊ฒ ์Šต๋‹ˆ๋‹ค.
  3. ์šฐ๋ฆฌ๋Š” ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ถ€ ์‚ฌ์šฉ์ž ์ž‘์—…์„ ์ด์ „ ๋‹จ๊ณ„์—์„œ ์ƒ์„ฑ๋œ ๋ฉ”์„œ๋“œ์™€ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ํ•ธ๋“ค๋Ÿฌ๋Š” ์ผ๋ถ€ ๋ด‡ ๊ธฐ๋Šฅ์„ ํ˜ธ์ถœํ•˜๋Š” ์ด๋ฒคํŠธ์ธ ํŠธ๋ฆฌ๊ฑฐ์ž…๋‹ˆ๋‹ค. ์ด ์˜ˆ์—์„œ๋Š” ์ด๋Ÿฌํ•œ ํŠธ๋ฆฌ๊ฑฐ๊ฐ€ ๋ช…๋ น์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค. /hi์ด๋ฉฐ ํŒ€์—์„œ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค. hi_hendler <- CommandHandler('hi', say_hello). ์ฒซ ๋ฒˆ์งธ ํ•จ์ˆ˜ ์ธ์ˆ˜ CommandHandler() ์šฐ๋ฆฌ์˜ ๊ฒฝ์šฐ์—๋Š” ๋ช…๋ น์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. hi, ๋ด‡์ด ์‘๋‹ตํ•ฉ๋‹ˆ๋‹ค. ๋‘ ๋ฒˆ์งธ ์ธ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ด‡ ๋ฉ”์„œ๋“œ๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. say_hello, ์‚ฌ์šฉ์ž๊ฐ€ ์ฒซ ๋ฒˆ์งธ ์ธ์ˆ˜์— ์ง€์ •๋œ ๋ช…๋ น์„ ํ˜ธ์ถœํ•˜๋ฉด ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
  4. ๋‹ค์Œ์œผ๋กœ ์ƒ์„ฑ๋œ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ํด๋ž˜์Šค ์ธ์Šคํ„ด์Šค์˜ ๋””์ŠคํŒจ์ฒ˜์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. Updater. ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์œ„์˜ ์˜ˆ์—์„œ๋Š” ๊ธฐํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. +์ฆ‰, updater <- updater + hi_hendler. ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋™์ผํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. add_handler(), ์ด๋Š” ํด๋ž˜์Šค์— ์†ํ•ฉ๋‹ˆ๋‹ค. Dispatcher, ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ด ๋ฐฉ๋ฒ•์„ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. updater$dispatcher$add_handler();
  5. ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ด‡์„ ์‹œ์ž‘ํ•˜์‹ญ์‹œ์˜ค. start_polling().

๋ฌธ์ž ๋ฉ”์‹œ์ง€ ํ”„๋กœ์„ธ์„œ ๋ฐ ํ•„ํ„ฐ

์šฐ๋ฆฌ๋Š” ๋ด‡์— ๋ช…๋ น์„ ๋ณด๋‚ด๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ƒˆ์ง€๋งŒ ๋•Œ๋กœ๋Š” ๋ช…๋ น๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ผ๋ถ€ ์ผ๋ฐ˜ ๋ฌธ์ž ๋ฉ”์‹œ์ง€์—๋„ ์‘๋‹ตํ•˜๊ธฐ ์œ„ํ•ด ๋ด‡์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ ค๋ฉด ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ๊ธฐ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฉ”์‹œ์ง€ ํ•ธ๋“ค๋Ÿฌ.

ํ‘œ์ค€ ๋ฉ”์‹œ์ง€ ํ•ธ๋“ค๋Ÿฌ ๋“ค์–ด์˜ค๋Š” ๋ชจ๋“  ๋ฉ”์‹œ์ง€์— ์ ˆ๋Œ€์ ์œผ๋กœ ์‘๋‹ตํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ๊ธฐ๋Š” ์ข…์ข… ํ•„ํ„ฐ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋ด‡์—๊ฒŒ ๋ช…๋ น์— ์˜ํ•ด์„œ๋งŒ ์ธ์‚ฌํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ธ์‚ฌํ•˜๋„๋ก ๊ฐ€๋ฅด์น˜์ž /hi, ๋˜ํ•œ ๋ด‡์— ๋ณด๋‚ธ ๋ฉ”์‹œ์ง€์— hello, hello, salute, hai, bonjour ๋‹จ์–ด ์ค‘ ํ•˜๋‚˜๊ฐ€ ๋‚˜ํƒ€๋‚  ๋•Œ๋งˆ๋‹ค ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

์ง€๊ธˆ์€ ์ƒˆ๋กœ์šด ๋ฉ”์†Œ๋“œ๋ฅผ ์ž‘์„ฑํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด... ์šฐ๋ฆฌ๋Š” ์ด๋ฏธ ๋ด‡์ด ์šฐ๋ฆฌ์—๊ฒŒ ์ธ์‚ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ํ•ด์•ผ ํ•  ์ผ์€ ํ•„์š”ํ•œ ํ•„ํ„ฐ์™€ ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ๊ธฐ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ๋ฟ์ž…๋‹ˆ๋‹ค.

์ฝ”๋“œ 2: ๋ฌธ์ž ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ๊ธฐ ๋ฐ ํ•„ํ„ฐ ์ถ”๊ฐ€

library(telegram.bot)

# ัะพะทะดะฐั‘ะผ ัะบะทะตะผะฟะปัั€ ะบะปะฐััะฐ Updater
updater <- Updater('ะขะžะšะ•ะ ะ’ะะจะ•ะ“ะž ะ‘ะžะขะ')

# ะŸะธัˆะตะผ ะผะตั‚ะพะด ะดะปั ะฟั€ะธะฒะตั‚ัะฒะธั
## ะบะพะผะฐะฝะดะฐ ะฟั€ะธะฒะตั‚ะฒะธั
say_hello <- function(bot, update) {

  # ะ˜ะผั ะฟะพะปัŒะทะพะฒะฐั‚ะตะปั ั ะบะพั‚ะพั€ั‹ะผ ะฝะฐะดะพ ะฟะพะทะดะฐั€ะพะฒะฐั‚ัŒัั
  user_name <- update$message$from$first_name

  # ะžั‚ะฟั€ะฐะฒะปัะตะผ ะฟั€ะธะฒะตั‚ัะฒะตะฝะฝะพะต ัะพะพะฑั‰ะตะฝะธะต
  bot$sendMessage(update$message$chat_id, 
                  text = paste0("ะœะพั‘ ะฟะพั‡ั‚ะตะฝะธะต, ", user_name, "!"),
                  parse_mode = "Markdown",
                  reply_to_message_id = update$message$message_id)

}

# ัะพะทะดะฐั‘ะผ ั„ะธะปัŒั‚ั€ั‹
MessageFilters$hi <- BaseFilter(function(message) {

  # ะฟั€ะพะฒะตั€ัะตะผ, ะฒัั‚ั€ะตั‡ะฐะตั‚ัั ะปะธ ะฒ ั‚ะตะบัั‚ะต ัะพะพะฑั‰ะตะฝะธั ัะปะพะฒะฐ: ะฟั€ะธะฒะตั‚, ะทะดั€ะฐะฒัั‚ะฒัƒะน, ัะฐะปัŽั‚, ั…ะฐะน, ะฑะพะฝะถัƒั€
  grepl(x           = message$text, 
        pattern     = 'ะฟั€ะธะฒะตั‚|ะทะดั€ะฐะฒัั‚ะฒัƒะน|ัะฐะปัŽั‚|ั…ะฐะน|ะฑะพะฝะถัƒั€',
        ignore.case = TRUE)
  }
)

# ัะพะทะดะฐั‘ะผ ะพะฑั€ะฐะฑะพั‚ั‡ะธะบ 
hi_hendler <- CommandHandler('hi', say_hello) # ะพะฑั€ะฐะฑะพั‚ั‡ะธะบ ะบะพะผะฐะฝะดั‹ hi
hi_txt_hnd <- MessageHandler(say_hello, filters = MessageFilters$hi)

# ะดะพะฑะฐะปัะตะผ ะพะฑั€ะฐะฑะพั‚ั‡ะธะบะธ ะฒ ะดะธัะฟะตั‚ั‡ะตั€
updater <- updater + 
             hi_hendler +
             hi_txt_hnd

# ะทะฐะฟัƒัะบะฐะตะผ ะฑะพั‚ะฐ
updater$start_polling()

'YOUR BOT TOKEN'์„ ๋ด‡์„ ์ƒ์„ฑํ•  ๋•Œ ๋ฐ›์€ ์‹ค์ œ ํ† ํฐ์œผ๋กœ ๋ฐ”๊พผ ํ›„ ์œ„์˜ ์ฝ”๋“œ ์˜ˆ์ œ๋ฅผ ์‹คํ–‰ํ•˜์„ธ์š”. ๋ด‡ ์•„๋ฒ„์ง€ (์ €๋Š” ๋ด‡์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ–ˆ์Šต๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ๊ธฐ์‚ฌ).

์ด์ œ ์•ž์„œ ๋‚˜์—ด๋œ ์ธ์‚ฌ๋ง์ด ํฌํ•จ๋œ ์—ฌ๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ ๋ด‡์— ๋ณด๋‚ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
R๋กœ ํ…”๋ ˆ๊ทธ๋žจ ๋ด‡ ์ž‘์„ฑ(2๋ถ€): ๋ด‡์— ๋ช…๋ น ์ง€์› ๋ฐ ๋ฉ”์‹œ์ง€ ํ•„ํ„ฐ ์ถ”๊ฐ€

๊ทธ๋ž˜์„œ ์šฐ์„  ์šฐ๋ฆฌ๋Š” ๋ด‡์—๊ฒŒ ์ธ์‚ฌํ•˜๋Š” ๊ฒƒ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ธ์‚ฌ์— ์‘๋‹ตํ•˜๋Š” ๊ฒƒ๋„ ๊ฐ€๋ฅด์ณค์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ธ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค. reply_to_message_id, ์ด๋Š” ๋ฉ”์†Œ๋“œ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. sendMessage(), ์‘๋‹ตํ•˜๋ ค๋Š” ๋ฉ”์‹œ์ง€์˜ ID๋ฅผ ์ „์†กํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฉ”์‹œ์ง€ ID๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. update$message$message_id.

ํ•˜์ง€๋งŒ ์šฐ๋ฆฌ๊ฐ€ ํ•œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์ผ์€ ๋‹ค์Œ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ด‡์— ํ•„ํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค. BaseFilter():

# ัะพะทะดะฐั‘ะผ ั„ะธะปัŒั‚ั€ั‹
MessageFilters$hi <- BaseFilter( 

  # ะฐะฝะพะฝะธะผะฝะฐั ั„ะธะปัŒั‚ั€ัƒัŽั‰ะฐั ั„ัƒะฝะบั†ะธั
  function(message) {

    # ะฟั€ะพะฒะตั€ัะตะผ, ะฒัั‚ั€ะตั‡ะฐะตั‚ัั ะปะธ ะฒ ั‚ะตะบัั‚ะต ัะพะพะฑั‰ะตะฝะธั ัะปะพะฒะฐ ะฟั€ะธะฒะตั‚ัั‚ะฒะธั
    grepl(x           = message$text, 
          pattern     = 'ะฟั€ะธะฒะตั‚|ะทะดั€ะฐะฒัั‚ะฒัƒะน|ัะฐะปัŽั‚|ั…ะฐะน|ะฑะพะฝะถัƒั€',
          ignore.case = TRUE)
  }

)

๋ˆˆ์น˜์ฑ„์…จ๊ฒ ์ง€๋งŒ, ๊ฐ์ฒด์— ํ•„ํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฉ”์‹œ์ง€ ํ•„ํ„ฐ, ์ฒ˜์Œ์—๋Š” ์ด๋ฏธ ์ž‘์€ ๊ธฐ์„ฑ ํ•„ํ„ฐ ์„ธํŠธ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ์˜ ์˜ˆ์—์„œ๋Š” ๊ฐ์ฒด์— ๋ฉ”์‹œ์ง€ ํ•„ํ„ฐ ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค hi, ์ด๊ฒƒ์€ ์ƒˆ๋กœ์šด ํ•„ํ„ฐ์ž…๋‹ˆ๋‹ค.

๊ธฐ๋Šฅ์—์„œ BaseFilter() ํ•„ํ„ฐ ๊ธฐ๋Šฅ์„ ์ „๋‹ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ํ•„ํ„ฐ๋Š” ๋ฉ”์‹œ์ง€ ์ธ์Šคํ„ด์Šค๋ฅผ ์ˆ˜์‹ ํ•˜๊ณ  ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜์ผ ๋ฟ์ž…๋‹ˆ๋‹ค. TRUE ๋˜๋Š” ๊ทธ๋ฆ‡๋œ. ์ด ์˜ˆ์—์„œ๋Š” ๊ธฐ๋ณธ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ„๋‹จํ•œ ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. grepl() ๋ฉ”์‹œ์ง€ ํ…์ŠคํŠธ๋ฅผ ํ™•์ธํ•˜๊ณ  ์ •๊ทœ์‹๊ณผ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ะฟั€ะธะฒะตั‚|ะทะดั€ะฐะฒัั‚ะฒัƒะน|ัะฐะปัŽั‚|ั…ะฐะน|ะฑะพะฝะถัƒั€ ๋ฐ˜ํ™˜ TRUE.

๋‹ค์Œ์œผ๋กœ ๋ฉ”์‹œ์ง€ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. hi_txt_hnd <- MessageHandler(say_hello, filters = MessageFilters$hi). ์ฒซ ๋ฒˆ์งธ ํ•จ์ˆ˜ ์ธ์ˆ˜ MessageHandler() ํ•ธ๋“ค๋Ÿฌ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋ฉ”์†Œ๋“œ์ด๊ณ , ๋‘ ๋ฒˆ์งธ ์ธ์ˆ˜๋Š” ํ•ธ๋“ค๋Ÿฌ๊ฐ€ ํ˜ธ์ถœ๋˜๋Š” ํ•„ํ„ฐ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ์˜ ๊ฒฝ์šฐ ์ด๊ฒƒ์€ ์šฐ๋ฆฌ๊ฐ€ ๋งŒ๋“  ํ•„ํ„ฐ์ž…๋‹ˆ๋‹ค. MessageFilters$hi.

๊ฒฐ๊ตญ ์šฐ๋ฆฌ๋Š” ์ƒ์„ฑ๋œ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ๋””์ŠคํŒจ์ฒ˜์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. hi_txt_hnd.

updater <- updater + 
             hi_hendler +
             hi_txt_hnd

์œ„์—์„œ ์“ด ๊ฒƒ์ฒ˜๋Ÿผ ํŒจํ‚ค์ง€์— telegram.bot ๊ทธ๋ฆฌ๊ณ  ๊ฐ์ฒด ๋ฉ”์‹œ์ง€ ํ•„ํ„ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋ณธ ์ œ๊ณต ํ•„ํ„ฐ ์„ธํŠธ๊ฐ€ ์ด๋ฏธ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋ชจ๋‘ โ€” ๋ชจ๋“  ๋ฉ”์‹œ์ง€
  • text โ€” ๋ฌธ์ž ๋ฉ”์‹œ์ง€
  • ๋ช…๋ น โ€” ๋ช…๋ น, ์ฆ‰ ๋‹ค์Œ์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ฉ”์‹œ์ง€ /
  • reply โ€” ๋‹ค๋ฅธ ๋ฉ”์‹œ์ง€์— ๋Œ€ํ•œ ๋‹ต์žฅ์ธ ๋ฉ”์‹œ์ง€
  • audio โ€” ์˜ค๋””์˜ค ํŒŒ์ผ์ด ํฌํ•จ๋œ ๋ฉ”์‹œ์ง€
  • document โ€” ๋ณด๋‚ธ ๋ฌธ์„œ๊ฐ€ ํฌํ•จ๋œ ๋ฉ”์‹œ์ง€
  • photo - ์ „์†ก๋œ ์ด๋ฏธ์ง€๊ฐ€ ํฌํ•จ๋œ ๋ฉ”์‹œ์ง€
  • ์Šคํ‹ฐ์ปค โ€” ๋ณด๋‚ธ ์Šคํ‹ฐ์ปค๊ฐ€ ํฌํ•จ๋œ ๋ฉ”์‹œ์ง€
  • video โ€” ์˜์ƒ์ด ํฌํ•จ๋œ ๋ฉ”์‹œ์ง€
  • ์Œ์„ฑ - ์Œ์„ฑ ๋ฉ”์‹œ์ง€
  • contact โ€” ์‚ฌ์šฉ์ž์˜ ์ „๋ณด ๋‚ด์šฉ์ด ํฌํ•จ๋œ ๋ฉ”์‹œ์ง€
  • location โ€” ์ง€๋ฆฌ์  ์œ„์น˜๊ฐ€ ํฌํ•จ๋œ ๋ฉ”์‹œ์ง€
  • ์žฅ์†Œ โ€” ์ „๋‹ฌ๋œ ๋ฉ”์‹œ์ง€
  • ๊ฒŒ์ž„ โ€” ๊ฒŒ์ž„

ํ•˜๋‚˜์˜ ํ•ธ๋“ค๋Ÿฌ์— ์ผ๋ถ€ ํ•„ํ„ฐ๋ฅผ ๊ฒฐํ•ฉํ•˜๋ ค๋ฉด ๊ธฐํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค. | - ๋…ผ๋ฆฌ์ ์œผ๋กœ ๋˜๋Š”, ๊ทธ๋ฆฌ๊ณ  ์„œ๋ช… & ๋…ผ๋ฆฌ์ ์œผ๋กœ ะ˜. ์˜ˆ๋ฅผ ๋“ค์–ด ๋ด‡์ด ๋น„๋””์˜ค, ์ด๋ฏธ์ง€ ๋˜๋Š” ๋ฌธ์„œ๋ฅผ ์ˆ˜์‹ ํ•  ๋•Œ ๋™์ผํ•œ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋„๋ก ํ•˜๋ ค๋ฉด ๋‹ค์Œ ์˜ˆ์ œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ๊ธฐ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

handler <- MessageHandler(callback, 
  MessageFilters$video | MessageFilters$photo | MessageFilters$document
)

๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์žˆ๋Š” ๋ช…๋ น ์ถ”๊ฐ€

์šฐ๋ฆฌ๋Š” ๋ช…๋ น์ด ๋ฌด์—‡์ธ์ง€, ๋ช…๋ น์„ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•, ๋ด‡์ด ์›ํ•˜๋Š” ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋„๋ก ๊ฐ•์ œํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ด๋ฏธ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์–ด๋–ค ๊ฒฝ์šฐ์—๋Š” ๋ช…๋ น ์ด๋ฆ„ ์™ธ์—๋„ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์ผ๋ถ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ์ฃผ์–ด์ง„ ๋‚ ์งœ์™€ ๊ตญ๊ฐ€๊ฐ€ ์ฃผ์–ด์ง€๋ฉด ์ƒ์‚ฐ ๋‹ฌ๋ ฅ์—์„œ ์š”์ผ ์œ ํ˜•์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ด‡์˜ ์˜ˆ์ž…๋‹ˆ๋‹ค.

์•„๋ž˜ ๋ด‡์€ ์ƒ์‚ฐ ๋‹ฌ๋ ฅ API๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. isdayoff.ru.

์ฝ”๋“œ 3: ๋‚ ์งœ ๋ฐ ๊ตญ๊ฐ€๋ณ„๋กœ ๋ณด๊ณ ํ•˜๋Š” ๋ด‡

library(telegram.bot)

# ัะพะทะดะฐั‘ะผ ัะบะทะตะผะฟะปัั€ ะบะปะฐััะฐ Updater
updater <- Updater('1165649194:AAFkDqIzQ6Wq5GV0YU7PmEZcv1gmWIFIB_8')

# ะŸะธัˆะตะผ ะผะตั‚ะพะด ะดะปั ะฟั€ะธะฒะตั‚ัะฒะธั
## ะบะพะผะฐะฝะดะฐ ะฟั€ะธะฒะตั‚ะฒะธั
check_date <- function(bot, update, args) {

  # ะฒั…ะพะดัั‰ะธะต ะดะฐะฝะฝั‹ะต
  day     <- args[1]  # ะดะฐั‚ะฐ
  country <- args[2]  # ัั‚ั€ะฐะฝะฐ

  # ะฟั€ะพะฒะตั€ะบะฐ ะฒะฒะตะดั‘ะฝะฝั‹ั… ะฟะฐั€ะฐะผะตั‚ั€ะพะฒ
  if ( !grepl('\d{4}-\d{2}-\d{2}', day) ) {

    # Send Custom Keyboard
    bot$sendMessage(update$message$chat_id, 
                    text = paste0(day, " - ะฝะตะบะพั€ั€ะตั‚ะบะฝะฐั ะดะฐั‚ะฐ, ะฒะฒะตะดะธั‚ะต ะดะฐั‚ัƒ ะฒ ั„ะพั€ะผะฐั‚ะต ะ“ะ“ะ“ะ“-ะœะœ-ะ”ะ”"),
                    parse_mode = "Markdown")

  } else {
    day <- as.Date(day)
    # ะฟะตั€ะตะฒะพะดะธะผ ะฒ ั„ะพั€ะผะฐั‚ POSIXtl
    y <- format(day, "%Y")
    m <- format(day, "%m")
    d <- format(day, "%d")

  }

  # ัั‚ั€ะฐะฝะฐ ะดะปั ะฟั€ะพะฒะตั€ะบะธ
  ## ะฟั€ะพะฒะตั€ัะตะผ ะทะฐะดะฐะฝะฐ ะปะธ ัั‚ั€ะฐะฝะฐ
  ## ะตัะปะธ ะฝะต ะทะฐะดะฐะฝะฐ ัƒัั‚ะฐะฝะฐะฒะปะธะฒะฐะตะผ ru
  if ( ! country %in% c('ru', 'ua', 'by', 'kz', 'us') ) {

    # Send Custom Keyboard
    bot$sendMessage(update$message$chat_id, 
                    text = paste0(country, " - ะฝะตะบะพั€ั€ะตั‚ะบั‚ะฝั‹ะน ะบะพะด ัั‚ั€ะฐะฝั‹, ะฒะพะทะผะพะถะฝะฝั‹ะต ะทะฝะฐั‡ะตะฝะธั: ru, by, kz, ua, us. ะ—ะฐะฟั€ะพัˆะตะฝั‹ ะดะฐะฝะฝั‹ะต ะฟะพ ะ ะพััะธะธ."),
                    parse_mode = "Markdown")

    country <- 'ru'

  }

  # ะทะฐะฟั€ะพั ะดะฐะฝะฝั‹ั… ะธะท API
  # ะบะพะผะฟะพะฝะพะฒะบะฐ HTTP ะทะฐะฟั€ะพัะฐ
  url <- paste0("https://isdayoff.ru/api/getdata?",
                "year=",  y, "&",
                "month=", m, "&",
                "day=",   d, "&",
                "cc=",    country, "&",
                "pre=1&",
                "covid=1")

  # ะฟะพะปัƒั‡ะฐะตะผ ะพั‚ะฒะตั‚
  res <- readLines(url)

  # ะธะฝั‚ั€ะตะฟั€ะตั‚ะฐั†ะธั ะพั‚ะฒะตั‚ะฐ
  out <- switch(res, 
                "0"   = "ะ ะฐะฑะพั‡ะธะน ะดะตะฝัŒ",
                "1"   = "ะะตั€ะฐะฑะพั‡ะธะน ะดะตะฝัŒ",
                "2"   = "ะกะพะบั€ะฐั‰ั‘ะฝะฝั‹ะน ั€ะฐะฑะพั‡ะธะน ะดะตะฝัŒ",
                "4"   = "covid-19",
                "100" = "ะžัˆะธะฑะบะฐ ะฒ ะดะฐั‚ะต",
                "101" = "ะ”ะฐะฝะฝั‹ะต ะฝะต ะฝะฐะนะดะตะฝั‹",
                "199" = "ะžัˆะธะฑะบะฐ ัะตั€ะฒะธัะฐ")

  # ะพั‚ะฟั€ะฐะฒะปัะตะผ ัะพะพะฑั‰ะตะฝะธะต
  bot$sendMessage(update$message$chat_id, 
                  text = paste0(day, " - ", out),
                  parse_mode = "Markdown")

}

# ัะพะทะดะฐั‘ะผ ะพะฑั€ะฐะฑะพั‚ั‡ะธะบ 
date_hendler <- CommandHandler('check_date', check_date, pass_args = TRUE)

# ะดะพะฑะฐะปัะตะผ ะพะฑั€ะฐะฑะพั‚ั‡ะธะบ ะฒ ะดะธัะฟะตั‚ั‡ะตั€
updater <- updater + date_hendler

# ะทะฐะฟัƒัะบะฐะตะผ ะฑะพั‚ะฐ
updater$start_polling()

'YOUR BOT TOKEN'์„ ๋ด‡์„ ์ƒ์„ฑํ•  ๋•Œ ๋ฐ›์€ ์‹ค์ œ ํ† ํฐ์œผ๋กœ ๋ฐ”๊พผ ํ›„ ์œ„์˜ ์ฝ”๋“œ ์˜ˆ์ œ๋ฅผ ์‹คํ–‰ํ•˜์„ธ์š”. ๋ด‡ ์•„๋ฒ„์ง€ (์ €๋Š” ๋ด‡์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ–ˆ์Šต๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ๊ธฐ์‚ฌ).

์šฐ๋ฆฌ๋Š” ๋ฌด๊ธฐ๊ณ ์— ๋‹จ ํ•˜๋‚˜์˜ ๋ฐฉ๋ฒ•๋งŒ ๊ฐ€์ง„ ๋ด‡์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. check_date, ์ด ๋ฉ”์†Œ๋“œ๋Š” ๋™์ผํ•œ ์ด๋ฆ„์˜ ๋ช…๋ น์— ์˜ํ•ด ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ด ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋ช…๋ น ์ด๋ฆ„ ์™ธ์—๋„ ๊ตญ๊ฐ€ ์ฝ”๋“œ์™€ ๋‚ ์งœ๋ผ๋Š” ๋‘ ๊ฐ€์ง€ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ž…๋ ฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์œผ๋กœ ๋ด‡์€ ์ง€์ •๋œ ๊ตญ๊ฐ€์˜ ํŠน์ • ๋‚ ์งœ๊ฐ€ ์ฃผ๋ง์ธ์ง€, ๋‹จ์ถ•์ผ์ธ์ง€, ๊ณต์‹ ์ƒ์‚ฐ ์ผ์ •์— ๋”ฐ๋ผ ๊ทผ๋ฌด์ผ์ธ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๊ฐ€ ์ƒ์„ฑํ•œ ๋ฉ”์†Œ๋“œ๊ฐ€ ๋ช…๋ น๊ณผ ํ•จ๊ป˜ ์ถ”๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํ—ˆ์šฉํ•˜๋„๋ก ํ•˜๋ ค๋ฉด ์ธ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค. pass_args = TRUE ๊ธฐ๋Šฅ์—์„œ CommandHandler(), ๋ฉ”์„œ๋“œ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ํ•„์ˆ˜ ์ธ์ˆ˜ ์™ธ์— ํฌ๊ตฌ, ์ตœ์‹  ์ •๋ณด ์„ ํƒ์ ์ธ ๊ฒƒ์„ ๋งŒ๋“œ์„ธ์š” - ์ธ์ˆ˜. ์ด๋Ÿฐ ๋ฐฉ์‹์œผ๋กœ ์ƒ์„ฑ๋œ ๋ฉ”์„œ๋“œ๋Š” ๋ช…๋ น ์ด๋ฆ„ ๋’ค์— ๋ด‡์— ์ „๋‹ฌํ•˜๋Š” ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„๋˜์–ด์•ผ ํ•˜๋ฉฐ ํ…์ŠคํŠธ ๋ฒกํ„ฐ๋กœ ๋ฉ”์„œ๋“œ์— ์ „์†ก๋ฉ๋‹ˆ๋‹ค.

๋ด‡์„ ์‹คํ–‰ํ•˜๊ณ  ํ…Œ์ŠคํŠธํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

R๋กœ ํ…”๋ ˆ๊ทธ๋žจ ๋ด‡ ์ž‘์„ฑ(2๋ถ€): ๋ด‡์— ๋ช…๋ น ์ง€์› ๋ฐ ๋ฉ”์‹œ์ง€ ํ•„ํ„ฐ ์ถ”๊ฐ€

๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ๋ด‡ ์‹คํ–‰

์™„๋ฃŒํ•ด์•ผ ํ•  ๋งˆ์ง€๋ง‰ ๋‹จ๊ณ„๋Š” ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ๋ด‡์„ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ํ•˜๋ ค๋ฉด ์•„๋ž˜์— ์„ค๋ช…๋œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋”ฐ๋ฅด์‹ญ์‹œ์˜ค.

  1. ํ™•์žฅ์ž๊ฐ€ R์ธ ํŒŒ์ผ์— ๋ด‡ ์ฝ”๋“œ๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. RStudio์—์„œ ์ž‘์—…ํ•  ๋•Œ ๋ฉ”๋‰ด๋ฅผ ํ†ตํ•ด ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. ์ž…์–‘ ๋ถ€๋ชจ๋กœ์„œ์˜ ๊ท€ํ•˜์˜ ์ ํ•ฉ์„ฑ์„ ๊ฒฐ์ •ํ•˜๊ธฐ ์œ„ํ•ด ๋ฏธ๊ตญ ์ด๋ฏผ๊ตญ์—, ํŒ€ ๋‹ค๋ฅธ ์ด๋ฆ„์œผ๋กœ ์ €์žฅ.
  2. R ์–ธ์–ด๋ฅผ ์„ค์น˜ํ•œ ํด๋”์— ์žˆ๋Š” bin ํด๋”์˜ ๊ฒฝ๋กœ๋ฅผ Path ๋ณ€์ˆ˜์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—.
  3. ํ•œ ์ค„์„ ์“ฐ๋Š” ์ผ๋ฐ˜ ํ…์ŠคํŠธ ํŒŒ์ผ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. R CMD BATCH C:UsersAlseyDocumentsmy_bot.R... ๋Œ€์‹ ์— C:์‚ฌ์šฉ์žAlseyDocumentsmy_bot.R ๋ด‡ ์Šคํฌ๋ฆฝํŠธ์˜ ๊ฒฝ๋กœ๋ฅผ ์ž‘์„ฑํ•˜์„ธ์š”. ๋™์‹œ์—, ๋„์ค‘์— ํ‚ค๋ฆด ๋ฌธ์ž๋‚˜ ๊ณต๋ฐฑ์ด ์—†์–ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ๋ด‡์„ ์‹คํ–‰ํ•  ๋•Œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ €์žฅํ•˜๊ณ  ํ™•์žฅ์ž๋ฅผ ๋‹ค์Œ์œผ๋กœ ๋ฐ”๊พธ์‹ญ์‹œ์˜ค. TXT ์— ๋ฐ•์ฅ.
  4. ์ž‘์—… ์Šค์ผ€์ค„๋Ÿฌ ์—ด๊ธฐ Windows์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์—ฌ๋Ÿฌ ๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์•„๋ฌด ํด๋”๋‚˜ ์—ด๊ณ  ์ฃผ์†Œ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. %windir%system32taskschd.msc /s. ๋‹ค๋ฅธ ์‹œ์ž‘ ๋ฐฉ๋ฒ•์„ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ์—ฌ๊ธฐ์—.
  5. ์Šค์ผ€์ค„๋Ÿฌ์˜ ์˜ค๋ฅธ์ชฝ ์ƒ๋‹จ ๋ฉ”๋‰ด์—์„œ "์ž‘์—… ๋งŒ๋“ค๊ธฐ..."๋ฅผ ํด๋ฆญํ•˜์„ธ์š”.
  6. "์ผ๋ฐ˜" ํƒญ์—์„œ ์ž‘์—…์— ์‚ฌ์šฉ์ž ์ •์˜ ์ด๋ฆ„์„ ์ง€์ •ํ•˜๊ณ  ์Šค์œ„์น˜๋ฅผ "๋ชจ๋“  ์‚ฌ์šฉ์ž์— ๋Œ€ํ•ด ์‹คํ–‰" ์ƒํƒœ๋กœ ์ „ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  7. "์ž‘์—…" ํƒญ์œผ๋กœ ์ด๋™ํ•˜์—ฌ "๋งŒ๋“ค๊ธฐ"๋ฅผ ํด๋ฆญํ•˜์„ธ์š”. "ํ”„๋กœ๊ทธ๋žจ ๋˜๋Š” ์Šคํฌ๋ฆฝํŠธ" ํ•„๋“œ์—์„œ "์ฐพ์•„๋ณด๊ธฐ"๋ฅผ ํด๋ฆญํ•˜๊ณ  ๋‘ ๋ฒˆ์งธ ๋‹จ๊ณ„์—์„œ ์ƒ์„ฑ๋œ ํ”„๋กœ๊ทธ๋žจ์„ ์ฐพ์Šต๋‹ˆ๋‹ค. ๋ฐ•์ฅ ํŒŒ์ผ์„ ์„ ํƒํ•˜๊ณ  ํ™•์ธ์„ ํด๋ฆญํ•˜์„ธ์š”.
  8. ํ™•์ธ์„ ํด๋ฆญํ•˜๊ณ  ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์šด์˜ ์ฒด์ œ ๊ณ„์ •์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•˜์‹ญ์‹œ์˜ค.
  9. ์Šค์ผ€์ค„๋Ÿฌ์—์„œ ์ƒ์„ฑ๋œ ์ž‘์—…์„ ์ฐพ์•„ ์„ ํƒํ•˜๊ณ  ์˜ค๋ฅธ์ชฝ ํ•˜๋‹จ์— ์žˆ๋Š” "์‹คํ–‰" ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜์„ธ์š”.

์šฐ๋ฆฌ ๋ด‡์€ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์‹คํ–‰๋˜๋ฉฐ ์‚ฌ์šฉ์ž๊ฐ€ ์ž‘์—…์„ ์ค‘์ง€ํ•˜๊ฑฐ๋‚˜ ์ž‘์—…์ด ์‹œ์ž‘๋œ PC ๋˜๋Š” ์„œ๋ฒ„๋ฅผ ๋Œ ๋•Œ๊นŒ์ง€ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

๊ฒฐ๋ก 

์ด ๊ธฐ์‚ฌ์—์„œ๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์„ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋“ค์–ด์˜ค๋Š” ๋ฉ”์‹œ์ง€์™€ ๋ช…๋ น์— ์‘๋‹ตํ•  ์ˆ˜ ์žˆ๋Š” ๋ณธ๊ฒฉ์ ์ธ ๋ด‡์„ ์ž‘์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ƒˆ์Šต๋‹ˆ๋‹ค. ์–ป์€ ์ง€์‹์€ ์ด๋ฏธ ๋Œ€๋ถ€๋ถ„์˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ์— ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ๊ธฐ์‚ฌ์—์„œ๋Š” ๋ณด๋‹ค ํŽธ๋ฆฌํ•œ ์ž‘์—…์„ ์œ„ํ•ด ๋ด‡์— ํ‚ค๋ณด๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

๋‚ด ๊ตฌ๋…ํ•˜๊ธฐ ์ „๋ณด ะธ ์œ ํŠœ๋ธŒ ์ฑ„๋„.

์ถœ์ฒ˜ : habr.com

DDoS ๋ณดํ˜ธ, VPS VDS ์„œ๋ฒ„๊ฐ€ ์žˆ๋Š” ์‚ฌ์ดํŠธ๋ฅผ ์œ„ํ•œ ์•ˆ์ •์ ์ธ ํ˜ธ์ŠคํŒ… ๊ตฌ์ž… ๐Ÿ”ฅ DDoS ๊ณต๊ฒฉ ๋ฐฉ์ง€ ๊ธฐ๋Šฅ์ด ํƒ‘์žฌ๋œ ์•ˆ์ •์ ์ธ ์›น์‚ฌ์ดํŠธ ํ˜ธ์ŠคํŒ…, VPS ๋ฐ VDS ์„œ๋ฒ„๋ฅผ ๊ตฌ๋งคํ•˜์„ธ์š” | ProHoster