R (အပိုင်း 4) တွင် တယ်လီဂရမ် ဘော့တ်တစ်ခုကို ရေးသားခြင်း- bot နှင့် ကိုက်ညီပြီး ယုတ္တိကျသော ဆွေးနွေးမှုတစ်ခု တည်ဆောက်ခြင်း

အရင်ဖတ်ပြီးပြီဆိုရင် ဆောင်းပါးသုံးပုဒ် ဤစီးရီးမှ၊ သင်သည် ကီးဘုတ်ဖြင့် ပြည့်စုံသော telegram bot များကို မည်သို့ရေးရမည်ကို သိပြီးဖြစ်သည်။

ဤဆောင်းပါးတွင်၊ တသမတ်တည်းဆွေးနွေးမှုကို ထိန်းသိမ်းထားမည့် bot တစ်ခုကို မည်သို့ရေးရမည်ကို လေ့လာပါမည်။ အဲဒါတွေ။ ဘော့တ်သည် သင့်အား မေးခွန်းများမေးမည်ဖြစ်ပြီး အချက်အလက်အချို့ကို ထည့်သွင်းရန် စောင့်ဆိုင်းမည်ဖြစ်သည်။ သင်ထည့်သွင်းသည့်ဒေတာအပေါ်မူတည်၍ bot သည် လုပ်ဆောင်ချက်အချို့ကို လုပ်ဆောင်မည်ဖြစ်သည်။

ကျွန်ုပ်တို့၏ဥပမာတွင်၎င်းသည် SQLite ဖြစ်လိမ့်မည်၊ သို့သော်သင်သည်အခြား DBMS ကိုမဆိုအသုံးပြုနိုင်ပါသည်။ R language in တွင် databases များနှင့်အပြန်အလှန်ဆက်ဆံခြင်းအကြောင်း အသေးစိတ်ကို ကျွန်တော်ရေးခဲ့သည်။ ဤဆောင်းပါးတွင်.

R (အပိုင်း 4) တွင် တယ်လီဂရမ် ဘော့တ်တစ်ခုကို ရေးသားခြင်း- bot နှင့် ကိုက်ညီပြီး ယုတ္တိကျသော ဆွေးနွေးမှုတစ်ခု တည်ဆောက်ခြင်း

စီးရီး "ကြေးနန်းစာရိုက်စက်ကို R ဖြင့်ရေးသားခြင်း" စီးရီးမှ ဆောင်းပါးများအားလုံး

  1. ကျွန်ုပ်တို့သည် ဘော့တ်တစ်ခုကို ဖန်တီးပြီး တယ်လီဂရမ်ဖြင့် စာတိုပေးပို့ရန် ၎င်းကို အသုံးပြုသည်။
  2. ဘော့တ်သို့ အမိန့်ပေးမှုနှင့် မက်ဆေ့ဂျ် စစ်ထုတ်မှုများကို ထည့်ပါ။
  3. bot တစ်ခုတွင် ကီးဘုတ်ပံ့ပိုးမှုထည့်နည်း
  4. bot နှင့် တသမတ်တည်း ကျိုးကြောင်းဆီလျော်သော ဆွေးနွေးမှုတစ်ခုကို တည်ဆောက်ပါ။

အကြောင်းအရာ

ဒေတာခွဲခြမ်းစိတ်ဖြာခြင်းကို စိတ်ဝင်စားပါက ကျွန်ုပ်ကို စိတ်ဝင်စားပေမည်။ ကွေးနနျးစာ и youtube က ချန်နယ်များ။ အကြောင်းအရာအများစုသည် R ဘာသာစကားအတွက် ရည်ရွယ်သည်။

  1. နိဒါန်း
  2. Bot တည်ဆောက်ခြင်းလုပ်ငန်းစဉ်
  3. အောက်ခြေပရောဂျက်ဖွဲ့စည်းပုံ
  4. Bot config
  5. ပတ်၀န်းကျင် ပြောင်းလဲနိုင်သော ပုံစံတစ်ခု ဖန်တီးပါ။
  6. ဒေတာဘေ့စ်တစ်ခုဖန်တီးခြင်း။
  7. ဒေတာဘေ့စ်နှင့်အလုပ်လုပ်ရန် လုပ်ဆောင်ချက်များကို ရေးသားခြင်း။
  8. Bot နည်းလမ်းများ
  9. မက်ဆေ့ဂျ် စစ်ထုတ်မှုများ
  10. ကိုင်တွယ်သူများ
  11. ဘော့တ်ဖွင့်ကုဒ်
  12. ကောက်ချက်

