Manoratra bot telegrama amin'ny R (fizarana 1): Mamorona bot ary mampiasa izany handefasana hafatra amin'ny telegrama

Mitombo isan'andro ny mpihaino Telegram, manamora ny fanamorana ny iraka, ny fisian'ny fantsona, ny chat, ary mazava ho azy ny fahafahana mamorona bots.

Ny bots dia azo ampiasaina amin'ny tanjona samy hafa tanteraka, manomboka amin'ny fanaovana automatique ny fifandraisana amin'ny mpanjifanao ka hatramin'ny fitantanana ny asanao manokana.

Amin'ny ankapobeny, azonao atao ny mampiasa telegrama hanaovana hetsika amin'ny alΓ lan'ny bot: mandefa na mangataka angon-drakitra, mampandeha asa amin'ny mpizara, manangona vaovao ao anaty tahiry, mandefa mailaka, sns.

Mikasa ny hanoratra lahatsoratra maromaro momba ny fomba fiasana aho telegram bot API, ary manorata bots mifanaraka amin'ny filanao.

Manoratra bot telegrama amin'ny R (fizarana 1): Mamorona bot ary mampiasa izany handefasana hafatra amin'ny telegrama

Amin'ity lahatsoratra voalohany ity dia hojerentsika ny fomba hamoronana bot telegrama ary hampiasa izany handefasana fampahafantarana amin'ny telegrama.

Vokatr'izany dia hanana bot izahay izay hanamarina ny satan'ny fanatanterahana farany ny asa rehetra ao amin'ny Windows Task Scheduler, ary handefa fampandrenesana anao raha misy tsy nahomby.

Saingy ny tanjon'ity andian-dahatsoratra ity dia tsy ny hampianatra anao ny fomba hanoratana bot ho an'ny asa manokana sy tery, fa ny fampahafantarana anao amin'ny ankapobeny ny syntax ny fonosana. telegram.bot, ary ohatra kaody izay ahafahanao manoratra bots mba hamahana ny olanao manokana.

afa-po

Raha liana amin'ny fanadihadiana angon-drakitra ianao dia mety ho liana amin'ny ahy telegrama ΠΈ YouTube fantsona. Ny ankamaroan'ny votoaty dia natokana ho an'ny fiteny R.

  1. Mamorona bot telegrama
  2. Fametrahana fonosana hiasa amin'ny bot telegrama ao amin'ny R
  3. Mandefa hafatra avy amin'i R mankany Telegram
  4. Mametraka fandaharam-potoana hanaovana scan asa
  5. famaranana

Mamorona bot telegrama

Voalohany, mila mamorona bot isika. Izany dia atao amin'ny fampiasana bot manokana BotRay, mandeha rohy ary manorata amin'ny bot /start.

Aorian'izay dia hahazo hafatra misy lisitry ny baiko ianao:

Hafatra avy amin'i 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

Raha te hamorona bot vaovao dia alefaso ny baiko /newbot.

Ny BotFather dia hangataka anao hampiditra ny anaran'ny bot sy ny fidirana.

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

Azonao atao ny mampiditra anarana, fa ny fidirana dia tsy maintsy mifarana amin'ny bot.

Raha nanao tsara ny zava-drehetra ianao dia hahazo ity hafatra manaraka ity:

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

Avy eo dia mila ny mari-pamantarana API voaray ianao, amin'ny ohatra asehoko azy 123456789:abcdefghijklmnopqrstuvwxyz.

Amin'ity dingana ity dia vita ny asa fanomanana amin'ny famoronana bot.

Fametrahana fonosana hiasa amin'ny bot telegrama ao amin'ny R

Heveriko fa efa manana ny fiteny R sy ny tontolo fampandrosoana RStudio napetraka ianao. Raha tsy izany no izy, dia azonao atao ny mijery an'ity tutorial video momba ny fomba fametrahana azy ireo.

Raha hiasa amin'ny Telegram Bot API dia hampiasa ny fonosana R izahay telegram.bot.

Ny fametrahana fonosana amin'ny R dia atao amin'ny fampiasana ny fiasa install.packages(), mba hametrahana ilay fonosana ilaintsika dia ampiasao ny baiko install.packages("telegram.bot").

Afaka mianatra bebe kokoa momba ny fametrahana fonosana isan-karazany avy amin'ny ity video ity.

