ะ ์ฐ๋ฆฌ๋ ๋ด์ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ์์๋๊ณ , ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ์ด๊ธฐํํ์ต๋๋ค. Bot ๊ทธ๊ฒ์ ์ด์ฉํ์ฌ ๋ฉ์์ง๋ฅผ ๋ณด๋ด๋ ๋ฐฉ๋ฒ์ ์ต์ํด์ก์ต๋๋ค.
์ด ๊ธฐ์ฌ์์๋ ์ด ์ฃผ์ ๋ฅผ ๊ณ์ํ๋ฏ๋ก ์ฝ์ ํ์๋ง ์ด ๊ธฐ์ฌ๋ฅผ ์ฝ๊ธฐ ์์ํ๋ ๊ฒ์ด ์ข์ต๋๋ค. .
์ด๋ฒ์๋ ๋ด์ ๋ถํ์ํค๊ณ ๋ช
๋ น ์ง์์ ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ๊ณผ ํด๋์ค์ ๋ํด ์์ ๋ณด๊ฒ ์ต๋๋ค. Updater.
๊ธฐ์ฌ๊ฐ ์งํ๋๋ ๋์ ์ฐ๋ฆฌ๋ ๋ช ๊ฐ์ง ๊ฐ๋จํ ๋ด์ ์์ฑํ ๊ฒ์ด๋ฉฐ, ํ์๋ ์ฃผ์ด์ง ๋ ์ง์ ๊ตญ๊ฐ ์ฝ๋๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์์ฐ ์ผ์ ์ ๋ฐ๋ผ ํน์ ๊ตญ๊ฐ์ ํ๋ฃจ๊ฐ ์ฃผ๋ง์ธ์ง ๊ทผ๋ฌด์ผ์ธ์ง ๊ฒฐ์ ํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ด์ ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ์ด ๊ธฐ์ฌ์ ๋ชฉ์ ์ ํจํค์ง ์ธํฐํ์ด์ค์ ์ต์ํด์ง๋ ๊ฒ์
๋๋ค. telegram.bot ์์ ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด.

"R๋ก ํ ๋ ๊ทธ๋จ ๋ด ์์ฑ" ์๋ฆฌ์ฆ์ ๋ชจ๋ ๊ธฐ์ฌ
๋ด์ฉ
๋ฐ์ดํฐ ๋ถ์์ ๊ด์ฌ์ด ์๋ค๋ฉด ์ ๊ธ์๋ ๊ด์ฌ์ด ์์ผ์ค ๊ฒ๋๋ค. ะธ ์ฑ๋. ๋๋ถ๋ถ์ ์ฝํ ์ธ ๋ R ์ธ์ด์ ์ ๋ ํฉ๋๋ค.
์ ๋ฐ์ดํฐ ํด๋์ค
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.

์ด์ ์ฐ๋ฆฌ ๋ด์ ๋ช
๋ น์ ์ดํดํฉ๋๋ค. /hi, ๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ์๊ฒ ์ธ์ฌํ๋ ๋ฐฉ๋ฒ์ ์๊ณ ์์ต๋๋ค.
์ด๋ฌํ ๊ฐ๋จํ ๋ด์ ๊ตฌ์ถํ๋ ๊ณผ์ ์ ๊ฐ๋ต์ ์ผ๋ก ํํํ๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.