နိဒါန်း

bot သည် သင့်ထံမှ ဒေတာတောင်းခံရန်နှင့် မည်သည့်အချက်အလက်ကိုမဆို ထည့်သွင်းရန်စောင့်ဆိုင်းရန်အတွက်၊ သင်သည် ဆွေးနွေးမှု၏ လက်ရှိအခြေအနေကို မှတ်တမ်းတင်ရန် လိုအပ်မည်ဖြစ်သည်။ ၎င်းကိုလုပ်ဆောင်ရန် အကောင်းဆုံးနည်းလမ်းမှာ SQLite ကဲ့သို့သော မြှုပ်သွင်းထားသောဒေတာဘေ့စ်တစ်မျိုးမျိုးကို အသုံးပြုရန်ဖြစ်သည်။

အဲဒါတွေ။ ယုတ္တိဗေဒသည် အောက်ပါအတိုင်း ဖြစ်လိမ့်မည်။ ကျွန်ုပ်တို့သည် bot နည်းလမ်းကိုခေါ်ဆိုပြီး bot သည် ကျွန်ုပ်တို့ထံမှ အချက်အလက်အချို့ကို ဆက်တိုက်တောင်းဆိုနေပြီး အဆင့်တစ်ဆင့်ချင်းစီတွင် ၎င်းသည် ဤအချက်အလက်များကို ထည့်သွင်းရန်စောင့်ဆိုင်းနေပြီး ၎င်းကို စစ်ဆေးနိုင်သည်။

ဖြစ်နိုင်ချေ အရိုးရှင်းဆုံး bot ကို ကျွန်ုပ်တို့ ရေးပါမည်၊ ဦးစွာ ၎င်းသည် သင့်အမည်ကို တောင်းဆိုမည်၊ ထို့နောက် သင့်အသက်အရွယ်ကို တောင်းဆိုမည်ဖြစ်ပြီး ရရှိလာသော အချက်အလက်များကို ဒေတာဘေ့စ်တွင် သိမ်းဆည်းမည်ဖြစ်သည်။ အသက်ကိုတောင်းသောအခါတွင် ထည့်သွင်းထားသောဒေတာသည် နံပါတ်တစ်ခုဖြစ်ပြီး စာသားမဟုတ်ကြောင်း စစ်ဆေးမည်ဖြစ်သည်။

ဤကဲ့သို့သော ရိုးရှင်းသော ဆွေးနွေးပွဲတွင် ပြည်နယ်သုံးခုသာ ရှိလိမ့်မည်-

  1. start သည် သင့်ထံမှ မည်သည့်အချက်အလက်ကိုမျှ မမျှော်လင့်ထားသည့် bot ၏ ပုံမှန်အခြေအနေဖြစ်သည်။
  2. wait_name - အမည်တစ်ခုထည့်သွင်းရန် bot ကစောင့်ဆိုင်းနေသည့်အခြေအနေ
  3. wait_age သည် သင့်အသက်ထည့်သွင်းရန် bot မှ စောင့်ဆိုင်းနေသည့် အခြေအနေဖြစ်ပြီး နှစ်ပြည့်အရေအတွက်ဖြစ်သည်။

Bot တည်ဆောက်ခြင်းလုပ်ငန်းစဉ်

