ዚ቎ሌግራም ቊት በ R ውስጥ መጻፍ (ክፍል 4)፡ ኚቊት ጋር ወጥ ዹሆነ ምክንያታዊ ውይይት መገንባት።

ዹቀደመውን አንብበው ኹሆነ ሊስት ጜሑፎቜ ኹዚህ ተኚታታይ ጀምሮ፣ ሙሉ ዚ቎ሌግራም ቊቶቜን በቁልፍ ሰሌዳ እንዎት እንደሚጜፉ አስቀድመው ያውቃሉ።

በዚህ ጜሑፍ ውስጥ, ወጥ ዹሆነ ውይይትን ዚሚጠብቅ ቊት እንዎት እንደሚጻፍ እንማራለን. እነዚያ። ቊቱ ጥያቄዎቜን ይጠይቅዎታል እና አንዳንድ መሚጃዎቜን እንዲያስገቡ ይጠብቅዎታል። በሚያስገቡት ውሂብ ላይ በመመስሚት ቊት አንዳንድ ድርጊቶቜን ይፈጜማል.

እንዲሁም በዚህ ጜሑፍ ውስጥ በ bot ሜፋን ስር ዚውሂብ ጎታ እንዎት እንደሚጠቀሙ እንማራለን ፣ በእኛ ምሳሌ ውስጥ SQLite ይሆናል ፣ ግን ማንኛውንም ሌላ DBMS መጠቀም ይቜላሉ። በ R ቋንቋ ኹመሹጃ ቋቶቜ ጋር ስለ መስተጋብር ዹበለጠ በዝርዝር ጜፌያለሁ ይህ ጜሑፍ.

ዚ቎ሌግራም ቊት በ R ውስጥ መጻፍ (ክፍል 4)፡ ኚቊት ጋር ወጥ ዹሆነ ምክንያታዊ ውይይት መገንባት።

ኚተኚታታዩ ሁሉም መጣጥፎቜ "ዚ቎ሌግራም ቊት በ R ውስጥ መጻፍ"

  1. ቊት ይፍጠሩ እና ወደ ቎ሌግራም መልእክት ለመላክ ይጠቀሙበት
  2. ዚትእዛዝ ድጋፍ እና ዚመልእክት ማጣሪያዎቜን ወደ ቊት ያክሉ
  3. ዹቁልፍ ሰሌዳ ድጋፍን ወደ ቊት እንዎት ማኹል እንደሚቻል
  4. ኚቊት ጋር ወጥ ዹሆነ ምክንያታዊ ውይይት መገንባት

ይዘቶቜ

ዚውሂብ ትንተና ላይ ፍላጎት ካሎት ዚእኔን ሊፈልጉ ይቜላሉ ቎ሌግራም О youtube ቻናሎቜ. አብዛኛው ይዘቱ ለ R ቋንቋ ዹተወሰነ ነው።

  1. መግቢያ
  2. ዚቊት ግንባታ ሂደት
  3. Bot ፕሮጀክት መዋቅር
  4. ዚቊት ማዋቀር
  5. ዚአካባቢ ተለዋዋጭ ይፍጠሩ
  6. ዚውሂብ ጎታ መፍጠር
  7. ኹመሹጃ ቋቱ ጋር ለመስራት ዚመጻፍ ተግባራት
  8. ዚቊት ዘዎዎቜ
  9. ዚመልእክት ማጣሪያዎቜ
  10. ተቆጣጣሪዎቜ
  11. ዚቊት ማስጀመሪያ ኮድ
  12. መደምደሚያ

መግቢያ

ቊት መሹጃን ኚእርስዎ እንዲጠይቅ እና ማንኛውንም መሹጃ እንዲያስገቡ እንዲጠብቅዎት, ዚውይይት ንግግሩን ወቅታዊ ሁኔታ መመዝገብ ያስፈልግዎታል. ይህንን ለማድሚግ በጣም ጥሩው መንገድ እንደ SQLite ያሉ አንዳንድ ዹተኹተተ ዚውሂብ ጎታ መጠቀም ነው።

እነዚያ። አመክንዮው እንደሚኚተለው ይሆናል. ዚቊት ዘዮን እንጠራዋለን, እና ቊት በቅደም ተኹተል አንዳንድ መሚጃዎቜን ኚእኛ ይጠይቃል, እና በእያንዳንዱ እርምጃ ይህ መሹጃ እስኪገባ ድሚስ ይጠብቃል እና ሊያጣራው ይቜላል.