Aorian'ny fametrahana ny fonosana dia mila mampifandray azy ianao:

library(telegram.bot)

Mandefa hafatra avy amin'i R mankany Telegram

Ny bot noforoninao dia azo jerena ao amin'ny Telegram amin'ny fampiasana ny fidirana voatondro nandritra ny famoronana, raha ny ahy dia izany @my_test_bot.

Alefaso amin'ny bot izay hafatra rehetra, toy ny "Hey bot." Amin'izao fotoana izao, mila izany izahay mba hahazoana ny id amin'ny resakao miaraka amin'ny bot.

Ankehitriny dia manoratra ity code manaraka ity ao amin'ny R.

library(telegram.bot)

# создаём экзСмпляр Π±ΠΎΡ‚Π°
bot <- Bot(token = "123456789:abcdefghijklmnopqrstuvwxyz")

# Π—Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅ΠΌ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Π±ΠΎΡ‚Π΅
print(bot$getMe())

# ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ обновлСния Π±ΠΎΡ‚Π°, Ρ‚.Π΅. список ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹Ρ… Π΅ΠΌΡƒ сообщСний
updates <- bot$getUpdates()

# Π—Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅ΠΌ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Ρ‡Π°Ρ‚Π°
# ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: ΠΏΠ΅Ρ€Π΅Π΄ запросом ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π±ΠΎΡ‚Ρƒ сообщСниС
chat_id <- updates[[1L]]$from_chat_id()

Amin'ny voalohany, mamorona ohatra amin'ny bot-nay izahay miaraka amin'ny fiasa Bot(), ny mari-pamantarana voaray teo aloha dia tsy maintsy ampidirina ao ho tohan-kevitra.

Tsy heverina ho fomba fanao tsara indrindra ny mitahiry ny marika amin'ny kaody, noho izany dia azonao atao ny mitahiry azy amin'ny fari-piainan'ny tontolo iainana ary mamaky azy avy ao. Ao amin'ny fonosana default telegram.bot Ny fanohanana ny fari-piainan'ny tontolo iainana amin'ireto anarana manaraka ireto dia nampiharina: R_TELEGRAM_BOT_ИМЯ_Π’ΠΠ¨Π•Π“Πž_Π‘ΠžΠ’Π. Raha tokony ho ИМЯ_Π’ΠΠ¨Π•Π“Πž_Π‘ΠžΠ’Π soloy ny anarana nofaritanao tamin'ny famoronana, raha ny ahy dia ho variana R_TELEGRAM_BOT_My Test Bot.

Misy fomba maro hamoronana fari-piainan'ny tontolo iainana; Holazaiko aminao ny momba ny iray manerantany sy cross-platform. Mamorona ao amin'ny lahatahiry an-tranonao (azonao atao ny mampiasa ny baiko path.expand("~")) rakitra lahatsoratra misy ny anarana .Renviron. Azonao atao koa ny manao izany amin'ny alalan'ny baiko file.edit(path.expand(file.path("~", ".Renviron"))).

Ary ampio ity andalana manaraka ity.

R_TELEGRAM_BOT_ИМЯ_Π’ΠΠ¨Π•Π“Πž_Π‘ΠžΠ’Π=123456789:abcdefghijklmnopqrstuvwxyz

Avy eo, azonao atao ny mampiasa ny marika voatahiry ao amin'ny fari-piainan'ny tontolo iainana amin'ny fampiasana ny fiasa bot_token(), i.e. toa izao:

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

fomba getUpdates()mamela antsika hahazo fanavaozana bot, izany hoe hafatra nalefa taminy. FOMBA from_chat_id(), dia ahafahanao mahazo ny ID ny chat izay nandefasana ny hafatra. Mila an'ity ID ity izahay handefasana hafatra avy amin'ny bot.

Ankoatra ny chat id avy amin'ny zavatra azo amin'ny fomba getUpdates() mahazo fampahalalana mahasoa hafa koa ianao. Ohatra, fampahalalana momba ny mpampiasa nandefa ny hafatra.

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"

Noho izany, amin'ity dingana ity dia efa manana izay rehetra ilainay izahay handefasana hafatra avy amin'ny bot mankany Telegram. Andao hampiasa ny fomba sendMessage(), izay ilainao hampidiranao ny kaody chat, ny hafatra an-tsoratra, ary ny karazana marika marika hafatra. Ny karazana marika dia mety ho Markdown na HTML ary napetraky ny tohan-kevitra parse_mode.