ဆောင်းပါးအတွင်း၊ ကျွန်ုပ်တို့သည် bot တစ်ခုကို တစ်ဆင့်ပြီးတစ်ဆင့် တည်ဆောက်မည်၊ လုပ်ငန်းစဉ်တစ်ခုလုံးကို အောက်ပါအတိုင်း ဇယားကွက်ဖြင့် ပုံဖော်နိုင်သည်-
R (အပိုင်း 4) တွင် တယ်လီဂရမ် ဘော့တ်တစ်ခုကို ရေးသားခြင်း- bot နှင့် ကိုက်ညီပြီး ယုတ္တိကျသော ဆွေးနွေးမှုတစ်ခု တည်ဆောက်ခြင်း

  1. ကျွန်ုပ်တို့သည် ဆက်တင်အချို့ကို သိမ်းဆည်းမည့် bot config တစ်ခုကို ဖန်တီးပါသည်။ ကျွန်ုပ်တို့၏ကိစ္စတွင်၊ bot တိုကင်နှင့်ဒေတာဘေ့စ်ဖိုင်သို့လမ်းကြောင်း။
  2. ကျွန်ုပ်တို့သည် bot ဖြင့် ပရောဂျက်သို့သွားမည့်လမ်းကြောင်းကို သိမ်းဆည်းမည့် ပတ်ဝန်းကျင်ပြောင်းလွဲပြောင်းကို ဖန်တီးပါသည်။
  3. ကျွန်ုပ်တို့သည် ဒေတာဘေ့စ်ကို ကိုယ်တိုင်ဖန်တီးကာ bot နှင့် အပြန်အလှန်အကျိုးပြုနိုင်စေရန် လုပ်ဆောင်ချက်များများစွာကို ဖန်တီးပါသည်။
  4. ကျွန်ုပ်တို့သည် bot နည်းစနစ်များကိုရေးသည်၊ ဆိုလိုသည်မှာ၊ လုပ်ဆောင်ရမယ့် လုပ်ဆောင်ချက်တွေပါ။
  5. မက်ဆေ့ဂျ် စစ်ထုတ်မှုများကို ထည့်သွင်းခြင်း။ bot သည် ချတ်၏လက်ရှိအခြေအနေပေါ် မူတည်၍ လိုအပ်သောနည်းလမ်းများကိုရယူမည့်အကူအညီဖြင့်။
  6. ကျွန်ုပ်တို့သည် လိုအပ်သော ဘော့တ်နည်းလမ်းများဖြင့် ညွှန်ကြားချက်များနှင့် မက်ဆေ့ချ်များကို ချိတ်ဆက်ပေးမည့် ကိုင်တွယ်သူများကို ပေါင်းထည့်ပါသည်။
  7. bot ကိုဖွင့်လိုက်ရအောင်။

အောက်ခြေပရောဂျက်ဖွဲ့စည်းပုံ

အဆင်ပြေစေရန်အတွက်၊ ကျွန်ုပ်တို့သည် ကျွန်ုပ်တို့၏ bot ၏ကုဒ်နှင့် အခြားဆက်စပ်ဖိုင်များကို အောက်ပါဖွဲ့စည်းပုံတွင် ပိုင်းခြားပါမည်။

  • bot.R - ကျွန်ုပ်တို့၏ bot ၏ အဓိကကုဒ်
  • db_bot_function.R - ဒေတာဘေ့စ်တစ်ခုနှင့်အလုပ်လုပ်ရန်အတွက် လုပ်ဆောင်ချက်များပါရှိသော ကုဒ်တုံးတစ်ခု
  • bot_methods.R - bot နည်းလမ်းများ၏ကုဒ်
  • message_filters.R - မက်ဆေ့ခ်ျစစ်ထုတ်မှုများ
  • ကိုင်တွယ်သူများ.R - ကိုင်တွယ်သူများ
  • config.cfg - bot config
  • create_db_data.sql — ဒေတာဘေ့စ်တွင် ချတ်ဒေတာပါသော ဇယားတစ်ခုကို ဖန်တီးရန်အတွက် SQL script
  • create_db_state.sql — ဒေတာဘေ့စ်ရှိ လက်ရှိချက်တင်အခြေအနေ၏ ဇယားတစ်ခုကို ဖန်တီးရန်အတွက် SQL script
  • bot.db - bot ဒေတာဘေ့စ

