R๋กœ ํ…”๋ ˆ๊ทธ๋žจ ๋ด‡ ์ž‘์„ฑ(1๋ถ€): ๋ด‡์„ ์ƒ์„ฑํ•˜๊ณ  ์ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ…”๋ ˆ๊ทธ๋žจ์œผ๋กœ ๋ฉ”์‹œ์ง€ ๋ณด๋‚ด๊ธฐ

Telegram ์ฒญ์ค‘์€ ๋งค์ผ ๊ธฐํ•˜ ๊ธ‰์ˆ˜์ ์œผ๋กœ ์ฆ๊ฐ€ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ์ด๋Š” ๋ฉ”์‹ ์ €์˜ ํŽธ๋ฆฌํ•จ, ์ฑ„๋„์˜ ์กด์žฌ, ์ฑ„ํŒ… ๋ฐ ๋ฌผ๋ก  ๋ด‡ ์ƒ์„ฑ ๊ธฐ๋Šฅ์œผ๋กœ ์ธํ•ด ์ด‰์ง„๋ฉ๋‹ˆ๋‹ค.

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

๊ธฐ๋ณธ์ ์œผ๋กœ ํ…”๋ ˆ๊ทธ๋žจ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ด‡์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ ์ „์†ก ๋˜๋Š” ์š”์ฒญ, ์„œ๋ฒ„์—์„œ ์ž‘์—… ์‹คํ–‰, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ •๋ณด ์ˆ˜์ง‘, ์ด๋ฉ”์ผ ๋ณด๋‚ด๊ธฐ ๋“ฑ ๋ชจ๋“  ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ž‘์—… ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ผ๋ จ์˜ ๊ธฐ์‚ฌ๋ฅผ ์“ธ ๊ณ„ํš์ž…๋‹ˆ๋‹ค. ํ…”๋ ˆ๊ทธ๋žจ ๋ด‡ API, ํ•„์š”์— ๋งž๊ฒŒ ๋ด‡์„ ์ž‘์„ฑํ•˜์„ธ์š”.

R๋กœ ํ…”๋ ˆ๊ทธ๋žจ ๋ด‡ ์ž‘์„ฑ(1๋ถ€): ๋ด‡์„ ์ƒ์„ฑํ•˜๊ณ  ์ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ…”๋ ˆ๊ทธ๋žจ์œผ๋กœ ๋ฉ”์‹œ์ง€ ๋ณด๋‚ด๊ธฐ

์ด ์ฒซ ๋ฒˆ์งธ ๊ธฐ์‚ฌ์—์„œ๋Š” ํ…”๋ ˆ๊ทธ๋žจ ๋ด‡์„ ๋งŒ๋“ค๊ณ  ์ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ…”๋ ˆ๊ทธ๋žจ์œผ๋กœ ์•Œ๋ฆผ์„ ๋ณด๋‚ด๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ด…๋‹ˆ๋‹ค.

๊ฒฐ๊ณผ์ ์œผ๋กœ Windows ์ž‘์—… ์Šค์ผ€์ค„๋Ÿฌ์—์„œ ๋ชจ๋“  ์ž‘์—…์˜ โ€‹โ€‹๋งˆ์ง€๋ง‰ ์‹คํ–‰ ์ƒํƒœ๋ฅผ ํ™•์ธํ•˜๊ณ  ์ž‘์—… ์ค‘ ํ•˜๋‚˜๋ผ๋„ ์‹คํŒจํ•˜๋ฉด ์•Œ๋ฆผ์„ ๋ณด๋‚ด๋Š” ๋ด‡์„ ๊ฐ–๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

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

๋‚ด์šฉ

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

  1. ํ…”๋ ˆ๊ทธ๋žจ ๋ด‡ ๋งŒ๋“ค๊ธฐ
  2. R์—์„œ ํ…”๋ ˆ๊ทธ๋žจ ๋ด‡ ์ž‘์—…์„ ์œ„ํ•œ ํŒจํ‚ค์ง€ ์„ค์น˜
  3. R์—์„œ ํ…”๋ ˆ๊ทธ๋žจ์œผ๋กœ ๋ฉ”์‹œ์ง€ ๋ณด๋‚ด๊ธฐ
  4. ์ž‘์—… ๊ฒ€์‚ฌ ์‹คํ–‰ ์ผ์ • ์„ค์ •
  5. ๊ฒฐ๋ก 

