ٽيليگرام بوٽ کي آر ۾ لکڻ (حصو 4): بوٽ سان مسلسل، منطقي گفتگو ٺاهڻ

جيڪڏهن توهان اڳ ۾ ئي پڙهيو آهي ٽي مضمون هن سيريز مان، پوء توهان اڳ ۾ ئي ڄاڻو ٿا ته ڪيبورڊ سان مڪمل ٽيليگرام بوٽ ڪيئن لکجي.

هن آرٽيڪل ۾، اسان سکنداسين ته هڪ بوٽ ڪيئن لکجي جيڪو مسلسل گفتگو برقرار رکندو. اهي. بوٽ توهان کان سوال پڇندو ۽ توهان کي ڪجهه معلومات داخل ڪرڻ جو انتظار ڪندو. توهان جي داخل ڪيل ڊيٽا تي منحصر ڪري، بوٽ ڪجهه ڪارناما انجام ڏيندو.

انهي آرٽيڪل ۾ پڻ اسان سکنداسين ته ڪيئن استعمال ڪجي ڊيٽابيس جي هود هيٺ، اسان جي مثال ۾ اهو SQLite هوندو، پر توهان ڪنهن ٻئي DBMS استعمال ڪري سگهو ٿا. مون آر ٻولي ۾ ڊيٽابيس سان رابطي جي باري ۾ وڌيڪ تفصيل سان لکيو اهو مضمون.

ٽيليگرام بوٽ کي آر ۾ لکڻ (حصو 4): بوٽ سان مسلسل، منطقي گفتگو ٺاهڻ

سيريز جا سڀئي مضمون ”آر ۾ ٽيليگرام بوٽ لکڻ“

  1. اسان هڪ بوٽ ٺاهيندا آهيون ۽ ان کي ٽيليگرام ۾ پيغام موڪلڻ لاءِ استعمال ڪندا آهيون
  2. بوٽ ۾ ڪمانڊ سپورٽ ۽ پيغام فلٽر شامل ڪريو
  3. بوٽ ۾ ڪيبورڊ سپورٽ ڪيئن شامل ڪجي
  4. بوٽ سان مسلسل، منطقي گفتگو جي تعمير

Contents

جيڪڏهن توهان ڊيٽا جي تجزيي ۾ دلچسپي رکو ٿا، توهان کي شايد دلچسپي وٺندي منهنجي ٽيليگرام и يوٽيوب چينلز. گهڻو ڪري مواد آر ٻولي لاء وقف آهي.

  1. تعارف
  2. بوٽ جي تعمير جو عمل
  3. بوٽ پروجيڪٽ جي جوڙجڪ
  4. بوٽ ترتيب
  5. ماحوليات جي متغير ٺاهي
  6. ڊيٽابيس ٺاهڻ
  7. ڊيٽابيس سان ڪم ڪرڻ لاءِ لکڻ جا ڪم
  8. بوٽ جا طريقا
  9. پيغام جا فلٽر
  10. سنڀاليندڙ
  11. بوٽ لانچ ڪوڊ
  12. ٿڪل

تعارف

بوٽ لاءِ توھان کان ڊيٽا جي درخواست ڪرڻ ۽ توھان جي ڪا به معلومات داخل ڪرڻ لاءِ انتظار ڪرڻ لاءِ، توھان کي گفتگو جي موجوده حالت کي رڪارڊ ڪرڻ جي ضرورت پوندي. اهو ڪرڻ جو بهترين طريقو اهو آهي ته ڪنهن قسم جي ايمبيڊڊ ڊيٽابيس کي استعمال ڪيو وڃي، جهڙوڪ SQLite.

اهي. منطق هن ريت هوندي. اسان bot طريقي کي سڏيندا آهيون، ۽ بوٽ ترتيب سان اسان کان ڪجهه معلومات جي درخواست ڪري ٿو، ۽ هر قدم تي هن معلومات داخل ٿيڻ جو انتظار ڪري ٿو ۽ ان کي چيڪ ڪري سگهي ٿو.

اسان سڀ کان آسان ممڪن بوٽ لکنداسين، پھريائين اھو توھان جو نالو پڇندو، پوءِ توھان جي عمر، ۽ وصول ڪيل ڊيٽا کي ڊيٽابيس ۾ محفوظ ڪندو. جڏهن عمر لاء پڇي، اهو چيڪ ڪندو ته داخل ٿيل ڊيٽا هڪ نمبر آهي ۽ متن نه آهي.

اهڙي سادي گفتگو ۾ فقط ٽي حالتون هونديون:

  1. start بوٽ جي عام حالت آهي، جنهن ۾ اهو توهان کان ڪنهن به معلومات جي اميد نٿو رکي
  2. wait_name - رياست جنهن ۾ بوٽ هڪ نالو داخل ٿيڻ جو انتظار ڪري ٿو
  3. wait_age اها حالت آهي جنهن ۾ بوٽ توهان جي عمر داخل ٿيڻ جو انتظار ڪري ٿو، مڪمل سالن جو تعداد.