သင်သည် bot ပရောဂျက်တစ်ခုလုံးကိုကြည့်ရှုနိုင်သည်၊ သို့မဟုတ် скачать ငါ့ထံမှ GitHub ရှိ သိုလှောင်မှု.

Bot config

ကျွန်ုပ်တို့သည် ပုံမှန်တစ်ခုကို config တစ်ခုအဖြစ် အသုံးပြုပါမည်။ ini ဖိုင်အောက်ပါပုံစံ၊

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

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

config တွင်ကျွန်ုပ်တို့သည် bot token နှင့် database သို့လမ်းကြောင်းကိုရေးသည်, i.e. bot.db ဖိုင်သို့၊ နောက်တဆင့်တွင် ဖိုင်ကိုယ်တိုင် ဖန်တီးပါမည်။

ပိုမိုရှုပ်ထွေးသော ဘော့တ်များအတွက်၊ သင်သည် ပိုမိုရှုပ်ထွေးသော configs ကိုဖန်တီးနိုင်သည်၊ ထို့အပြင်၊ ini config ကိုရေးရန်မလိုအပ်ပါ၊ JSON အပါအဝင် အခြားသော format များကိုသုံးနိုင်သည်။

ပတ်၀န်းကျင် ပြောင်းလဲနိုင်သော ပုံစံတစ်ခု ဖန်တီးပါ။

PC တစ်ခုစီတွင်၊ bot ပရောဂျက်ပါရှိသော ဖိုဒါကို မတူညီသော လမ်းညွှန်များနှင့် မတူညီသော drive များတွင် တည်ရှိနိုင်သည်၊ ထို့ကြောင့် ကုဒ်တွင် ပရောဂျက်ဖိုင်တွဲသို့ လမ်းကြောင်းကို ပတ်၀န်းကျင် ပြောင်းလဲနိုင်သော ပြောင်းလဲသတ်မှတ်မှုမှတစ်ဆင့် သတ်မှတ်မည်ဖြစ်သည်။ TG_BOT_PATH.

ပတ်ဝန်းကျင် variable တစ်ခုကို ဖန်တီးရန် နည်းလမ်းများစွာ ရှိပြီး အရိုးရှင်းဆုံးမှာ ၎င်းကို ဖိုင်တစ်ခုတွင် ရေးရန်ဖြစ်သည်။ .Renviron.

အမိန့်ကို အသုံးပြု၍ ဤဖိုင်ကို ဖန်တီးနိုင်သည် သို့မဟုတ် တည်းဖြတ်နိုင်သည်။ file.edit(path.expand(file.path("~", ".Renviron"))). ၎င်းကိုလုပ်ဆောင်ပြီး ဖိုင်သို့ စာကြောင်းတစ်ကြောင်းထည့်ပါ-

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

ထို့နောက် ဖိုင်ကို သိမ်းဆည်းပါ။ .Renviron ပြီးလျှင် RStudio ကို ပြန်လည်စတင်ပါ။

ဒေတာဘေ့စ်တစ်ခုဖန်တီးခြင်း။

နောက်တစ်ဆင့်ကတော့ database တစ်ခုကို ဖန်တီးဖို့ပါ။ ကျွန်ုပ်တို့သည် စားပွဲ 2 လုံး လိုအပ်ပါမည်။

  • chat_data — bot သည် အသုံးပြုသူထံမှ တောင်းဆိုထားသည့် ဒေတာ
  • chat_state — ချတ်အားလုံး၏ လက်ရှိအခြေအနေ

အောက်ပါ SQL query ကို အသုံးပြု၍ ဤဇယားများကို ဖန်တီးနိုင်သည်-

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
);