# ΠžΡ‚ΠΏΡ€Π°Π²ΠΊΠ° сообщСния
bot$sendMessage(chat_id,
                text = "ΠŸΡ€ΠΈΠ²Π΅Ρ‚, *ΠΆΠΈΡ€Π½Ρ‹ΠΉ тСкст* _курсив_",
                parse_mode = "Markdown"
)

Fototry ny fandrafetana markdown:

  • Asongadina miaraka amin'ny *:
    • ohatra: *ΠΆΠΈΡ€Π½Ρ‹ΠΉ ΡˆΡ€ΠΈΡ‚Ρ„*
    • valiny: litera matevina
  • Soso-kevitra amin'ny alalan'ny tsipi-maso:
    • ohatra: _курсив_
    • valiny: nampiana
  • Ny endritsoratra monospace, izay matetika ampiasaina hanasongadinana ny kaody fandaharana, dia voafaritra amin'ny alalan'ny apostrophes - `:
    • ohatra: `monospace font`
    • valiny: ΠΌΠΎΠ½ΠΎΡˆΠΈΡ€ΠΈΠ½Π½Ρ‹ΠΉ ΡˆΡ€ΠΈΡ„Ρ‚

Fototry ny fandrafetana marika HTML:
Ao amin'ny HTML, ianao dia mametaka ny ampahany amin'ny lahatsoratra izay mila asongadina amin'ny marika, ohatra <Ρ‚Π΅Π³>тСкст</Ρ‚Π΅Π³>.

  • <tag> - tenifototra fanokafana
  • - marika famaranana

HTML marika marika

  • <b> - endritsoratra matevina
    • ohatra: <b>ΠΆΠΈΡ€Π½Ρ‹ΠΉ ΡˆΡ€ΠΈΡ„Ρ‚</b>
    • vokatra litera matevina
  • <i> - sora-mandry
    • ohatra: <i>курсив</i>
    • valiny: nampiana
  • β€” ΠΌΠΎΠ½ΠΎΡˆΠΈΡ€ΠΈΠ½Π½Ρ‹ΠΉ ΡˆΡ€ΠΈΡ„Ρ‚
    • ohatra: ΠΌΠΎΠ½ΠΎΡˆΠΈΡ€ΠΈΠ½Π½Ρ‹ΠΉ ΡˆΡ€ΠΈΡ„Ρ‚
    • valiny: ΠΌΠΎΠ½ΠΎΡˆΠΈΡ€ΠΈΠ½Π½Ρ‹ΠΉ ΡˆΡ€ΠΈΡ„Ρ‚

Ho fanampin'ny lahatsoratra dia afaka mandefa votoaty hafa ianao amin'ny fampiasana fomba manokana:

# ΠžΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅
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"
)

Ireo. ohatra ny fampiasana ny fomba sendPhoto() azonao atao ny mandefa grafika voatahiry ho sary noforoninao tamin'ny alΓ lan'ny fonosana ggplot2.

Manamarina ny Windows Task Scheduler ary mandefa fampandrenesana momba ny asa izay nitsahatra tsy ara-dalΓ na

Raha te hiasa amin'ny Windows Task Scheduler ianao dia mila mametraka ilay fonosana taskscheduleR, ary ho fanamorana ny miasa miaraka amin'ny angona, apetraho ny fonosana dplyr.

# Установка ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ²
install.packages(c('taskscheduleR', 'dplyr'))
# ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ²
library(taskscheduleR)
library(dplyr)

Manaraka, mampiasa ny asa taskscheduler_ls() mangataka fampahalalana momba ny asa avy amin'ny mpandrindranay izahay. Mampiasa ny asa filter() avy amin'ny fonosana dplyr Esorinay ao amin'ny lisitry ny asa ireo izay vita soa aman-tsara ary manana sata vokatra farany 0, ary ireo izay mbola tsy natomboka ary manana sata 267011, asa kilemaina ary asa izay mandeha amin'izao fotoana izao.

# Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅ΠΌ список Π·Π°Π΄Π°Ρ‡
task <- task <- taskscheduler_ls() %>%
        filter(! `Last Result`  %in% c("0", "267011") & 
               `Scheduled Task State` == "Enabled" & 
               Status != "Running") %>%
        select(TaskName) %>%
        unique() %>%
        unlist() %>%
        paste0(., collapse = "n")

Ao amin'ny zavatra task Manana lisitr'ireo asa tsy nahomby izahay izao, mila mandefa ity lisitra ity amin'ny Telegram.

Raha jerena amin'ny antsipiriany bebe kokoa ny baiko tsirairay dia:

  • filter() - sivana ny lisitry ny asa araka ny fepetra voalaza etsy ambony
  • select() - saha iray ihany no mamela ny latabatra misy ny anaran'ny asa
  • unique() - manala anarana mitovy
  • unlist() β€” mamadika ny tsanganana latabatra voafantina ho vΓ©ctor
  • paste0() - mampifandray ny anaran'ny asa amin'ny andalana iray, ary mametraka ny fahana andalana ho separator, i.e. n.

Ny hany sisa ho antsika dia ny mandefa ity valiny ity amin'ny alΓ lan'ny telegrama.

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

Noho izany, amin'izao fotoana izao ny code bot dia toa izao:

Kaody bot famerenana asa

# ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΊΠ΅Ρ‚Π°
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"
  )

}

Rehefa mampiasa ny ohatra etsy ambony dia soloy amin'ny kaody ny mari-pamantarana bot-nao sy ny ID-nao amin'ny chat.

Azonao atao ny manampy fepetra amin'ny fanivanana asa, ohatra, manamarina ireo asa noforoninao ihany, ankoatry ny rafitra.

Azonao atao ihany koa ny mametraka ny toe-javatra isan-karazany ao amin'ny rakitra fanaingoana misaraka, ary mitahiry ny chat ID sy ny famantarana ao. Azonao atao ny mamaky ny config, ohatra, mampiasa ny fonosana configr.

Ohatra amin'ny config

[telegram_bot]
;настройки Ρ‚Π΅Π»Π΅Π³Ρ€Π°ΠΌ Π±ΠΎΡ‚Π° ΠΈ Ρ‡Π°Ρ‚Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ увСдомлСния
chat_id=12345678
bot_token=123456789:abcdefghijklmnopqrstuvwxyz"

Ohatra iray amin'ny famakiana variables avy amin'ny config ao amin'ny 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

Mametraka fandaharam-potoana hanaovana scan asa

Ny dingana fametrahana ny fandefasana script amin'ny fandaharam-potoana dia voafaritra amin'ny antsipiriany bebe kokoa amin'ity lahatsoratra. Ny dingana tokony harahina amin'izany ihany no holazaiko eto. Raha misy dingana tsy mazava aminao dia jereo ny lahatsoratra izay nomeko rohy.

Andao atao hoe nitahiry ny code bot-nay tao anaty rakitra iray izahay check_bot.R. Mba hanomanana ity rakitra ity handeha tsy tapaka, araho ireto dingana ireto:

  1. Soraty ny lalana mankany amin'ny lahatahiry izay ametrahana an'i R ao amin'ny fari-pahalalana Path; amin'ny Windows, ny lalana dia ho toy izao: C:Program FilesRR-4.0.2bin.
  2. Mamorona rakitra bat azo tanterahana miaraka amin'ny andalana iray monja R CMD BATCH C:rscriptscheck_botcheck_bot.R. Soloy C:rscriptscheck_botcheck_bot.R mankany amin'ny lalana feno mankany amin'ny rakitra R anao.
  3. Avy eo, ampiasao ny Windows Task Scheduler mba hametrahana fandaharam-potoana fandefasana, ohatra, isaky ny antsasak'adiny.

famaranana

Ao amin'ity lahatsoratra ity, noheverinay ny fomba hamoronana bot ary hampiasa izany handefasana fampandrenesana isan-karazany amin'ny telegrama.

Nofaritako ny asa fanaraha-maso ny Windows Task Scheduler, saingy azonao atao ny mampiasa ny fitaovana ato amin'ity lahatsoratra ity handefasana fampandrenesana, manomboka amin'ny toetr'andro mankany amin'ny quote stock amin'ny fifanakalozana, satria R dia ahafahanao mifandray amin'ny loharanom-baovao marobe.

Ao amin'ny lahatsoratra manaraka dia hojerentsika ny fomba hanampiana baiko sy klavier amin'ny bot mba tsy handefasana fampandrenesana fotsiny, fa hanao hetsika sarotra kokoa.

Source: www.habr.com

Add a comment