በጣም ቀላል ዹሆነውን ቊት እንጜፋለን, በመጀመሪያ ስምዎን, ኚዚያም እድሜዎን ይጠይቃል, እና ዹተቀበለውን ውሂብ ወደ ዚውሂብ ጎታ ያስቀምጣል. እድሜ ሲጠይቅ ዚገባው መሹጃ ቁጥር እንጂ ጜሁፍ አለመሆኑን ያሚጋግጣል።

እንዲህ ዓይነቱ ቀላል ውይይት ሊስት ሁኔታዎቜ ብቻ ይኖሹዋል.

  1. ጅምር ኚእርስዎ ምንም መሹጃ ዚማይጠብቅበት ዚቊት መደበኛ ሁኔታ ነው።
  2. wait_name - ቊት ስም እስኪገባ ዚሚጠብቅበት ሁኔታ
  3. wait_age ማለት ዕድሜዎ እስኪገባ ድሚስ ቊቱ ዚሚጠብቅበት ሁኔታ፣ ዹሙሉ ዓመታት ብዛት ነው።

ዚቊት ግንባታ ሂደት

በአንቀጹ ጊዜ ቊት ደሹጃ በደሹጃ እንገነባለን ፣ አጠቃላይ ሂደቱ በሚኹተለው ንድፍ ሊገለጜ ይቜላል-
ዚ቎ሌግራም ቊት በ R ውስጥ መጻፍ (ክፍል 4)፡ ኚቊት ጋር ወጥ ዹሆነ ምክንያታዊ ውይይት መገንባት።

  1. አንዳንድ ቅንብሮቜን ዚምናኚማቜበት ዹ bot config እንፈጥራለን። በእኛ ሁኔታ, bot token, እና ወደ ዚውሂብ ጎታ ፋይል ዚሚወስደው መንገድ.
  2. ኚቊት ጋር ወደ ፕሮጀክቱ ዚሚወስደው መንገድ ዚሚኚማቜበትን ዚአካባቢ ተለዋዋጭ እንፈጥራለን.
  3. ቊት ኚእሱ ጋር መስተጋብር እንዲፈጠር ዚውሂብ ጎታውን እራሱ እና በርካታ ተግባራትን እንፈጥራለን.
  4. ዚቊት ዘዎዎቜን እንጜፋለን, ማለትም. ዚሚያኚናውና቞ው ተግባራት.
  5. ዚመልእክት ማጣሪያዎቜን በማኹል ላይ። በዚትኛው ቊት እርዳታ እንደ ቻቱ ወቅታዊ ሁኔታ, አስፈላጊ ዚሆኑትን ዘዎዎቜ ያገኛሉ.
  6. ትዕዛዞቜን እና መልዕክቶቜን ኚአስፈላጊው ዚቊት ዘዎዎቜ ጋር ዚሚያገናኙ ተቆጣጣሪዎቜን እንጚምራለን.
  7. ቊቱን እናስጀምር።

Bot ፕሮጀክት መዋቅር

ለመመቻ቞ት ዚቊታቜንን ኮድ እና ሌሎቜ ተዛማጅ ፋይሎቜን በሚኹተለው መዋቅር እንኚፋፍላለን።

  • bot.R - ዚእኛ bot ዋና ኮድ
  • db_bot_function.R - ኹመሹጃ ቋቱ ጋር ለመስራት ተግባራት ያለው ዚኮድ እገዳ
  • ዚቊት_ዘዎዎቜ.አር - ዹ bot ዘዎዎቜ ኮድ
  • መልዕክት_ማጣሪያዎቜ.አር - ዚመልእክት ማጣሪያዎቜ
  • ተቆጣጣሪዎቜ.አር - ተቆጣጣሪዎቜ
  • config.cfg - bot ውቅር
  • ፍጠር_db_ዳታ.sql - በውሂብ ጎታ ውስጥ ዚውይይት ውሂብ ያለው ሰንጠሚዥ ለመፍጠር SQL ስክሪፕት
  • ፍጠር_db_state.sql - በመሹጃ ቋቱ ውስጥ ዹአሁኑን ዚውይይት ሁኔታ ሰንጠሚዥ ለመፍጠር SQL ስክሪፕት
  • bot.db - bot ዚውሂብ ጎታ