အကယ်၍ သင်သည် bot ပရောဂျက်ကို ဒေါင်းလုဒ်လုပ်ပါ။ GitHubထို့နောက် ဒေတာဘေ့စ်ကို ဖန်တီးရန် 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'))

ဒေတာဘေ့စ်နှင့်အလုပ်လုပ်ရန် လုပ်ဆောင်ချက်များကို ရေးသားခြင်း။

ကျွန်ုပ်တို့တွင် ဖွဲ့စည်းမှုဖိုင်အဆင်သင့်ရှိပြီး ဒေတာဘေ့စ်တစ်ခုကို ဖန်တီးထားပြီးဖြစ်သည်။ ယခု သင်သည် ဤဒေတာဘေ့စ်သို့ ဒေတာဖတ်ရန်နှင့် ရေးရန် လုပ်ဆောင်ချက်များကို ရေးသားရန် လိုအပ်သည်။

ပရောဂျက်ကို ဒေါင်းလုဒ်လုပ်ရင် GitHubထို့နောက် ဖိုင်ထဲတွင် လုပ်ဆောင်ချက်များကို သင်ရှာဖွေနိုင်သည်။ db_bot_function.R.

ဒေတာဘေ့စ်နှင့်အလုပ်လုပ်ရန် function ကုဒ်

# ###########################################################
# 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() - အသုံးပြုသူထံမှရရှိသောဒေတာမှတ်တမ်း

လုပ်ဆောင်ချက်များအားလုံးသည် အလွန်ရိုးရှင်းသည်၊ ၎င်းတို့သည် command ကိုအသုံးပြု၍ database မှ data ကိုဖတ်သည်။ dbGetQuery()သို့မဟုတ် ကျူးလွန်သည်။ UPSERT လုပ်ဆောင်ချက်ကို အသုံးပြု၍ လုပ်ဆောင်မှု (လက်ရှိဒေတာကို ပြောင်းလဲခြင်း သို့မဟုတ် ဒေတာဘေ့စ်သို့ ဒေတာအသစ်ရေးခြင်း)၊ dbExecute().

UPSERT လုပ်ဆောင်ချက်အတွက် syntax သည် အောက်ပါအတိုင်းဖြစ်သည်။

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

အဲဒါတွေ။ ကျွန်တော်တို့ရဲ့ ဇယားကွက်မှာ chat_id ထူးခြားမှုကန့်သတ်ချက်ရှိပြီး ဇယားများ၏ အဓိကသော့ချက်ဖြစ်သည်။ အစပိုင်းတွင်၊ ကျွန်ုပ်တို့သည် ဇယားထဲသို့ အချက်အလက်ထည့်ရန် ကြိုးစားကြပြီး၊ လက်ရှိ ချတ်အတွက် ဒေတာများ ရှိနေပါက အမှားအယွင်းများ ရှိလာသည်၊ ယင်းအခြေအနေတွင်၊ ဤချတ်အတွက် အချက်အလက်ကို ရိုးရိုးရှင်းရှင်း အပ်ဒိတ်လုပ်ပါသည်။

ထို့နောက်၊ bot ၏နည်းလမ်းများနှင့် စစ်ထုတ်မှုများတွင် ဤလုပ်ဆောင်ချက်များကို အသုံးပြုပါမည်။

Bot နည်းလမ်းများ

ကျွန်ုပ်တို့၏ bot ကိုတည်ဆောက်ရာတွင် နောက်တစ်ဆင့်မှာ နည်းလမ်းများဖန်တီးရန်ဖြစ်သည်။ ပရောဂျက်ကို ဒေါင်းလုဒ်လုပ်ရင် GitHubထို့နောက် နည်းလမ်းအားလုံးသည် ဖိုင်ထဲတွင် ရှိနေသည်။ bot_methods.R.

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_name — bot သည် သင့်အမည်ကို တောင်းဆိုသည်။
  • enter_age — bot သည် သင့်အသက်ကို တောင်းဆိုသည်။

