Waxaan ku qornaa bot telegram luqadda R (qaybta 1): Samee bot oo u dir fariimaha telegram adoo isticmaalaya

Dhageystayaasha Telegram ayaa si aad ah u koraya maalin kasta, tan waxaa fududeeyay ku habboonaanta farriinta, joogitaanka kanaalada, sheekeysiga, iyo dabcan awoodda abuurista bots.

Bots-ka waxaa loo isticmaali karaa ujeedooyin kala duwan, laga bilaabo isgaadhsiinta tooska ah ee macaamiishaada ilaa maaraynta hawlahaaga.

Asal ahaan, waxaad isticmaali kartaa telegram si aad ufuliso hawlgal kasta iyada oo loo marayo bot: dir ama codso xogta, ku socodsii hawlaha server-ka, ururinta macluumaadka kaydka xogta, u dir emails, iyo wixii la mid ah.

Waxaan qorsheynayaa inaan qoro maqaallo taxane ah oo ku saabsan sida loola shaqeeyo telegram bot API, oo qor bots si ay ugu habboonaato baahiyahaaga.

Waxaan ku qornaa bot telegram luqadda R (qaybta 1): Samee bot oo u dir fariimaha telegram adoo isticmaalaya

Maqaalkan ugu horreeya waxaan ku ogaan doonaa sida loo sameeyo bot telegram oo aan u isticmaalno si aan ogeysiisyada ugu dirno telegram.

Natiijo ahaan, waxaan haysan doonaa bot kaas oo hubin doona heerka fulinta ugu dambeeya ee dhammaan hawlaha Jadwalka Hawsha Windows, oo kuu soo diri doona ogeysiisyo haddii mid ka mid ah uu ku guuldareysto.

Laakiin ujeeddada maqaalladan taxanaha ah maaha in lagu baro sida loo qoro bot hawl gaar ah oo cidhiidhi ah, laakiin si guud ahaan laguugu baro ereyada xidhmada telegram.bot, iyo tusaalooyin kood ah oo aad ku qori karto bots si aad u xalliso dhibaatooyinkaaga.

Tusmo

Haddii aad xiisaynayso falanqaynta xogta, waxaa laga yaabaa inaad xiisaynayso aniga telegram ΠΈ youtube kanaalada. Inta badan waxa ku jira waxa u heellan luqadda R.

  1. Abuuritaanka bot telegram
  2. Ku rakibida xirmo loogu shaqeynayo bot telegram gudaha R
  3. Fariimaha R ka diraya Telegram
  4. Dejinta jadwal lagu socodsiinayo baadhista hawsha
  5. gunaanad

Abuuritaanka bot telegram

Marka hore, waxaan u baahanahay inaan abuurno bot. Tan waxaa lagu sameeyaa iyadoo la isticmaalayo bot gaar ah BotAabbe, u tag link oo u qor bot /start.

Intaa ka dib waxaad heli doontaa fariin leh liis amarrada:

Fariinta 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

Si aad u abuurto bot cusub, dir amarka /newbot.

BotFather ayaa ku weydiin doona inaad geliso magaca bot-ka oo aad gasho.

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

Waxaad geli kartaa magac kasta, laakiin galitaanka waa inuu ku dhammaadaa bot.

Haddii aad wax walba si sax ah u samaysay, waxaad heli doontaa fariintan soo socota:

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

Marka xigta waxaad u baahan doontaa calaamada API ee la helay, tusaale ahaan waa 123456789:abcdefghijklmnopqrstuvwxyz.

Tallaabadan, shaqada diyaarinta ee abuurista bot waa la dhammeeyaa.

Ku rakibida xirmo loogu shaqeynayo bot telegram gudaha R

Waxaan u malaynayaa inaad hore u haysatey luqadda R iyo jawiga horumarinta RStudio. Haddii taasi aysan ahayn kiiska, markaa waad eegi kartaa tan barashada fiidiyowga sida loo rakibo.