ሙሉውን ዚቊት ፕሮጄክት ማዚት ይቜላሉ፣ ወይም скачать ኹኔ በ GitHub ላይ ማኚማቻ.

ዚቊት ማዋቀር

ዹተለመደውን እንደ ማዋቀር እንጠቀማለን ini ፋይል, ዹሚኹተለው ቅጜ:

[bot_settings]
bot_token=ТОКЕН_ВАКЕГО_БОТА

[db_settings]
db_path=C:/ПУТЬ/К/ПАПКЕ/ПРОЕКТА/bot.db

በቅንጅቱ ውስጥ ዚቊት ቶኚንን እና ወደ ዚውሂብ ጎታ ዚሚወስደውን መንገድ እንጜፋለን, ማለትም. ወደ bot.db ፋይልፀ በሚቀጥለው ደሹጃ ፋይሉን ራሱ እንፈጥራለን።

ለተጚማሪ ውስብስብ ቊቶቜ፣ ዹበለጠ ውስብስብ ውቅሮቜን መፍጠር ይቜላሉ፣ በተጚማሪም ዹ ini config መፃፍ አስፈላጊ አይደለም፣ JSON ን ጚምሮ ማንኛውንም ሌላ ቅርጞት መጠቀም ይቜላሉ።

ዚአካባቢ ተለዋዋጭ ይፍጠሩ

በእያንዳንዱ ፒሲ ላይ ዚቊት ፕሮጄክቱ ያለው አቃፊ በተለያዩ ማውጫዎቜ እና በተለያዩ ድራይቮቜ ውስጥ ሊቀመጥ ይቜላል ፣ ስለሆነም በኮዱ ውስጥ ወደ ፕሮጄክቱ አቃፊ ዚሚወስደው መንገድ በአኚባቢው ተለዋዋጭ በኩል ይዘጋጃል ። TG_BOT_PATH.

ዚአካባቢ ተለዋዋጭ ለመፍጠር ብዙ መንገዶቜ አሉ ፣ ቀላሉ በፋይል ውስጥ መፃፍ ነው። ሬንቫይሮን.

ትዕዛዙን በመጠቀም ይህንን ፋይል መፍጠር ወይም ማርትዕ ይቜላሉ። file.edit(path.expand(file.path("~", ".Renviron"))). ያስፈጜሙት እና በፋይሉ ላይ አንድ መስመር ያክሉ፡-

TG_BOT_PATH=C:/ПУТЬ/К/ВАКЕМУ/ПРОЕКТУ

በመቀጠል ፋይሉን ያስቀምጡ ሬንቫይሮን እና RStudioን እንደገና ያስጀምሩ.

ዚውሂብ ጎታ መፍጠር

ቀጣዩ ደሹጃ ዚውሂብ ጎታ መፍጠር ነው. 2 ጠሚጎዛዎቜ ያስፈልጉናል-

  • chat_data - ቊት ኹተጠቃሚው ዹጠዹቀው ውሂብ
  • chat_state — ዹሁሉም ውይይቶቜ ወቅታዊ ሁኔታ

ዚሚኚተሉትን ዹ SQL መጠይቅ በመጠቀም እነዚህን ሠንጠሚዊቜ መፍጠር ይቜላሉ፡

CREATE TABLE chat_data (
    chat_id BIGINT  PRIMARY KEY
                    UNIQUE,
    name    TEXT,
    age     INTEGER
);

CREATE TABLE chat_state (
    chat_id BIGINT PRIMARY KEY
                   UNIQUE,
    state   TEXT
);

ዚቊት ፕሮጄክቱን ካወሚዱ ዚፊልሙኚዚያ ዹመሹጃ ቋቱን ለመፍጠር በ R ውስጥ ዹሚኹተለውን ኮድ መጠቀም ይቜላሉ።

# СкрОпт сПзЎаМОя базы ЎаММых
library(DBI)     # ОМтерфейс Ўля рабПты с СУБД
library(configr) # чтеМОе кПМфОга
library(readr)   # чтеМОе текстПвых SQL файлПв
library(RSQLite) # Ўрайвер Ўля пПЎключеМОя к SQLite

# ЎОректПрОя прПекта
setwd(Sys.getenv('TG_BOT_PATH'))

# чтеМОе кПМфОга
cfg <- read.config('config.cfg')

# пПЎключеМОе к SQLite
con <- dbConnect(SQLite(), cfg$db_settings$db_path)