နည်းလမ်း start သင့်အမည်ကို တောင်းဆိုပြီး ချတ်အခြေအနေကို ပြောင်းလဲပါ။ wait_name, i.e. သင့်အမည်ကို ထည့်သွင်းရန်အတွက် အသင့်နေရန်။

ထို့နောက် သင်သည် အမည်ကို ပေးပို့ပြီး ၎င်းကို နည်းလမ်းဖြင့် လုပ်ဆောင်သည်။ enter_nameဘော့တ်သည် သင့်အား နှုတ်ဆက်သည်၊ လက်ခံရရှိသောအမည်ကို ဒေတာဘေ့စ်ထဲသို့ ရေးပြီး ချတ်ကို အခြေအနေသို့ ပြောင်းပေးသည်။ wait_age.

ဤအဆင့်တွင်၊ bot သည် သင့်အသက်အရွယ်သို့ ဝင်ရောက်ရန် မျှော်လင့်ပါသည်။ သင်သည် သင့်အသက်ကို ပေးပို့သည်၊ ဘော့တ်သည် မက်ဆေ့ဂျ်ကို စစ်ဆေးသည်၊ သင်သည် နံပါတ်အစား စာသားအချို့ ပေးပို့ပါက၊ Ты ввёл некорректные данные, введи числоနှင့် သင့်ဒေတာကို ပြန်လည်ထည့်သွင်းရန် စောင့်မျှော်နေပါမည်။ အကယ်၍ သင်သည် နံပါတ်တစ်ခုကို ပေးပို့ပါက၊ bot သည် သင့်အသက်ကို လက်ခံခဲ့ကြောင်း တိုင်ကြားမည်ဖြစ်ပြီး၊ ရရှိထားသောဒေတာကို ဒေတာဘေ့စ်သို့ ရေးချကာ သင်ရရှိသည့်ဒေတာအားလုံးကို သတင်းပို့ပြီး ချတ်အခြေအနေအား ၎င်း၏မူလအနေအထားသို့ ပြန်ပို့ပေးမည်ဖြစ်သည်။ v start.

နည်းလမ်းဖြင့် ခေါ်သည်။ state သင်သည် လက်ရှိ chat status ကို အချိန်မရွေး တောင်းဆိုနိုင်ပြီး ၎င်းကို အသုံးပြုပါ။ reset ချတ်ကို မူလအခြေအနေသို့ ပြန်သွားပါ။

မက်ဆေ့ဂျ် စစ်ထုတ်မှုများ

ကျွန်ုပ်တို့၏အခြေအနေတွင်၊ ၎င်းသည် bot တစ်ခုကိုတည်ဆောက်ရာတွင် အရေးကြီးဆုံးအစိတ်အပိုင်းတစ်ခုဖြစ်သည်။ ဘော့တ်သည် သင့်ထံမှ မည်သည့်အချက်အလက်များကို မျှော်မှန်းထားကြောင်းနှင့် ၎င်းကို မည်သို့စီမံဆောင်ရွက်သင့်သည်ကို မက်ဆေ့ချ်စစ်ထုတ်မှုများ၏အကူအညီဖြင့် ၎င်းသည် နားလည်မည်ဖြစ်သည်။

ပရောဂျက်တွင် GitHub စစ်ထုတ်မှုများကို ဖိုင်တွင် စာရင်းသွင်းထားသည်။ message_filters.R.

မက်ဆေ့ချ် စစ်ထုတ်ကုဒ်-

# ###########################################################
# 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_nameနှင့်လျော်ညီစွာ filter ကို wait_age ချတ်သည် အခြေအနေတစ်ခုရှိသောအခါ မက်ဆေ့ဂျ်များကို လုပ်ဆောင်သည်။ wait_age.

ကိုင်တွယ်သူများ

handlers ပါသောဖိုင်ကို ခေါ်သည်။ ကိုင်တွယ်သူများ.Rနှင့် အောက်ပါ ကုဒ်ပါရှိသည်။