بوٽ جي تعمير جو عمل

آرٽيڪل جي دوران، اسان قدم سان هڪ بوٽ ٺاهي سگهنداسين؛ سڄي عمل کي هيٺ ڏنل طريقي سان بيان ڪري سگهجي ٿو:
ٽيليگرام بوٽ کي آر ۾ لکڻ (حصو 4): بوٽ سان مسلسل، منطقي گفتگو ٺاهڻ

  1. اسان هڪ بوٽ ترتيب ٺاهيندا آهيون جنهن ۾ اسان ڪجهه سيٽنگون ذخيرو ڪنداسين. اسان جي صورت ۾، بوٽ ٽوڪن، ۽ ڊيٽابيس فائل ڏانهن رستو.
  2. اسان هڪ ماحولي تبديلي ٺاهيندا آهيون جنهن ۾ بوٽ سان منصوبي جو رستو محفوظ ڪيو ويندو.
  3. اسان ڊيٽابيس پاڻ ٺاهيندا آهيون، ۽ ڪيترن ئي ڪمن کي ته جيئن بوٽ ان سان رابطو ڪري سگهي.
  4. اسان بوٽ جا طريقا لکون ٿا، يعني. افعال جيڪي ان کي انجام ڏيندو.
  5. پيغام جا فلٽر شامل ڪرڻ. جنهن جي مدد سان بوٽ ضروري طريقن تائين پهچندو، چيٽ جي موجوده حالت تي منحصر آهي.
  6. اسان هينڊلر شامل ڪندا آهيون جيڪي ضروري بوٽ طريقن سان حڪم ۽ پيغام کي ڳنڍيندا.
  7. اچو ته بوٽ لانچ ڪريون.

بوٽ پروجيڪٽ جي جوڙجڪ

سهولت لاءِ، اسان اسان جي بوٽن جو ڪوڊ، ۽ ٻين لاڳاپيل فائلن کي، هيٺين ڍانچي ۾ ورهائينداسين.

  • بوٽ آر - اسان جي بوٽ جو بنيادي ڪوڊ
  • db_bot_function.R - ڊيٽابيس سان ڪم ڪرڻ لاءِ ڪمن سان گڏ ڪوڊ جو هڪ بلاڪ
  • bot_methods.R - بوٽ طريقن جو ڪوڊ
  • message_filters.R - پيغام فلٽر
  • سنڀاليندڙ. آر - سنڀاليندڙ
  • config.cfg - bot ترتيب
  • create_db_data.sql - ڊيٽابيس ۾ چيٽ ڊيٽا سان ٽيبل ٺاهڻ لاءِ SQL اسڪرپٽ
  • create_db_state.sql - ڊيٽابيس ۾ موجوده چيٽ اسٽيٽ جي ٽيبل ٺاهڻ لاءِ SQL اسڪرپٽ
  • bot.db - bot ڊيٽابيس

توھان ڏسي سگھو ٿا سڄو بوٽ پروجيڪٽ، يا скачать منهنجي طرفان GitHub تي مخزن.

بوٽ ترتيب

اسان هڪ ترتيب جي طور تي معمولي استعمال ڪنداسين ini فائلهيٺ ڏنل فارم:

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

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

config ۾ اسان bot ٽوڪن لکون ٿا ۽ ڊيٽابيس ڏانهن رستو، يعني. 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
);

جيڪڏهن توهان بوٽ پروجيڪٽ تان ڊائون لوڊ ڪيو آهي 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 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}';

اهي. اسان جي ٽيبل جي ميدان ۾ chat_id ھڪڙي انفراديت جي پابندي آھي ۽ جدولن جي بنيادي ڪنجي آھي. شروعات ۾، اسان ٽيبل تي معلومات شامل ڪرڻ جي ڪوشش ڪندا آهيون، ۽ اسان کي هڪ غلطي ملي ٿي جيڪڏهن موجوده چيٽ لاء ڊيٽا اڳ ۾ ئي موجود آهي، انهي صورت ۾ اسان صرف هن چيٽ جي معلومات کي اپڊيٽ ڪندا آهيون.

اڳيون، اسان انهن ڪمن کي بوٽ جي طريقن ۽ فلٽرن ۾ استعمال ڪنداسين.

بوٽ جا طريقا

اسان جي بوٽن جي تعمير ۾ ايندڙ قدم طريقا پيدا ڪرڻ آهي. جيڪڏهن توهان پروجيڪٽ تان ڊائون لوڊ ڪيو آهي GitHub، پوءِ سڀئي طريقا فائل ۾ آھن bot_methods.R.

بوٽ جو طريقو ڪوڊ

