Telegram ์ฒญ์ค์ ๋งค์ผ ๊ธฐํ ๊ธ์์ ์ผ๋ก ์ฆ๊ฐํ๊ณ ์์ผ๋ฉฐ ์ด๋ ๋ฉ์ ์ ์ ํธ๋ฆฌํจ, ์ฑ๋์ ์กด์ฌ, ์ฑํ ๋ฐ ๋ฌผ๋ก ๋ด ์์ฑ ๊ธฐ๋ฅ์ผ๋ก ์ธํด ์ด์ง๋ฉ๋๋ค.
๋ด์ ๊ณ ๊ฐ๊ณผ์ ์ปค๋ฎค๋์ผ์ด์ ์๋ํ๋ถํฐ ์์ฒด ์์ ๊ด๋ฆฌ๊น์ง ์์ ํ ๋ค๋ฅธ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉ๋ ์ ์์ต๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ํ ๋ ๊ทธ๋จ์ ์ฌ์ฉํ๋ฉด ๋ด์ ํตํด ๋ฐ์ดํฐ ์ ์ก ๋๋ ์์ฒญ, ์๋ฒ์์ ์์ ์คํ, ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๋ณด ์์ง, ์ด๋ฉ์ผ ๋ณด๋ด๊ธฐ ๋ฑ ๋ชจ๋ ์์ ์ ์ํํ ์ ์์ต๋๋ค.
๋๋ ์์
๋ฐฉ๋ฒ์ ๋ํ ์ผ๋ จ์ ๊ธฐ์ฌ๋ฅผ ์ธ ๊ณํ์
๋๋ค.
์ด ์ฒซ ๋ฒ์งธ ๊ธฐ์ฌ์์๋ ํ ๋ ๊ทธ๋จ ๋ด์ ๋ง๋ค๊ณ ์ด๋ฅผ ์ฌ์ฉํ์ฌ ํ ๋ ๊ทธ๋จ์ผ๋ก ์๋ฆผ์ ๋ณด๋ด๋ ๋ฐฉ๋ฒ์ ์์๋ด ๋๋ค.
๊ฒฐ๊ณผ์ ์ผ๋ก Windows ์์ ์ค์ผ์ค๋ฌ์์ ๋ชจ๋ ์์ ์ โโ๋ง์ง๋ง ์คํ ์ํ๋ฅผ ํ์ธํ๊ณ ์์ ์ค ํ๋๋ผ๋ ์คํจํ๋ฉด ์๋ฆผ์ ๋ณด๋ด๋ ๋ด์ ๊ฐ๊ฒ ๋ฉ๋๋ค.
ํ์ง๋ง ์ด ๊ธฐ์ฌ ์๋ฆฌ์ฆ์ ๋ชฉ์ ์ ํน์ ํ๊ณ ์ข์ ์์
์ ์ํ ๋ด ์์ฑ ๋ฐฉ๋ฒ์ ๊ฐ๋ฅด์น๋ ๊ฒ์ด ์๋๋ผ ์ผ๋ฐ์ ์ผ๋ก ํจํค์ง ๊ตฌ๋ฌธ์ ์๊ฐํ๋ ๊ฒ์
๋๋ค. telegram.bot
, ๊ทธ๋ฆฌ๊ณ ์์ ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ด์ ์์ฑํ ์ ์๋ ์ฝ๋ ์์ ์
๋๋ค.
๋ด์ฉ
๋ฐ์ดํฐ ๋ถ์์ ๊ด์ฌ์ด ์๋ค๋ฉด ์ ๊ธ์๋ ๊ด์ฌ์ด ์์ผ์ค ๊ฒ๋๋ค.
ํ ๋ ๊ทธ๋จ ๋ด ๋ง๋ค๊ธฐ R์์ ํ ๋ ๊ทธ๋จ ๋ด ์์ ์ ์ํ ํจํค์ง ์ค์น R์์ ํ ๋ ๊ทธ๋จ์ผ๋ก ๋ฉ์์ง ๋ณด๋ด๊ธฐ ์์ ๊ฒ์ฌ ์คํ ์ผ์ ์ค์ ๊ฒฐ๋ก
ํ ๋ ๊ทธ๋จ ๋ด ๋ง๋ค๊ธฐ
๋จผ์ ๋ด์ ๋ง๋ค์ด์ผ ํฉ๋๋ค. ์ด ์์
์ ํน์ ๋ด์ ์ฌ์ฉํ์ฌ ์ํ๋ฉ๋๋ค. ๋ด ์๋ฒ์ง, ์ด๋ /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
. ์ด ํ์ผ์ด ์ ๊ธฐ์ ์ผ๋ก ์คํ๋๋๋ก ์์ฝํ๋ ค๋ฉด ๋ค์ ๋จ๊ณ๋ฅผ ๋ฐ๋ฅด์ธ์.
- Path ์์คํ
๋ณ์์ R์ด ์ค์น๋ ํด๋์ ๊ฒฝ๋ก๋ฅผ ๊ธฐ๋กํฉ๋๋ค. Windows์ ๊ฒฝ์ฐ ๊ฒฝ๋ก๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
C:Program FilesRR-4.0.2bin
. - ๋จ ํ ์ค๋ก ์คํ ๊ฐ๋ฅํ bat ํ์ผ ๋ง๋ค๊ธฐ
R CMD BATCH C:rscriptscheck_botcheck_bot.R
. ๋ฐ๊พธ๋คC:rscriptscheck_botcheck_bot.R
R ํ์ผ์ ์ ์ฒด ๊ฒฝ๋ก๋ก ์ด๋ํฉ๋๋ค. - ๊ทธ๋ฐ ๋ค์ Windows ์์ ์ค์ผ์ค๋ฌ๋ฅผ ์ฌ์ฉํ์ฌ ์์ ์ผ์ (์: XNUMX๋ถ๋ง๋ค)์ ์ค์ ํฉ๋๋ค.
๊ฒฐ๋ก
์ด๋ฒ ๊ธ์์๋ ๋ด์ ์์ฑํ๊ณ ์ด๋ฅผ ์ฌ์ฉํ์ฌ ํ ๋ ๊ทธ๋จ์ผ๋ก ๋ค์ํ ์๋ฆผ์ ๋ณด๋ด๋ ๋ฐฉ๋ฒ์ ์์๋ณด์์ต๋๋ค.
Windows ์์ ์ค์ผ์ค๋ฌ๋ฅผ ๋ชจ๋ํฐ๋งํ๋ ์์ ์ ๋ํด ์ค๋ช ํ์ง๋ง ์ด ๊ธฐ์ฌ์ ์๋ฃ๋ฅผ ์ฌ์ฉํ์ฌ ์ผ๊ธฐ ์๋ณด์์ ์ฆ๊ถ ๊ฑฐ๋์์ ์ฃผ์ ์์ธ์ ์ด๋ฅด๊ธฐ๊น์ง ๋ชจ๋ ์๋ฆผ์ ๋ณด๋ผ ์ ์์ต๋๋ค. R์ ์ฌ์ฉํ๋ฉด ์๋ง์ ๋ฐ์ดํฐ ์์ค์ ์ฐ๊ฒฐํ ์ ์์ต๋๋ค.
๋ค์ ๊ธฐ์ฌ์์๋ ๋ด์ด ์๋ฆผ์ ๋ณด๋ผ ๋ฟ๋ง ์๋๋ผ ๋ ๋ณต์กํ ์์ ์ ์ํํ ์ ์๋๋ก ๋ช ๋ น๊ณผ ํค๋ณด๋๋ฅผ ๋ด์ ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ์ ์์ ๋ณด๊ฒ ์ต๋๋ค.
์ถ์ฒ : habr.com