Si aan ula shaqeyno Telegram Bot API waxaan isticmaali doonaa xirmada R telegram.bot.

Ku rakibida baakadaha R waxaa lagu sameeyaa iyadoo la isticmaalayo shaqada install.packages(), si loo rakibo xirmada aan u baahanahay, isticmaal amarka install.packages("telegram.bot").

Waxaad ka baran kartaa wax badan oo ku saabsan rakibidda baakado kala duwan muuqaalkan.

Kadib rakibidda xirmada, waxaad u baahan tahay inaad ku xirto:

library(telegram.bot)

Fariimaha R ka diraya Telegram

Bot-ka aad abuurtay waxaa laga heli karaa Telegram iyadoo la isticmaalayo gelitaanka lagu cayimay inta lagu jiro abuurista, xaaladdeyda waa @my_test_bot.

U dir bot fariin kasta, sida "Hey bot." Waqtigan xaadirka ah, waxaan u baahanahay tan si aan u helno aqoonsiga la sheekaysiga bot-ka.

Hadda waxaan ku qoreynaa koodka soo socda R.

library(telegram.bot)

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

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

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

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

Markii hore, waxaan abuurnaa tusaale bot-kayaga oo leh shaqada Bot(), calaamadii hore loo helay waa in loo gudbiyaa dood ahaan.

Looma tixgeliyo habka ugu wanaagsan ee lagu kaydiyo calaamada koodka, si aad ugu kaydiso doorsoomayaasha deegaanka oo aad ka akhrido. Sida caadiga ah ee xirmada telegram.bot Taageerada doorsoomayaasha deegaanka ee magacyada soo socda ayaa la fuliyay: R_TELEGRAM_BOT_ИМЯ_Π’ΠΠ¨Π•Π“Πž_Π‘ΠžΠ’Π... Halkii ИМЯ_Π’ΠΠ¨Π•Π“Πž_Π‘ΠžΠ’Π Beddel magaca aad qeexday markii la abuurayo, xaaladdeyda waxay noqon doontaa doorsoome R_TELEGRAM_BOT_My Test Bot.

Waxaa jira dhowr siyaabood oo loo abuuri karo doorsoome deegaan, waxaan kaaga sheegi doonaa midka ugu caalamisan iyo midka isku gudba. Ku samee hagaha gurigaaga (waxaad ka heli kartaa adiga oo isticmaalaya amarka path.expand("~")) qoraal magaca .Renviron. Waxa kale oo aad samayn kartaa tan adoo isticmaalaya amarka file.edit(path.expand(file.path("~", ".Renviron"))).

Oo ku dar xariiqda soo socota.

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

Marka xigta, waxaad isticmaali kartaa calaamada lagu keydiyay doorsoomiyaha deegaanka adoo isticmaalaya shaqada bot_token(), i.e. sida tan:

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

Habka getUpdates()waxay noo ogolaataa inaan helno bot-ka cusub, i.e. fariimaha loo soo diray. Habka from_chat_id(), waxay kuu ogolaanaysaa inaad hesho aqoonsiga wada sheekaysiga fariinta laga soo diray. Waxaan u baahanahay aqoonsigan si aan fariimaha uga soo dirno bot-ka.

Waxa intaa dheer in chat id ka shayga helay habka getUpdates() waxaad sidoo kale heleysaa macluumaad kale oo faa'iido leh. Tusaale ahaan, macluumaadka ku saabsan isticmaalaha soo diray fariinta.

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"

Marka, marxaladan waxaan horey u haysanay wax walba oo aan u baahanahay si aan fariin uga dirno bot ilaa Telegram. Aynu isticmaalno habka sendMessage(), kaas oo aad u baahan tahay inaad ku gudbiso aqoonsiga wada sheekaysiga, qoraalka fariinta, iyo nooca fariinta qoraalka. Nooca calaamadayntu waxa uu noqon karaa Markdown ama HTML waxaana dejiya dooda parse_mode.

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