ํ…”๋ ˆ๊ทธ๋žจ ๋ด‡ ๋งŒ๋“ค๊ธฐ

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

๊ทธ๋Ÿฐ ๋‹ค์Œ ๋ช…๋ น ๋ชฉ๋ก์ด ํฌํ•จ๋œ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

BotFather์˜ ๋ฉ”์‹œ์ง€

I can help you create and manage Telegram bots. If you're new to the Bot API, please see the manual (https://core.telegram.org/bots).

You can control me by sending these commands:

/newbot - create a new bot
/mybots - edit your bots [beta]

Edit Bots
/setname - change a bot's name
/setdescription - change bot description
/setabouttext - change bot about info
/setuserpic - change bot profile photo
/setcommands - change the list of commands
/deletebot - delete a bot

Bot Settings
/token - generate authorization token
/revoke - revoke bot access token
/setinline - toggle inline mode (https://core.telegram.org/bots/inline)
/setinlinegeo - toggle inline location requests (https://core.telegram.org/bots/inline#location-based-results)
/setinlinefeedback - change inline feedback (https://core.telegram.org/bots/inline#collecting-feedback) settings
/setjoingroups - can your bot be added to groups?
/setprivacy - toggle privacy mode (https://core.telegram.org/bots#privacy-mode) in groups

Games
/mygames - edit your games (https://core.telegram.org/bots/games) [beta]
/newgame - create a new game (https://core.telegram.org/bots/games)
/listgames - get a list of your games
/editgame - edit a game
/deletegame - delete an existing game

์ƒˆ ๋ด‡์„ ๋งŒ๋“ค๋ ค๋ฉด ๋‹ค์Œ ๋ช…๋ น์„ ๋ณด๋‚ด์„ธ์š”. /newbot.

BotFather๋Š” ๋ด‡์˜ ์ด๋ฆ„๊ณผ ๋กœ๊ทธ์ธ์„ ์ž…๋ ฅํ•˜๋ผ๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

BotFather, [25.07.20 09:39]
Alright, a new bot. How are we going to call it? Please choose a name for your bot.

Alexey Seleznev, [25.07.20 09:40]
My Test Bot

BotFather, [25.07.20 09:40]
Good. Now let's choose a username for your bot. It must end in `bot`. Like this, for example: TetrisBot or tetris_bot.

Alexey Seleznev, [25.07.20 09:40]
@my_test_bot

์–ด๋–ค ์ด๋ฆ„์ด๋ผ๋„ ์ž…๋ ฅํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋กœ๊ทธ์ธ์€ ๋‹ค์Œ์œผ๋กœ ๋๋‚˜์•ผ ํ•ฉ๋‹ˆ๋‹ค. bot.

๋ชจ๋“  ์ž‘์—…์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ˆ˜ํ–‰ํ–ˆ๋‹ค๋ฉด ๋‹ค์Œ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

Done! Congratulations on your new bot. You will find it at t.me/my_test_bot. You can now add a description, about section and profile picture for your bot, see /help for a list of commands. By the way, when you've finished creating your cool bot, ping our Bot Support if you want a better username for it. Just make sure the bot is fully operational before you do this.

Use this token to access the HTTP API:
123456789:abcdefghijklmnopqrstuvwxyz

For a description of the Bot API, see this page: https://core.telegram.org/bots/api

๋‹ค์Œ์œผ๋กœ ์ˆ˜์‹ ๋œ API ํ† ํฐ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ œ ์˜ˆ์—์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. 123456789:abcdefghijklmnopqrstuvwxyz.

์ด ๋‹จ๊ณ„์—์„œ ๋ด‡ ์ƒ์„ฑ์„ ์œ„ํ•œ ์ค€๋น„ ์ž‘์—…์ด ์™„๋ฃŒ๋ฉ๋‹ˆ๋‹ค.

R์—์„œ ํ…”๋ ˆ๊ทธ๋žจ ๋ด‡ ์ž‘์—…์„ ์œ„ํ•œ ํŒจํ‚ค์ง€ ์„ค์น˜

์ด๋ฏธ R ์–ธ์–ด์™€ RStudio ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์ด ์„ค์น˜๋˜์–ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ์—๋Š” ์ด๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋น„๋””์˜ค ัƒั€ะพะบ ์„ค์น˜ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด.

Telegram Bot API๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด R ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ํ…”๋ ˆ๊ทธ๋žจ๋ด‡.

R์—์„œ ํŒจํ‚ค์ง€ ์„ค์น˜๋Š” ๋‹ค์Œ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. install.packages(), ํ•„์š”ํ•œ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค. install.packages("telegram.bot").

๋‹ค์–‘ํ•œ ํŒจํ‚ค์ง€ ์„ค์น˜์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋น„๋””์˜ค.

ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•œ ํ›„ ์—ฐ๊ฒฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

library(telegram.bot)

R์—์„œ ํ…”๋ ˆ๊ทธ๋žจ์œผ๋กœ ๋ฉ”์‹œ์ง€ ๋ณด๋‚ด๊ธฐ

๊ท€ํ•˜๊ฐ€ ์ƒ์„ฑํ•œ ๋ด‡์€ ์ƒ์„ฑ ์‹œ ์ง€์ •๋œ ๋กœ๊ทธ์ธ์„ ์‚ฌ์šฉํ•˜์—ฌ Telegram์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ œ ๊ฒฝ์šฐ์—๋Š” @my_test_bot.

๋ด‡์—๊ฒŒ "Hey bot"๊ณผ ๊ฐ™์€ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด์„ธ์š”. ํ˜„์žฌ ๋ด‡๊ณผ์˜ ์ฑ„ํŒ… ID๋ฅผ ์–ป์œผ๋ ค๋ฉด ์ด ์ •๋ณด๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์ด์ œ R์—์„œ ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

library(telegram.bot)

# ัะพะทะดะฐั‘ะผ ัะบะทะตะผะฟะปัั€ ะฑะพั‚ะฐ
bot <- Bot(token = "123456789:abcdefghijklmnopqrstuvwxyz")

# ะ—ะฐะฟั€ะฐัˆะธะฒะฐะตะผ ะธะฝั„ะพั€ะผะฐั†ะธัŽ ะพ ะฑะพั‚ะต
print(bot$getMe())

# ะŸะพะปัƒั‡ะฐะตะผ ะพะฑะฝะพะฒะปะตะฝะธั ะฑะพั‚ะฐ, ั‚.ะต. ัะฟะธัะพะบ ะพั‚ะฟั€ะฐะฒะปะตะฝะฝั‹ั… ะตะผัƒ ัะพะพะฑั‰ะตะฝะธะน
updates <- bot$getUpdates()

# ะ—ะฐะฟั€ะฐัˆะธะฒะฐะตะผ ะธะดะตะฝั‚ะธั„ะธะบะฐั‚ะพั€ ั‡ะฐั‚ะฐ
# ะŸั€ะธะผะตั‡ะฐะฝะธะต: ะฟะตั€ะตะด ะทะฐะฟั€ะพัะพะผ ะพะฑะฝะพะฒะปะตะฝะธะน ะฒั‹ ะดะพะปะถะฝั‹ ะพั‚ะฟั€ะฐะฒะธั‚ัŒ ะฑะพั‚ัƒ ัะพะพะฑั‰ะตะฝะธะต
chat_id <- updates[[1L]]$from_chat_id()

์ฒ˜์Œ์—๋Š” ๋‹ค์Œ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ด‡์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. Bot(), ์ด์ „์— ๋ฐ›์€ ํ† ํฐ์„ ์ธ์ˆ˜๋กœ ์ „๋‹ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํ† ํฐ์„ ์ฝ”๋“œ์— ์ €์žฅํ•˜๋Š” ๊ฒƒ์€ ๋ชจ๋ฒ” ์‚ฌ๋ก€๋กœ ๊ฐ„์ฃผ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ํ™˜๊ฒฝ ๋ณ€์ˆ˜์— ์ €์žฅํ•˜๊ณ  ์ฝ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ํŒจํ‚ค์ง€์— ์žˆ์Œ telegram.bot ๋‹ค์Œ ์ด๋ฆ„์˜ ํ™˜๊ฒฝ ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ์ง€์›์ด ๊ตฌํ˜„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. R_TELEGRAM_BOT_ะ˜ะœะฏ_ะ’ะะจะ•ะ“ะž_ะ‘ะžะขะ... ๋Œ€์‹ ์— ะ˜ะœะฏ_ะ’ะะจะ•ะ“ะž_ะ‘ะžะขะ ์ƒ์„ฑํ•  ๋•Œ ์ง€์ •ํ•œ ์ด๋ฆ„์„ ๋Œ€์ฒดํ•˜์„ธ์š”. ์ œ ๊ฒฝ์šฐ์—๋Š” ๋ณ€์ˆ˜๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. R_TELEGRAM_BOT_My Test Bot.

ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์—๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€๊ฐ€ ์žˆ๋Š”๋ฐ, ๊ฐ€์žฅ ๋ณดํŽธ์ ์ด๊ณ  ํฌ๋กœ์Šค ํ”Œ๋žซํผ์ธ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ๋ง์”€๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค. ํ™ˆ ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค(๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฐพ์„ ์ˆ˜ ์žˆ์Œ). path.expand("~")) ์ด๋ฆ„์ด ํฌํ•จ๋œ ํ…์ŠคํŠธ ํŒŒ์ผ .๋ Œ๋ฐ”์ด๋ก . ๋‹ค์Œ ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. file.edit(path.expand(file.path("~", ".Renviron"))).

๊ทธ๋ฆฌ๊ณ  ๋‹ค์Œ ์ค„์„ ์ถ”๊ฐ€ํ•˜์„ธ์š”.

R_TELEGRAM_BOT_ะ˜ะœะฏ_ะ’ะะจะ•ะ“ะž_ะ‘ะžะขะ=123456789:abcdefghijklmnopqrstuvwxyz

๋‹ค์Œ์œผ๋กœ ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜์—ฌ ํ™˜๊ฒฝ๋ณ€์ˆ˜์— ์ €์žฅ๋œ ํ† ํฐ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. bot_token(), ์ฆ‰. ์ด์™€ ๊ฐ™์ด:

bot <- Bot(token = bot_token("My Test Bot"))

๋ฐฉ๋ฒ• getUpdates()๋ด‡ ์—…๋ฐ์ดํŠธ๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ์—๊ฒŒ ๋ณด๋‚ธ ๋ฉ”์‹œ์ง€. ๋ฐฉ๋ฒ• from_chat_id()๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ”์‹œ์ง€๊ฐ€ ์ „์†ก๋œ ์ฑ„ํŒ…์˜ ID๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ด‡์—์„œ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด๋ ค๋ฉด ์ด ID๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด ์–ป์€ ๊ฐ์ฒด์˜ ์ฑ„ํŒ… ID ์™ธ์— getUpdates() ๋˜ํ•œ ๋‹ค๋ฅธ ์œ ์šฉํ•œ ์ •๋ณด๋„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ธ ์‚ฌ์šฉ์ž์— ๋Œ€ํ•œ ์ •๋ณด์ž…๋‹ˆ๋‹ค.

updates[[1L]]$message$from

$id
[1] 000000000

$is_bot
[1] FALSE

$first_name
[1] "Alexey"

$last_name
[1] "Seleznev"

$username
[1] "AlexeySeleznev"

$language_code
[1] "ru"

๋”ฐ๋ผ์„œ ์ด ๋‹จ๊ณ„์—์„œ ์šฐ๋ฆฌ๋Š” ์ด๋ฏธ ๋ด‡์—์„œ Telegram์œผ๋กœ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด๋Š” ๋ฐ ํ•„์š”ํ•œ ๋ชจ๋“  ๊ฒƒ์„ ๊ฐ–์ถ”๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐฉ๋ฒ•์„ ํ™œ์šฉํ•ด๋ณด์ž sendMessage(), ์ฑ„ํŒ… ID, ๋ฉ”์‹œ์ง€ ํ…์ŠคํŠธ ๋ฐ ๋ฉ”์‹œ์ง€ ํ…์ŠคํŠธ ๋งˆํฌ์—… ์œ ํ˜•์„ ์ „๋‹ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋งˆํฌ์—… ์œ ํ˜•์€ Markdown ๋˜๋Š” HTML์ผ ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ธ์ˆ˜๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค. parse_mode.

# ะžั‚ะฟั€ะฐะฒะบะฐ ัะพะพะฑั‰ะตะฝะธั
bot$sendMessage(chat_id,
                text = "ะŸั€ะธะฒะตั‚, *ะถะธั€ะฝั‹ะน ั‚ะตะบัั‚* _ะบัƒั€ัะธะฒ_",
                parse_mode = "Markdown"
)

๋งˆํฌ๋‹ค์šด ์„œ์‹ ๊ธฐ๋ณธ ์‚ฌํ•ญ:

  • ๊ตต์€ ๊ธ€๊ผด์€ *๋กœ ๊ฐ•์กฐ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
    • ์˜ˆ : *ะถะธั€ะฝั‹ะน ัˆั€ะธั‚ั„*
    • ๊ฒฐ๊ณผ : ๋ณผ๋“œ์ฒด
  • ๊ธฐ์šธ์ž„๊ผด์€ ๋ฐ‘์ค„๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
    • ์˜ˆ : _ะบัƒั€ัะธะฒ_
    • ๊ฒฐ๊ณผ : ์ดํƒค๋ฆญ์ฒด
  • ์ผ๋ฐ˜์ ์œผ๋กœ ํ”„๋กœ๊ทธ๋žจ ์ฝ”๋“œ๋ฅผ ๊ฐ•์กฐ ํ‘œ์‹œํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๊ณ ์ •ํญ ๊ธ€๊ผด์€ ์•„ํฌ์ŠคํŠธ๋กœํ”ผ(`:)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ง€์ •๋ฉ๋‹ˆ๋‹ค.
    • ์˜ˆ: `๊ณ ์ • ํญ ๊ธ€๊ผด`
    • ๊ฒฐ๊ณผ : ะผะพะฝะพัˆะธั€ะธะฝะฝั‹ะน ัˆั€ะธั„ั‚

HTML ๋งˆํฌ์—… ํ˜•์‹ ์ง€์ •์˜ ๊ธฐ๋ณธ ์‚ฌํ•ญ:
HTML์—์„œ๋Š” ๊ฐ•์กฐ ํ‘œ์‹œํ•ด์•ผ ํ•˜๋Š” ํ…์ŠคํŠธ ๋ถ€๋ถ„์„ ํƒœ๊ทธ๋กœ ๋ฌถ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. <ั‚ะตะณ>ั‚ะตะบัั‚</ั‚ะตะณ>.

  • <ํƒœ๊ทธ> - ์—ฌ๋Š” ํƒœ๊ทธ
  • - ๋‹ซ๋Š” ํƒœ๊ทธ

HTML ๋งˆํฌ์—… ํƒœ๊ทธ

  • <b> - ๋ณผ๋“œ์ฒด
    • ์˜ˆ : <b>ะถะธั€ะฝั‹ะน ัˆั€ะธั„ั‚</b>
    • ๊ฒฐ๊ณผ ๋ณผ๋“œ์ฒด
  • <i> - ์ดํƒค๋ฆญ์ฒด
    • ์˜ˆ : <i>ะบัƒั€ัะธะฒ</i>
    • ๊ฒฐ๊ณผ : ์ดํƒค๋ฆญ์ฒด
  • โ€” ะผะพะฝะพัˆะธั€ะธะฝะฝั‹ะน ัˆั€ะธั„ั‚
    • ์˜ˆ: ะผะพะฝะพัˆะธั€ะธะฝะฝั‹ะน ัˆั€ะธั„ั‚
    • ๊ฒฐ๊ณผ : ะผะพะฝะพัˆะธั€ะธะฝะฝั‹ะน ัˆั€ะธั„ั‚

ํ…์ŠคํŠธ ์™ธ์—๋„ ํŠน๋ณ„ํ•œ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค๋ฅธ ์ฝ˜ํ…์ธ ๋ฅผ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

# ะžั‚ะฟั€ะฐะฒะธั‚ัŒ ะธะทะพะฑั€ะฐะถะตะฝะธะต
bot$sendPhoto(chat_id,
  photo = "https://telegram.org/img/t_logo.png"
)

# ะžั‚ะฟั€ะฐะฒะบะฐ ะณะพะปะพัะพะฒะพะณะพ ัะพะพะฑั‰ะตะฝะธั
bot$sendAudio(chat_id,
  audio = "http://www.largesound.com/ashborytour/sound/brobob.mp3"
)

# ะžั‚ะฟั€ะฐะฒะธั‚ัŒ ะดะพะบัƒะผะตะฝั‚
bot$sendDocument(chat_id,
  document = "https://github.com/ebeneditos/telegram.bot/raw/gh-pages/docs/telegram.bot.pdf"
)

# ะžั‚ะฟั€ะฐะฒะธั‚ัŒ ัั‚ะธะบะตั€
bot$sendSticker(chat_id,
  sticker = "https://www.gstatic.com/webp/gallery/1.webp"
)

# ะžั‚ะฟั€ะฐะฒะธั‚ัŒ ะฒะธะดะตะพ
bot$sendVideo(chat_id,
  video = "http://techslides.com/demos/sample-videos/small.mp4"
)

# ะžั‚ะฟั€ะฐะฒะธั‚ัŒ gif ะฐะฝะธะผะฐั†ะธัŽ
bot$sendAnimation(chat_id,
  animation = "https://media.giphy.com/media/sIIhZliB2McAo/giphy.gif"
)

# ะžั‚ะฟั€ะฐะฒะธั‚ัŒ ะปะพะบะฐั†ะธัŽ
bot$sendLocation(chat_id,
  latitude = 51.521727,
  longitude = -0.117255
)

# ะ˜ะผะธั‚ะฐั†ะธั ะดะตะนัั‚ะฒะธั ะฒ ั‡ะฐั‚ะต
bot$sendChatAction(chat_id,
  action = "typing"
)

์ €๊ฒƒ๋“ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ sendPhoto() ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ์„ฑํ•œ ์ด๋ฏธ์ง€๋กœ ์ €์žฅ๋œ ๊ทธ๋ž˜ํ”„๋ฅผ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ggplot2.

Windows ์ž‘์—… ์Šค์ผ€์ค„๋Ÿฌ ํ™•์ธ ๋ฐ ๋น„์ •์ƒ ์ข…๋ฃŒ๋œ ์ž‘์—…์— ๋Œ€ํ•œ ์•Œ๋ฆผ ๋ณด๋‚ด๊ธฐ

Windows ์ž‘์—… ์Šค์ผ€์ค„๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. taskscheduleR, ๋ฐ์ดํ„ฐ ์ž‘์—…์˜ ํŽธ์˜๋ฅผ ์œ„ํ•ด ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜์‹ญ์‹œ์˜ค. dplyr.

# ะฃัั‚ะฐะฝะพะฒะบะฐ ะฟะฐะบะตั‚ะพะฒ
install.packages(c('taskscheduleR', 'dplyr'))
# ะŸะพะดะบะปัŽั‡ะตะฝะธะต ะฟะฐะบะตั‚ะพะฒ
library(taskscheduleR)
library(dplyr)

๋‹ค์Œ์œผ๋กœ ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด์„œ taskscheduler_ls() ์Šค์ผ€์ค„๋Ÿฌ๋กœ๋ถ€ํ„ฐ ์ž‘์—…์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋Šฅ ์‚ฌ์šฉ filter() ํŒจํ‚ค์ง€์—์„œ dplyr ์„ฑ๊ณต์ ์œผ๋กœ ์™„๋ฃŒ๋˜์—ˆ์œผ๋ฉฐ ๋งˆ์ง€๋ง‰ ๊ฒฐ๊ณผ ์ƒํƒœ๊ฐ€ 0์ธ ์ž‘์—…, ์‹คํ–‰๋œ ์ ์ด ์—†๊ณ  ์ƒํƒœ๊ฐ€ 267011์ธ ์ž‘์—…, ๋น„ํ™œ์„ฑํ™”๋œ ์ž‘์—… ๋ฐ ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ ์ž‘์—…์„ ์ž‘์—… ๋ชฉ๋ก์—์„œ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

# ะทะฐะฟั€ะฐัˆะธะฒะฐะตะผ ัะฟะธัะพะบ ะทะฐะดะฐั‡
task <- task <- taskscheduler_ls() %>%
        filter(! `Last Result`  %in% c("0", "267011") & 
               `Scheduled Task State` == "Enabled" & 
               Status != "Running") %>%
        select(TaskName) %>%
        unique() %>%
        unlist() %>%
        paste0(., collapse = "n")

๊ฐœ์ฒด์—์„œ task ์ด์ œ ์‹คํŒจํ•œ ์ž‘์—… ๋ชฉ๋ก์ด ์žˆ์œผ๋ฏ€๋กœ ์ด ๋ชฉ๋ก์„ ํ…”๋ ˆ๊ทธ๋žจ์œผ๋กœ ๋ณด๋‚ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ฐ ๋ช…๋ น์„ ๋” ์ž์„ธํžˆ ์‚ดํŽด๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • filter() โ€” ์œ„์—์„œ ์„ค๋ช…ํ•œ ์กฐ๊ฑด์— ๋”ฐ๋ผ ์ž‘์—… ๋ชฉ๋ก์„ ํ•„ํ„ฐ๋งํ•ฉ๋‹ˆ๋‹ค.
  • select() โ€” ํ…Œ์ด๋ธ”์— ์ž‘์—… ์ด๋ฆ„์ด ์žˆ๋Š” ํ•„๋“œ ํ•˜๋‚˜๋งŒ ๋‚จ๊ฒจ ๋‘ก๋‹ˆ๋‹ค.
  • unique() - ์ค‘๋ณต๋œ ์ด๋ฆ„์„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.
  • unlist() โ€” ์„ ํƒํ•œ ํ…Œ์ด๋ธ” ์—ด์„ ๋ฒกํ„ฐ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • paste0() โ€” ์ž‘์—… ์ด๋ฆ„์„ ํ•œ ์ค„๋กœ ์—ฐ๊ฒฐํ•˜๊ณ  ๊ตฌ๋ถ„ ๊ธฐํ˜ธ๋กœ ์ค„ ๋ฐ”๊ฟˆ์„ ๋„ฃ์Šต๋‹ˆ๋‹ค. n.

์šฐ๋ฆฌ์—๊ฒŒ ๋‚จ์€ ๊ฒƒ์€ ์ด ๊ฒฐ๊ณผ๋ฅผ ์ „๋ณด๋กœ ๋ณด๋‚ด๋Š” ๊ฒƒ๋ฟ์ž…๋‹ˆ๋‹ค.

bot$sendMessage(chat_id,
                text = task,
                parse_mode = "Markdown"
)

๋”ฐ๋ผ์„œ ํ˜„์žฌ ๋ด‡ ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ž‘์—… ๊ฒ€ํ†  ๋ด‡ ์ฝ”๋“œ

# ะŸะพะดะบะปัŽั‡ะตะฝะธะต ะฟะฐะบะตั‚ะฐ
library(telegram.bot)
library(taskscheduleR)
library(dplyr)

# ะธะฝะธั†ะธะฐะปะธะทะธั€ัƒะตะผ ะฑะพั‚ะฐ
bot <- Bot(token = "123456789:abcdefghijklmnopqrstuvwxyz")

# ะธะดะตะฝั‚ะธั„ะธะบะฐั‚ะพั€ ั‡ะฐั‚ะฐ
chat_id <- 123456789

# ะทะฐะฟั€ะฐัˆะธะฒะฐะตะผ ัะฟะธัะพะบ ะทะฐะดะฐั‡
task <- taskscheduler_ls() %>%
        filter(! `Last Result`  %in% c("0", "267011")  &
               `Scheduled Task State` == "Enabled" & 
               Status != "Running") %>%
        select(TaskName) %>%
        unique() %>%
        unlist() %>%
        paste0(., collapse = "n")

# ะตัะปะธ ะตัั‚ัŒ ะฟั€ะพะฑะปะตะผะฝั‹ะต ะทะฐะดะฐั‡ะธ ะพั‚ะฟั€ะฐะฒะปัะตะผ ัะพะพะฑั‰ะตะฝะธะต
if ( task != "" ) {

  bot$sendMessage(chat_id,
                  text = task,
                  parse_mode = "Markdown"
  )

}

์œ„์˜ ์˜ˆ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๋ด‡ ํ† ํฐ๊ณผ ์ฑ„ํŒ… ID๋ฅผ ์ฝ”๋“œ๋กœ ๋Œ€์ฒดํ•˜์„ธ์š”.

์˜ˆ๋ฅผ ๋“ค์–ด ์‹œ์Šคํ…œ ์ž‘์—…์„ ์ œ์™ธํ•˜๊ณ  ์ž์‹ ์ด ์ƒ์„ฑํ•œ ์ž‘์—…๋งŒ ํ™•์ธํ•˜๋Š” ๋“ฑ ์ž‘์—… ํ•„ํ„ฐ๋ง ์กฐ๊ฑด์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์–‘ํ•œ ์„ค์ •์„ ๋ณ„๋„์˜ ๊ตฌ์„ฑ ํŒŒ์ผ์— ๋„ฃ๊ณ  ์ฑ„ํŒ… ID์™€ ํ† ํฐ์„ ์ €์žฅํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌ์„ฑ์„ ์ฝ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. configr.

ini ๊ตฌ์„ฑ ์˜ˆ์‹œ

[telegram_bot]
;ะฝะฐัั‚ั€ะพะนะบะธ ั‚ะตะปะตะณั€ะฐะผ ะฑะพั‚ะฐ ะธ ั‡ะฐั‚ะฐ, ะฒ ะบะพั‚ะพั€ั‹ะน ะฑัƒะดัƒั‚ ะฟั€ะธั…ะพะดะธั‚ัŒ ัƒะฒะตะดะพะผะปะตะฝะธั
chat_id=12345678
bot_token=123456789:abcdefghijklmnopqrstuvwxyz"

R์˜ ๊ตฌ์„ฑ์—์„œ ๋ณ€์ˆ˜๋ฅผ ์ฝ๋Š” ์˜ˆ

library(configr)

# ั‡ั‚ะตะฝะธะต ะบะพะฝั„ะธะฝะฐ
config <- read.config('C:/ะฟัƒั‚ัŒ_ะบ_ะบะพะฝั„ะธะณัƒ/config.cfg', rcmd.parse = TRUE)

bot_token <- config$telegram_bot$bot_token
chat_id     <- config$telegram_bot$chat_id

์ž‘์—… ๊ฒ€์‚ฌ ์‹คํ–‰ ์ผ์ • ์„ค์ •

์ผ์ •์— ๋”ฐ๋ผ ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰์„ ์„ค์ •ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๋Š” ์ด ํ•ญ๋ชฉ์— ์ž์„ธํžˆ ์„ค๋ช…๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ์‚ฌ. ์—ฌ๊ธฐ์„œ๋Š” ์ด๋ฅผ ์œ„ํ•ด ๋”ฐ๋ผ์•ผ ํ•  ๋‹จ๊ณ„๋งŒ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‹จ๊ณ„ ์ค‘ ํ•˜๋‚˜๋ผ๋„ ๋ช…ํ™•ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ๋งํฌ๋ฅผ ์ œ๊ณตํ•œ ๋ฌธ์„œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

๋ด‡ ์ฝ”๋“œ๋ฅผ ํŒŒ์ผ์— ์ €์žฅํ–ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. check_bot.R. ์ด ํŒŒ์ผ์ด ์ •๊ธฐ์ ์œผ๋กœ ์‹คํ–‰๋˜๋„๋ก ์˜ˆ์•ฝํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ๋”ฐ๋ฅด์„ธ์š”.

  1. Path ์‹œ์Šคํ…œ ๋ณ€์ˆ˜์— R์ด ์„ค์น˜๋œ ํด๋”์˜ ๊ฒฝ๋กœ๋ฅผ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค. Windows์˜ ๊ฒฝ์šฐ ๊ฒฝ๋กœ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. C:Program FilesRR-4.0.2bin.
  2. ๋‹จ ํ•œ ์ค„๋กœ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ bat ํŒŒ์ผ ๋งŒ๋“ค๊ธฐ R CMD BATCH C:rscriptscheck_botcheck_bot.R. ๋ฐ”๊พธ๋‹ค C:rscriptscheck_botcheck_bot.R R ํŒŒ์ผ์˜ ์ „์ฒด ๊ฒฝ๋กœ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
  3. ๊ทธ๋Ÿฐ ๋‹ค์Œ Windows ์ž‘์—… ์Šค์ผ€์ค„๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹œ์ž‘ ์ผ์ •(์˜ˆ: XNUMX๋ถ„๋งˆ๋‹ค)์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

๊ฒฐ๋ก 

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

Windows ์ž‘์—… ์Šค์ผ€์ค„๋Ÿฌ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๋Š” ์ž‘์—…์— ๋Œ€ํ•ด ์„ค๋ช…ํ–ˆ์ง€๋งŒ ์ด ๊ธฐ์‚ฌ์˜ ์ž๋ฃŒ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ผ๊ธฐ ์˜ˆ๋ณด์—์„œ ์ฆ๊ถŒ ๊ฑฐ๋ž˜์†Œ์˜ ์ฃผ์‹ ์‹œ์„ธ์— ์ด๋ฅด๊ธฐ๊นŒ์ง€ ๋ชจ๋“  ์•Œ๋ฆผ์„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. R์„ ์‚ฌ์šฉํ•˜๋ฉด ์ˆ˜๋งŽ์€ ๋ฐ์ดํ„ฐ ์†Œ์Šค์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€