- ํด๋์ค์ ์ธ์คํด์ค ๋ง๋ค๊ธฐ
Updater; - ์ฐ๋ฆฌ๋ ๋ฉ์๋๋ฅผ ์์ฑํฉ๋๋ค. ์ฐ๋ฆฌ ๋ด์ด ์ํํ ๊ธฐ๋ฅ. ์ฝ๋ ์์ ์์ ์ด๊ฒ์ ํจ์์
๋๋ค.
say_hello(). ๋ด ๋ฉ์๋๋ก ์ฌ์ฉํ ํจ์์๋ ๋ ๊ฐ์ง ํ์ ์ธ์๊ฐ ์์ด์ผ ํฉ๋๋ค. ํฌ๊ตฌ ะธ ์ต์ ์ ๋ณด, ๊ทธ๋ฆฌ๊ณ ํ๋๋ ์ ํ ์ฌํญ์ ๋๋ค - ์ธ์. ๋ ผ์ ํฌ๊ตฌ, ์ด๊ฒ์ ๊ทํ์ ๋ด์ ๋๋ค. ๋์์ ๋ฐ์ ๋ฉ์์ง์ ๋ต์ฅํ๊ฑฐ๋, ๋ฉ์์ง๋ฅผ ๋ณด๋ด๊ฑฐ๋, ๋ด์์ ์ฌ์ฉํ ์ ์๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ ผ์ ์ต์ ์ ๋ณด ์ด๋ ๋ด์ด ์ฌ์ฉ์๋ก๋ถํฐ ๋ฐ์ ๋ด์ฉ์ ๋๋ค. ์ค์ ๋ก ์ฒซ ๋ฒ์งธ ๊ธฐ์ฌ์์ ๋ค์ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์ฌ ๋ฐ์ ๋ด์ฉ์ ๋๋ค.getUpdates(). ๋ ผ์ ์ธ์ ๋ช ๋ น๊ณผ ํจ๊ป ์ฌ์ฉ์๊ฐ ๋ณด๋ธ ์ถ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค. ์ ์ ํ์ ์ด ์ฃผ์ ๋ก ๋์์ค๊ฒ ์ต๋๋ค. - ์ฐ๋ฆฌ๋ ํธ๋ค๋ฌ๋ฅผ ์์ฑํฉ๋๋ค. ์ผ๋ถ ์ฌ์ฉ์ ์์
์ ์ด์ ๋จ๊ณ์์ ์์ฑ๋ ๋ฉ์๋์ ์ฐ๊ฒฐํฉ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ํธ๋ค๋ฌ๋ ์ผ๋ถ ๋ด ๊ธฐ๋ฅ์ ํธ์ถํ๋ ์ด๋ฒคํธ์ธ ํธ๋ฆฌ๊ฑฐ์
๋๋ค. ์ด ์์์๋ ์ด๋ฌํ ํธ๋ฆฌ๊ฑฐ๊ฐ ๋ช
๋ น์ ๋ณด๋
๋๋ค.
/hi์ด๋ฉฐ ํ์์ ๊ตฌํํฉ๋๋ค.hi_hendler <- CommandHandler('hi', say_hello). ์ฒซ ๋ฒ์งธ ํจ์ ์ธ์CommandHandler()์ฐ๋ฆฌ์ ๊ฒฝ์ฐ์๋ ๋ช ๋ น์ ์ง์ ํ ์ ์์ต๋๋ค.hi, ๋ด์ด ์๋ตํฉ๋๋ค. ๋ ๋ฒ์งธ ์ธ์๋ฅผ ์ฌ์ฉํ๋ฉด ๋ด ๋ฉ์๋๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ํด๋น ๋ฉ์๋๋ฅผ ํธ์ถํฉ๋๋ค.say_hello, ์ฌ์ฉ์๊ฐ ์ฒซ ๋ฒ์งธ ์ธ์์ ์ง์ ๋ ๋ช ๋ น์ ํธ์ถํ๋ฉด ์คํ๋ฉ๋๋ค. - ๋ค์์ผ๋ก ์์ฑ๋ ํธ๋ค๋ฌ๋ฅผ ํด๋์ค ์ธ์คํด์ค์ ๋์คํจ์ฒ์ ์ถ๊ฐํฉ๋๋ค.
Updater. ์ฌ๋ฌ ๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ํธ๋ค๋ฌ๋ฅผ ์ถ๊ฐํ ์ ์์ต๋๋ค. ์์ ์์์๋ ๊ธฐํธ๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ฅ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์ต๋๋ค.+์ฆ,updater <- updater + hi_hendler. ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๋์ผํ ์์ ์ ์ํํ ์ ์์ต๋๋ค.add_handler(), ์ด๋ ํด๋์ค์ ์ํฉ๋๋ค.Dispatcher, ๋ค์๊ณผ ๊ฐ์ด ์ด ๋ฐฉ๋ฒ์ ์ฐพ์ ์ ์์ต๋๋ค.updater$dispatcher$add_handler(); - ๋ช
๋ น์ ์ฌ์ฉํ์ฌ ๋ด์ ์์ํ์ญ์์ค.
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'์ ๋ด์ ์์ฑํ ๋ ๋ฐ์ ์ค์ ํ ํฐ์ผ๋ก ๋ฐ๊พผ ํ ์์ ์ฝ๋ ์์ ๋ฅผ ์คํํ์ธ์. ๋ด ์๋ฒ์ง (์ ๋ ๋ด์ ๋ง๋๋ ๊ฒ์ ๋ํด ์ด์ผ๊ธฐํ์ต๋๋ค. ).
์ด์ ์์ ๋์ด๋ ์ธ์ฌ๋ง์ด ํฌํจ๋ ์ฌ๋ฌ ๋ฉ์์ง๋ฅผ ๋ด์ ๋ณด๋ด ๋ณด๊ฒ ์ต๋๋ค.