Aasaaska habaynta calaamadaynta:

  • Farta adag waxaa lagu muujiyay *:
    • Tusaale: *ΠΆΠΈΡ€Π½Ρ‹ΠΉ ΡˆΡ€ΠΈΡ‚Ρ„*
    • natiijo: far geesinimo leh
  • Farta farcanka waxaa lagu muujiyey hoosta:
    • Tusaale: _курсив_
    • natiijo: farta ku qoran
  • Farta monospace, oo inta badan loo isticmaalo in lagu muujiyo summada barnaamijka, waxa lagu qeexaa iyada oo la isticmaalayo rukunno - `:
    • tusaale: `monospace font`
    • natiijo: ΠΌΠΎΠ½ΠΎΡˆΠΈΡ€ΠΈΠ½Π½Ρ‹ΠΉ ΡˆΡ€ΠΈΡ„Ρ‚

Aasaaska habaynta HTML:
HTML, waxaad ku duubtaa qaybta qoraalka ee u baahan in lagu iftiimiyo tags, tusaale ahaan <Ρ‚Π΅Π³>тСкст</Ρ‚Π΅Π³>.

  • <tag> - sumadda furitaanka
  • - xidhitaanka sumadda

HTML markup tags

  • <b> - far geesinimo leh
    • Tusaale: <b>ΠΆΠΈΡ€Π½Ρ‹ΠΉ ΡˆΡ€ΠΈΡ„Ρ‚</b>
    • saameyn far geesinimo leh
  • <i> - fargeeto
    • Tusaale: <i>курсив</i>
    • natiijo: farta ku qoran
  • β€” ΠΌΠΎΠ½ΠΎΡˆΠΈΡ€ΠΈΠ½Π½Ρ‹ΠΉ ΡˆΡ€ΠΈΡ„Ρ‚
    • tusaale: ΠΌΠΎΠ½ΠΎΡˆΠΈΡ€ΠΈΠ½Π½Ρ‹ΠΉ ΡˆΡ€ΠΈΡ„Ρ‚
    • natiijo: ΠΌΠΎΠ½ΠΎΡˆΠΈΡ€ΠΈΠ½Π½Ρ‹ΠΉ ΡˆΡ€ΠΈΡ„Ρ‚

Marka lagu daro qoraalka, waxaad diri kartaa macluumaad kale adoo isticmaalaya habab gaar ah:

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

Kuwaas. tusaale ahaan iyadoo la isticmaalayo habka sendPhoto() waxaad soo diri kartaa garaaf u kaydsan sawir ahaan aad u samaysay adigoo isticmaalaya xidhmada ggplot2.

Hubinta Jadwalka Hawsha Windows iyo dirida ogaysiisyada ku saabsan hawlihii si aan caadi ahayn u joojiyay

Si aad ula shaqeyso Jadwalka Hawsha Windows waxaad u baahan tahay inaad xirmo ku rakibto taskscheduleR, iyo si ay ugu sahlanaato ku shaqeynta xogta, ku rakib xirmada dplyr.

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

Marka xigta, adoo isticmaalaya shaqada taskscheduler_ls() waxaan ka codsanaa macluumaadka ku saabsan hawlaha jadwalkayaga. Isticmaalka shaqada filter() ka xirmada dplyr Waxaan ka saareynaa liiska hawlaha kuwa si guul leh loo dhammeeyey oo leh natiijadii ugu dambeysay ee 0, iyo kuwa aan waligood la bilaabin oo leh darajada 267011, hawlaha naafada ah, iyo hawlaha hadda socda.

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

In xarunta task Hadda waxaan haynaa liis hawlo ah oo fashilmay, waxaan u baahanahay inaan liiskan u dirno Telegram.

Haddii aan si faahfaahsan u eegno amar kasta, markaa:

  • filter() - shaandhaynta liiska hawlaha si waafaqsan shuruudaha kor lagu sharaxay
  • select() - waxay ka tagtaa hal beer oo kaliya miiska oo leh magaca hawlaha
  • unique() - waxay meesha ka saartaa magacyo nuqul ah
  • unlist() - waxay u beddeshaa tiirka miiska la doortay oo u beddela vector
  • paste0() - wuxuu isku xiraa magacyada hawlaha hal xariiq, oo wuxuu dhigayaa khadka quudinta sida kala-soocida, i.e. n.

Waxa noo hadhay oo dhan waa in aan natiijadan ku dirno telegram.

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

Markaa, wakhtigan xaadirka ah bot code-ku wuxuu u eg yahay sidan:

Hawsha dib u eegista bot code

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

}

Markaad isticmaalayso tusaalaha sare, ku beddel calaamada bot-kaaga iyo aqoonsigaaga wada sheekaysiga koodka.

Waxaad ku dari kartaa shuruudaha shaandhaynta hawlaha, tusaale ahaan, hubinta kaliya hawlaha aad abuurtay, marka laga reebo kuwa nidaamka.

Waxa kale oo aad ku dhejin kartaa jaangooyooyin kala duwan faylka qaabeynta gaar ah, oo ku kaydi aqoonsiga wada sheekaysiga iyo calaamada ku jira. Waxaad akhrin kartaa qaabeynta, tusaale ahaan, adigoo isticmaalaya xirmada configr.

Tusaale ini config

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

Tusaalaha akhriska doorsoomayaasha laga soo bilaabo qaabaynta ku jirta 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

Dejinta jadwal lagu socodsiinayo baadhista hawsha

Habka dejinta bilowga qoraallada ee jadwalka ayaa si faahfaahsan loogu sharraxay tan maqaal. Halkan waxaan ku tilmaami doonaa oo kaliya tillaabooyinka loo baahan yahay in la raaco. Haddii mid ka mid ah tillaabooyinka aysan kuu caddayn, ka dib tixraac maqaalka aan bixiyay xiriirka.

Aynu ka soo qaadno inaan ku kaydsanay koodka bot-kayaga fayl check_bot.R. Si aad u ballansato in faylkan uu si joogto ah u shaqeeyo, raac talaabooyinkan:

  1. Qor jidka loo maro galka uu R ku rakiban yahay doorsoomiyaha nidaamka Jidka; gudaha Windows, jidku wuxuu noqon doonaa sidan oo kale: C:Program FilesRR-4.0.2bin.
  2. Samee fayl fiidmeerta la fulin karo oo leh hal xariiq oo keliya R CMD BATCH C:rscriptscheck_botcheck_bot.R. Beddel C:rscriptscheck_botcheck_bot.R jidka buuxa ee faylkaaga R.
  3. Marka xigta, isticmaal Jadwalka Hawsha Windows si aad u dejiso jadwalka bilowga, tusaale ahaan, nus saac kasta.

gunaanad

Maqaalkan, waxaan ku ogaanay sida loo abuuro bot oo aan u isticmaalno si aan ugu dirno ogeysiisyo kala duwan oo telegram ah.

Waxaan ku tilmaamay hawsha la socodka Jadwalka Hawsha Windows, laakiin waxaad isticmaali kartaa walxaha maqaalkan si aad u soo dirto ogeysiis kasta, laga bilaabo saadaasha cimilada ilaa qiimaha saamiyada ee sarrifka saamiyada, sababtoo ah R wuxuu kuu ogolaanayaa inaad ku xirto tiro aad u badan oo ilo xog ah.

Maqaalka soo socda, waxaan ku ogaan doonaa sida loogu daro amarrada iyo kumbuyuutarka bot si aysan u soo diri karin ogeysiisyo, laakiin sidoo kale u sameyso ficillo adag.

Source: www.habr.com

Add a comment