# ###########################################################
# 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)

ပထမဦးစွာ ကျွန်ုပ်တို့သည် သင့်အား ဒိုင်ယာလော့ဂ်တစ်ခုစတင်ရန်၊ ၎င်းကို ပြန်လည်သတ်မှတ်ရန်နှင့် လက်ရှိအခြေအနေကို မေးမြန်းရန် နည်းလမ်းများကို လုပ်ဆောင်ရန် ခွင့်ပြုမည့် command handlers များကို ဖန်တီးပေးပါသည်။

ထို့နောက်၊ ကျွန်ုပ်တို့သည် ယခင်အဆင့်တွင် ဖန်တီးထားသော စစ်ထုတ်မှုများကို အသုံးပြု၍ မက်ဆေ့ဂျ်ကိုင်တွယ်သူ 2 ဦးကို ဖန်တီးပြီး ၎င်းတို့တွင် စစ်ထုတ်မှုတစ်ခုကို ထည့်ပါ။ !MessageFilters$commandသို့မှသာ ကျွန်ုပ်တို့သည် မည်သည့် chat state တွင်မဆို command များကိုသုံးနိုင်သည်။

ဘော့တ်ဖွင့်ကုဒ်

ယခု ကျွန်ုပ်တို့တွင် စတင်ရန် အဆင်သင့်ရှိပြီဖြစ်ပြီး၊ bot ကို စတင်ရန်အတွက် အဓိကကုဒ်သည် ဖိုင်ထဲတွင် ရှိသည်။ 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()

ရလဒ်အနေဖြင့်၊ ကျွန်ုပ်တို့သည် ဤ bot ကိုရခဲ့သည်-
R (အပိုင်း 4) တွင် တယ်လီဂရမ် ဘော့တ်တစ်ခုကို ရေးသားခြင်း- bot နှင့် ကိုက်ညီပြီး ယုတ္တိကျသော ဆွေးနွေးမှုတစ်ခု တည်ဆောက်ခြင်း

မည်သည့်အချိန်တွင်မဆို command ကိုအသုံးပြုပါ။ /state ကျွန်ုပ်တို့သည် လက်ရှိ ချတ်အခြေအနေနှင့် အမိန့်ကို အသုံးပြု၍ မေးမြန်းနိုင်ပါသည်။ /reset ချတ်ကို မူလအခြေအနေသို့ ပြန်သွားပြီး ဆွေးနွေးပွဲကို ပြန်စပါ။

ကောက်ချက်

ဤဆောင်းပါးတွင်၊ ကျွန်ုပ်တို့သည် bot တစ်ခုအတွင်းရှိ ဒေတာဘေ့စ်ကို မည်သို့အသုံးပြုရပုံနှင့် chat state ကို မှတ်တမ်းတင်ခြင်းဖြင့် စဉ်ဆက်မပြတ်ယုတ္တိယုတ္တိရှိသော ဆွေးနွေးမှုများကို တည်ဆောက်နည်းကို ကျွန်ုပ်တို့ ရှာဖွေတွေ့ရှိခဲ့သည်။

ဤကိစ္စတွင်၊ ကျွန်ုပ်တို့သည် ဤကဲ့သို့သော bot များကိုတည်ဆောက်ခြင်း၏စိတ်ကူးကိုနားလည်ရန်ပိုမိုလွယ်ကူစေရန်အတွက်၊ လက်တွေ့တွင်၊ သင်သည်ပိုမိုရှုပ်ထွေးသောဆွေးနွေးပွဲများကိုတည်ဆောက်နိုင်သည်။

ဤစီးရီး၏နောက်ဆောင်းပါးတွင်၊ ၎င်း၏နည်းလမ်းအမျိုးမျိုးကိုအသုံးပြုရန် bot အသုံးပြုသူများ၏အခွင့်အရေးများကို မည်သို့ကန့်သတ်ရမည်ကို လေ့လာပါမည်။

source: www.habr.com

မှတ်ချက် Add