๊ทธ๋์ ์ฐ์ ์ฐ๋ฆฌ๋ ๋ด์๊ฒ ์ธ์ฌํ๋ ๊ฒ๋ฟ๋ง ์๋๋ผ ์ธ์ฌ์ ์๋ตํ๋ ๊ฒ๋ ๊ฐ๋ฅด์ณค์ต๋๋ค. ์ฐ๋ฆฌ๋ ์ธ์๋ฅผ ์ฌ์ฉํ์ฌ ์ด ์์
์ ์ํํ์ต๋๋ค. 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๋ฅผ ์ฌ์ฉํฉ๋๋ค. .
์ฝ๋ 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์ธ ํ์ผ์ ๋ด ์ฝ๋๋ฅผ ์ ์ฅํฉ๋๋ค. RStudio์์ ์์ ํ ๋ ๋ฉ๋ด๋ฅผ ํตํด ์ํ๋ฉ๋๋ค. ์ ์ ๋ถ๋ชจ๋ก์์ ๊ทํ์ ์ ํฉ์ฑ์ ๊ฒฐ์ ํ๊ธฐ ์ํด ๋ฏธ๊ตญ ์ด๋ฏผ๊ตญ์, ํ ๋ค๋ฅธ ์ด๋ฆ์ผ๋ก ์ ์ฅ.
- R ์ธ์ด๋ฅผ ์ค์นํ ํด๋์ ์๋ bin ํด๋์ ๊ฒฝ๋ก๋ฅผ Path ๋ณ์์ ์ถ๊ฐํฉ๋๋ค. .
- ํ ์ค์ ์ฐ๋ ์ผ๋ฐ ํ
์คํธ ํ์ผ์ ๋ง๋ญ๋๋ค.
R CMD BATCH C:UsersAlseyDocumentsmy_bot.R... ๋์ ์ C:์ฌ์ฉ์AlseyDocumentsmy_bot.R ๋ด ์คํฌ๋ฆฝํธ์ ๊ฒฝ๋ก๋ฅผ ์์ฑํ์ธ์. ๋์์, ๋์ค์ ํค๋ฆด ๋ฌธ์๋ ๊ณต๋ฐฑ์ด ์์ด์ผ ํ๋ค๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ์ด๋ก ์ธํด ๋ด์ ์คํํ ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. ์ ์ฅํ๊ณ ํ์ฅ์๋ฅผ ๋ค์์ผ๋ก ๋ฐ๊พธ์ญ์์ค. TXT ์ ๋ฐ์ฅ. - ์์
์ค์ผ์ค๋ฌ ์ด๊ธฐ Windows์ด ์์
์ ์ํํ๋ ๋ฐฉ๋ฒ์ ์ฌ๋ฌ ๊ฐ์ง๊ฐ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์๋ฌด ํด๋๋ ์ด๊ณ ์ฃผ์๋ฅผ ์
๋ ฅํ๋ฉด ๋ฉ๋๋ค.
%windir%system32taskschd.msc /s. ๋ค๋ฅธ ์์ ๋ฐฉ๋ฒ์ ์ฐพ์ ์ ์์ต๋๋ค . - ์ค์ผ์ค๋ฌ์ ์ค๋ฅธ์ชฝ ์๋จ ๋ฉ๋ด์์ "์์ ๋ง๋ค๊ธฐ..."๋ฅผ ํด๋ฆญํ์ธ์.
- "์ผ๋ฐ" ํญ์์ ์์ ์ ์ฌ์ฉ์ ์ ์ ์ด๋ฆ์ ์ง์ ํ๊ณ ์ค์์น๋ฅผ "๋ชจ๋ ์ฌ์ฉ์์ ๋ํด ์คํ" ์ํ๋ก ์ ํํฉ๋๋ค.
- "์์ " ํญ์ผ๋ก ์ด๋ํ์ฌ "๋ง๋ค๊ธฐ"๋ฅผ ํด๋ฆญํ์ธ์. "ํ๋ก๊ทธ๋จ ๋๋ ์คํฌ๋ฆฝํธ" ํ๋์์ "์ฐพ์๋ณด๊ธฐ"๋ฅผ ํด๋ฆญํ๊ณ ๋ ๋ฒ์งธ ๋จ๊ณ์์ ์์ฑ๋ ํ๋ก๊ทธ๋จ์ ์ฐพ์ต๋๋ค. ๋ฐ์ฅ ํ์ผ์ ์ ํํ๊ณ ํ์ธ์ ํด๋ฆญํ์ธ์.
- ํ์ธ์ ํด๋ฆญํ๊ณ ํ์ํ ๊ฒฝ์ฐ ์ด์ ์ฒด์ ๊ณ์ ์ ๋น๋ฐ๋ฒํธ๋ฅผ ์ ๋ ฅํ์ญ์์ค.
- ์ค์ผ์ค๋ฌ์์ ์์ฑ๋ ์์ ์ ์ฐพ์ ์ ํํ๊ณ ์ค๋ฅธ์ชฝ ํ๋จ์ ์๋ "์คํ" ๋ฒํผ์ ํด๋ฆญํ์ธ์.
์ฐ๋ฆฌ ๋ด์ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์คํ๋๋ฉฐ ์ฌ์ฉ์๊ฐ ์์ ์ ์ค์งํ๊ฑฐ๋ ์์ ์ด ์์๋ PC ๋๋ ์๋ฒ๋ฅผ ๋ ๋๊น์ง ์๋ํฉ๋๋ค.
๊ฒฐ๋ก
์ด ๊ธฐ์ฌ์์๋ ๋ฉ์์ง๋ฅผ ๋ณด๋ผ ์ ์์ ๋ฟ๋ง ์๋๋ผ ๋ค์ด์ค๋ ๋ฉ์์ง์ ๋ช ๋ น์ ์๋ตํ ์ ์๋ ๋ณธ๊ฒฉ์ ์ธ ๋ด์ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ์์๋์ต๋๋ค. ์ป์ ์ง์์ ์ด๋ฏธ ๋๋ถ๋ถ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ์ ์ถฉ๋ถํฉ๋๋ค.
๋ค์ ๊ธฐ์ฌ์์๋ ๋ณด๋ค ํธ๋ฆฌํ ์์ ์ ์ํด ๋ด์ ํค๋ณด๋๋ฅผ ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์ค๋ช ํฉ๋๋ค.
๋ด ๊ตฌ๋ ํ๊ธฐ ะธ ์ฑ๋.
์ถ์ฒ : habr.com