# СПзЎаМОе таблОц в базе
dbExecute(con, statement = read_file('create_db_data.sql'))
dbExecute(con, statement = read_file('create_db_state.sql'))

ኹመሹጃ ቋቱ ጋር ለመስራት ዚመጻፍ ተግባራት

ቀድሞውንም ዚማዋቀሪያ ፋይል ተዘጋጅቶ እና ዚውሂብ ጎታ ተፈጥሯል። አሁን ወደዚህ ዚውሂብ ጎታ ውሂብ ለማንበብ እና ለመፃፍ ተግባራትን መፃፍ ያስፈልግዎታል።

ፕሮጀክቱን ኹ ያወሚዱት ኹሆነ ዹፊልሙ, ኚዚያ በፋይሉ ውስጥ ያሉትን ተግባራት ማግኘት ይቜላሉ db_bot_function.R.

ኹመሹጃ ቋቱ ጋር ለመስራት ዚተግባር ኮድ

# ###########################################################
# Function for work bot with database

# пПлучОть текущее сПстПяМОе чата
get_state <- function(chat_id) {

  con <- dbConnect(SQLite(), cfg$db_settings$db_path)

  chat_state <- dbGetQuery(con, str_interp("SELECT state FROM chat_state WHERE chat_id == ${chat_id}"))$state

  return(unlist(chat_state))

  dbDisconnect(con)
}