# ###########################################################
# 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 - بوٽ توهان جو نالو پڇي ٿو
  • enter_age - بوٽ توهان جي عمر لاءِ پڇي ٿو

طريقو start توھان جو نالو پڇي ٿو، ۽ چيٽ اسٽيٽ کي تبديل ڪري ٿو انتظار_ نالو، i.e. توھان جو نالو داخل ڪرڻ لاء تيار ٿيڻ لاء.

اڳيون، توھان نالو موڪليو ۽ اھو طريقي سان عمل ڪيو ويندو enter_name، بوٽ توهان کي سلام ڪري ٿو، وصول ٿيل نالو ڊيٽابيس ۾ لکي ٿو، ۽ چيٽ کي رياست ڏانهن تبديل ڪري ٿو انتظار_عمر.

هن مرحلي تي، بوٽ توهان جي عمر ۾ داخل ٿيڻ جي اميد رکي ٿو. توهان پنهنجي عمر موڪليو، بوٽ پيغام چيڪ ڪري ٿو، جيڪڏهن توهان هڪ نمبر جي بدران ڪجهه متن موڪليو، اهو چوندو: Ты ввёл некорректные данные, введи число، ۽ توهان جي ڊيٽا کي ٻيهر داخل ڪرڻ جو انتظار ڪندو. جيڪڏهن توهان هڪ نمبر موڪليو، بوٽ رپورٽ ڪندو ته اهو توهان جي عمر کي قبول ڪيو آهي، وصول ڪيل ڊيٽا کي ڊيٽابيس ۾ لکندو، توهان کان حاصل ڪيل سڀني ڊيٽا کي رپورٽ ڪندي ۽ چيٽ اسٽيٽ کي ان جي اصل پوزيشن ڏانهن واپس آڻيندو، يعني. وي start.

طريقت کي سڏڻ سان state توهان ڪنهن به وقت موجوده چيٽ اسٽيٽس جي درخواست ڪري سگهو ٿا، ۽ استعمال ڪندي reset چيٽ کي ان جي اصل حالت ۾ واپس آڻيو.

پيغام جا فلٽر

اسان جي صورت ۾، هي بوٽ تعمير ڪرڻ ۾ سڀ کان اهم حصن مان هڪ آهي. اهو ميسيج فلٽرن جي مدد سان آهي ته بوٽ سمجهي سگهندو ته اها ڪهڙي معلومات توهان کان توقع رکي ٿي ۽ ان کي ڪيئن پروسيس ڪيو وڃي.

منصوبي ۾ تي 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 دليل جي ضرورت آھي، چيٽ id.

ايندڙ فلٽر انتظار_ نالو پيغامن کي پروسيس ڪري ٿو جڏهن چيٽ هڪ حالت ۾ آهي 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، ته جيئن اسان ڪنهن به چيٽ اسٽيٽ ۾ حڪم استعمال ڪري سگهون ٿا.

بوٽ لانچ ڪوڊ

ھاڻي اسان وٽ لانچ ڪرڻ لاءِ سڀ ڪجھ تيار آھي، بوٽ لانچ ڪرڻ لاءِ بنيادي ڪوڊ فائل ۾ آھي بوٽ آر.

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

نتيجي طور، اسان هي بوٽ حاصل ڪيو:
ٽيليگرام بوٽ کي آر ۾ لکڻ (حصو 4): بوٽ سان مسلسل، منطقي گفتگو ٺاهڻ

ڪنهن به وقت حڪم استعمال ڪندي /state اسان موجوده چيٽ اسٽيٽ بابت سوال ڪري سگھون ٿا، ۽ حڪم استعمال ڪندي /reset چيٽ کي ان جي اصل حالت ۾ واپس آڻيو ۽ ٻيهر گفتگو شروع ڪريو.

ٿڪل

هن آرٽيڪل ۾، اسان اهو معلوم ڪيو ته هڪ بوٽ اندر ڊيٽابيس کي ڪيئن استعمال ڪجي، ۽ چيٽ اسٽيٽ کي رڪارڊ ڪندي ترتيب وار منطقي گفتگو ڪيئن ٺاهيو.

هن معاملي ۾، اسان سڀ کان وڌيڪ ابتدائي مثال تي غور ڪيو، ته جيئن توهان کي اهڙي بوٽن ٺاهڻ جي خيال کي سمجهڻ آسان بڻائي سگهجي؛ عملي طور تي، توهان تمام گهڻو پيچيده گفتگو ٺاهي سگهو ٿا.

هن سلسلي ۾ ايندڙ مضمون ۾، اسان سکو ته ڪيئن بوٽ استعمال ڪندڙن جي حقن کي محدود ڪرڻ لاء ان جي مختلف طريقن کي استعمال ڪرڻ لاء.

جو ذريعو: www.habr.com

تبصرو شامل ڪريو