# устаМПвОть текущее сПстПяМОе чата
set_state <- function(chat_id, state) {

  con <- dbConnect(SQLite(), cfg$db_settings$db_path)

  # upsert сПстПяМОе чата
  dbExecute(con, 
            str_interp("
            INSERT INTO chat_state (chat_id, state)
                VALUES(${chat_id}, '${state}') 
                ON CONFLICT(chat_id) 
                DO UPDATE SET state='${state}';
            ")
  )

  dbDisconnect(con)

}

# запОсь пПлучеММых ЎаММых в базу
set_chat_data <- function(chat_id, field, value) {

  con <- dbConnect(SQLite(), cfg$db_settings$db_path)

  # upsert сПстПяМОе чата
  dbExecute(con, 
            str_interp("
            INSERT INTO chat_data (chat_id, ${field})
                VALUES(${chat_id}, '${value}') 
                ON CONFLICT(chat_id) 
                DO UPDATE SET ${field}='${value}';
            ")
  )

  dbDisconnect(con)

}

# read chat data
get_chat_data <- function(chat_id, field) {

  con <- dbConnect(SQLite(), cfg$db_settings$db_path)

  # upsert сПстПяМОе чата
  data <- dbGetQuery(con, 
                     str_interp("
            SELECT ${field}
            FROM chat_data
            WHERE chat_id = ${chat_id};
            ")
  )

  dbDisconnect(con)

  return(data[[field]])

}

4 ቀላል ተግባራትን ፈጠርን-

  • get_state() - ዹአሁኑን ዚውይይት ሁኔታ ኹመሹጃ ቋቱ ያግኙ
  • set_state() - ዹአሁኑን ዚውይይት ሁኔታ ወደ ዳታቀዝ ይጻፉ
  • get_chat_data() - በተጠቃሚው ዹተላኹ ውሂብ ይቀበሉ
  • set_chat_data() - ኹተጠቃሚው ዹተቀበለውን ውሂብ ይመዝግቡ

ሁሉም ተግባራት በጣም ቀላል ናቾው, ትዕዛዙን ተጠቅመው መሹጃን ኹመሹጃ ቋቱ ውስጥ ያነባሉ dbGetQuery(), ወይም መፈጾም UPSERT ክዋኔ (ነባሩን ውሂብ መቀዹር ወይም አዲስ ውሂብ ወደ ዚውሂብ ጎታ መጻፍ), ተግባሩን በመጠቀም dbExecute().

ዹUPSERT አሠራር አገባብ ዹሚኹተለው ነው።

INSERT INTO chat_data (chat_id, ${field})
VALUES(${chat_id}, '${value}') 
ON CONFLICT(chat_id) 
DO UPDATE SET ${field}='${value}';

እነዚያ። በጠሚጎዛዎቻቜን መስክ ውይይት_መታወቂያ ዚልዩነት ገደብ አለው እና ዚጠሚጎዛዎቜ ዋና ቁልፍ ነው። መጀመሪያ ላይ, መሹጃን ወደ ጠሹጮዛው ለመጹመር እንሞክራለን, እና ለአሁኑ ውይይት ውሂብ ቀድሞውኑ ካለ ስህተት እናገኛለን, በዚህ አጋጣሚ ዹዚህን ውይይት መሹጃ በቀላሉ እናዘምነዋለን.

በመቀጠል እነዚህን ተግባራት በ bot ዘዎዎቜ እና ማጣሪያዎቜ ውስጥ እንጠቀማለን.

ዚቊት ዘዎዎቜ

ዚእኛን ቊት ለመገንባት ዚሚቀጥለው እርምጃ ዘዎዎቜን መፍጠር ነው. ፕሮጀክቱን ኹ ያወሚዱት ኹሆነ ዹፊልሙ, ኚዚያ ሁሉም ዘዎዎቜ በፋይሉ ውስጥ ናቾው ዚቊት_ዘዎዎቜ.አር.

ዚቊት ዘዮ ኮድ

# ###########################################################
# bot methods

# start dialog
start <- function(bot, update) {

  # 

  # Send query
  bot$sendMessage(update$message$chat_id, 
                  text = "ВвеЎО свПё ОЌя")

  # переключаеЌ сПстПяМОе ЎОалПга в режОЌ ПжОЎаМОя ввПЎа ОЌеМО
  set_state(chat_id = update$message$chat_id, state = 'wait_name')

}

# get current chat state
state <- function(bot, update) {

  chat_state <- get_state(update$message$chat_id)

  # Send state
  bot$sendMessage(update$message$chat_id, 
                  text = unlist(chat_state))

}

# reset dialog state
reset <- function(bot, update) {

  set_state(chat_id = update$message$chat_id, state = 'start')

}

# enter username
enter_name <- function(bot, update) {

  uname <- update$message$text

  # Send message with name
  bot$sendMessage(update$message$chat_id, 
                  text = paste0(uname, ", прОятМП пПзМакПЌОтся, я бПт!"))

  # ЗапОсываеЌ ОЌя в глПбальМую переЌеММую
  #username <<- uname
  set_chat_data(update$message$chat_id, 'name', uname) 

  # СправшОваеЌ вПзраст
  bot$sendMessage(update$message$chat_id, 
                  text = "СкПлькП тебе лет?")

  # МеМяеЌ сПстПяМОе Ма ПжОЎаМОе ввПЎа ОЌеМО
  set_state(chat_id = update$message$chat_id, state = 'wait_age')

}

# enter user age
enter_age <- function(bot, update) {

  uage <- as.numeric(update$message$text)

  # прПверяеЌ былП ввеЎеМП чОслП ОлО Мет
  if ( is.na(uage) ) {

    # еслО ввеЎеМП Ме чОслП тП переспрашОваеЌ вПзраст
    bot$sendMessage(update$message$chat_id, 
                    text = "Ты ввёл МекПрректМые ЎаММые, ввеЎО чОслП")

  } else {

    # еслО ввеЎеМП чОслП сППбщаеЌ чтП вПзраст прОМят
    bot$sendMessage(update$message$chat_id, 
                    text = "ОК, вПзраст прОМят")

    # запОсываеЌ глПбальМую переЌеММую с вПзрастПЌ
    #userage <<- uage
    set_chat_data(update$message$chat_id, 'age', uage) 

    # сППбщаеЌ какОе ЎаММые былО сПбраМы
    username <- get_chat_data(update$message$chat_id, 'name')
    userage  <- get_chat_data(update$message$chat_id, 'age')

    bot$sendMessage(update$message$chat_id, 
                    text = paste0("Тебя зПвут ", username, " О тебе ", userage, " лет. БуЎеЌ зМакПЌы"))

    # вПзвращаеЌ ЎОалПг в ОсхПЎМПе сПстПяМОе
    set_state(chat_id = update$message$chat_id, state = 'start')
  }

}

5 ዘዎዎቜን ፈጠርን-

  • ጀምር - ንግግር ጀምር
  • ሁኔታ - ዹአሁኑን ዚውይይት ሁኔታ ያግኙ
  • ዳግም ማስጀመር - ዹአሁኑን ዚውይይት ሁኔታ እንደገና ያስጀምሩ
  • ያስገቡ_ስም - ቊቱ ዚእርስዎን ስም ይጠይቃል
  • enter_age - ቊቱ ዕድሜዎን ይጠይቃል

ዘዮ start ዚእርስዎን ስም ይጠይቃል፣ እና ዚውይይት ሁኔታውን ወደሚለውጥ ይለውጠዋል መጠበቂያ_ስም፣ ማለትም እ.ኀ.አ. ስምዎን ለማስገባት በመጠባበቂያ ጊዜ.

በመቀጠል ስሙን ይልካሉ እና በስልቱ ይኹናወናል enter_name፣ ቊት ሰላምታ ያቀርብልዎታል ፣ ዹተቀበለውን ስም በመሹጃ ቋቱ ውስጥ ይጜፋል እና ውይይቱን ወደ ክፍለ ሀገር ይለውጠዋል ዹመጠበቅ_ዕድሜ.

በዚህ ደሹጃ, ቊት ወደ እድሜዎ እንዲገቡ ይጠብቅዎታል. ዕድሜህን ትልካለህ፣ ቊት መልእክቱን ይፈትሻል፣ ኚቁጥር ይልቅ ዹተወሰነ ጜሑፍ ኹላኹህ ይላል፡- Ты ввёл МекПрректМые ЎаММые, ввеЎО чОслП, እና ዚእርስዎን ውሂብ እንደገና እንዲያስገቡ ይጠብቅዎታል. ቁጥር ኚላኩ, ቊቱ እድሜዎን እንደተቀበለ ሪፖርት ያደርጋል, ዹተቀበለውን ውሂብ ወደ ዚውሂብ ጎታ ይጜፋል, ኚእርስዎ ዚተቀበሉትን ሁሉንም መሚጃዎቜ ያሳውቁ እና ዚውይይት ሁኔታን ወደ መጀመሪያው ቊታ ይመልሳል, ማለትም. ቪ start.

ዘዮውን በመደወል state በማንኛውም ጊዜ እና በመጠቀም ዹአሁኑን ዚውይይት ሁኔታ መጠዹቅ ይቜላሉ። reset ውይይቱን ወደ መጀመሪያው ሁኔታው ​​ይመልሱ።

ዚመልእክት ማጣሪያዎቜ

በእኛ ሁኔታ, ይህ ቊት በመገንባት ውስጥ በጣም አስፈላጊ ኚሆኑት ክፍሎቜ አንዱ ነው. ቊት ኚእርስዎ ምን መሹጃ እንደሚጠብቀው እና እንዎት መኹናወን እንዳለበት ዚሚሚዳው በመልእክት ማጣሪያዎቜ እገዛ ነው።

በፕሮጀክቱ ውስጥ ዹፊልሙ ማጣሪያዎቜ በፋይሉ ውስጥ ተመዝግበዋል መልዕክት_ማጣሪያዎቜ.አር.

ዚመልእክት ማጣሪያ ኮድ፡-

# ###########################################################
# message state filters

# фОльтр сППбщеМОй в сПстПяМОО ПжОЎаМОя ОЌеМО
MessageFilters$wait_name <- BaseFilter(function(message) {
  get_state( message$chat_id )  == "wait_name"
}
)

# фОльтр сППбщеМОй в сПстПяМОО ПжОЎаМОя вПзраста
MessageFilters$wait_age <- BaseFilter(function(message) {
  get_state( message$chat_id )   == "wait_age"
}
)

በማጣሪያዎቜ ውስጥ ቀደም ሲል ዚተጻፈውን ተግባር እንጠቀማለን get_state()ዚውይይቱን ወቅታዊ ሁኔታ ለመጠዚቅ። ይህ ተግባር ዚሚያስፈልገው 1 ነጋሪ እሎት፣ ዚውይይት መታወቂያ ብቻ ነው።

ቀጣይ ማጣሪያ መጠበቂያ_ስም ቻቱ ሁኔታ ውስጥ ሲሆን መልዕክቶቜን ያስኬዳል wait_name, እና በዚህ መሠሚት ማጣሪያው ዹመጠበቅ_ዕድሜ ቻቱ ሁኔታ ውስጥ ሲሆን መልዕክቶቜን ያስኬዳል wait_age.

ተቆጣጣሪዎቜ

ኚተቆጣጣሪዎቜ ጋር ያለው ፋይል ተጠርቷል ተቆጣጣሪዎቜ.አር, እና ዹሚኹተለው ኮድ አለው:

# ###########################################################
# handlers

# command handlers
start_h <- CommandHandler('start', start)
state_h <- CommandHandler('state', state)
reset_h <- CommandHandler('reset', reset)

# message handlers
## !MessageFilters$command - ПзМачает чтП кПЌаМЎы ЎаММые ПбрабПтчОкО Ме Пбрабатывают, 
## тПлькП текстПвые сППбщеМОя
wait_age_h  <- MessageHandler(enter_age,  MessageFilters$wait_age  & !MessageFilters$command)
wait_name_h <- MessageHandler(enter_name, MessageFilters$wait_name & !MessageFilters$command)

በመጀመሪያ ንግግርን ለመጀመር, እንደገና ለማስጀመር እና አሁን ያለውን ሁኔታ ለመጠዹቅ ዘዎዎቜን እንዲያሄዱ ዚሚያስቜልዎትን ዚትዕዛዝ ተቆጣጣሪዎቜ እንፈጥራለን.

በመቀጠል, በቀደመው ደሹጃ ዚተፈጠሩትን ማጣሪያዎቜ በመጠቀም 2 ዚመልዕክት መቆጣጠሪያዎቜን እንፈጥራለን እና ማጣሪያ እንጚምራለን !MessageFilters$commandበማንኛውም ዚውይይት ሁኔታ ውስጥ ትዕዛዞቜን መጠቀም እንድንቜል።

ዚቊት ማስጀመሪያ ኮድ

አሁን ለመጀመር ዝግጁ ዹሆኑ ሁሉም ነገሮቜ አሉን, ቊቱን ለማስጀመር ዋናው ኮድ በፋይሉ ውስጥ ነው bot.R.

library(telegram.bot)
library(tidyverse)
library(RSQLite)
library(DBI)
library(configr)

# перехПЎОЌ в папку прПекта
setwd(Sys.getenv('TG_BOT_PATH'))

# чОтаеЌ кПМфОг
cfg <- read.config('config.cfg')

# сПзЎаёЌ экзеЌпляр бПта
updater <- Updater(cfg$bot_settings$bot_token)

# Загрузка кПЌпПМеМтПв бПта
source('db_bot_function.R') # фуМкцОО Ўля рабПты с БД
source('bot_methods.R')     # ЌетПЎы бПта
source('message_filters.R') # фОльтры сППбщеМОй
source('handlers.R') # ПбрабПтчОкО сППбщеМОй

# ДПбавляеЌ ПбрабПтчОкО в ЎОспетчер
updater <- updater +
  start_h +
  wait_age_h +
  wait_name_h +
  state_h +
  reset_h

# ЗапускаеЌ бПта
updater$start_polling()

በውጀቱም ፣ ይህንን ቊት አገኘን-
ዚ቎ሌግራም ቊት በ R ውስጥ መጻፍ (ክፍል 4)፡ ኚቊት ጋር ወጥ ዹሆነ ምክንያታዊ ውይይት መገንባት።

በማንኛውም ጊዜ ትዕዛዙን በመጠቀም /state አሁን ያለውን ዚውይይት ሁኔታ እና ትዕዛዙን በመጠቀም መጠዹቅ እንቜላለን /reset ውይይቱን ወደ መጀመሪያው ሁኔታው ​​ይመልሱ እና ውይይቱን እንደገና ይጀምሩ።

መደምደሚያ

በዚህ ጜሑፍ ውስጥ, በ bot ውስጥ ዚውሂብ ጎታ እንዎት እንደሚጠቀሙ, እና ዚቻት ሁኔታን በመመዝገብ እንዎት ተኚታታይ ሎጂካዊ ምልልሶቜን መገንባት እንደሚቻል አውቀናል.

በዚህ ሁኔታ ፣ እንደዚህ ያሉ ቊቶቜ ዚመገንባትን ሀሳብ ለመሚዳት ቀላል ይሆንልዎ ዘንድ በጣም ጥንታዊውን ምሳሌ ተመልክተናል ፣ በተግባር ፣ ዹበለጠ ውስብስብ ውይይቶቜን መገንባት ይቜላሉ።

በዚህ ተኚታታይ ርዕስ ውስጥ ዚቊት ተጠቃሚዎቜን ዚተለያዩ ዘዎዎቜን ዹመጠቀም መብትን እንዎት መገደብ እንደሚቻል እንማራለን።

ምንጭ: hab.com

አስተያዚት ያክሉ