ืื ืืืจ ืงืจืืช ืืช ืืงืืื
ืืืืืจ ืื ื ืืื ืืืฆื ืืืชืื ืืื ืฉืืฉืืืจ ืขื ืืืืืื ืขืงืื. ืึธืึตื. ืืืื ืืฉืื ืืืชื ืฉืืืืช ืืืืื ืฉืชืืื ืงืฆืช ืืืืข. ืืืชืื ืื ืชืื ืื ืฉืชืืื, ืืืื ืืืฆืข ืืื ืคืขืืืืช.
ืื ืืืืืจ ืื ื ืืื ืืืฆื ืืืฉืชืืฉ ืืืกื ื ืชืื ืื ืืชืืช ืืืืกื ืืื ืืข ืฉื ืืืื, ืืืืืื ืฉืื ื ืื ืืืื SQLite, ืืื ืืชื ืืืื ืืืฉืชืืฉ ืืื DBMS ืืืจ. ืืชืืชื ืืคืืจืื ืจื ืืืชืจ ืขื ืืื ืืจืืงืฆืื ืขื ืืกืื ื ืชืื ืื ืืฉืคืช R ื
ืื ืืืชืืืช ืืืกืืจื "ืืชืืืช ืืื ืืืืจื ื-R"
ืื ื ืืืฆืจืื ืืื ืืืฉืชืืฉืื ืื ืืื ืืฉืืื ืืืืขืืช ืืืืืจื ืืืกืฃ ืชืืืื ืืคืงืืืืช ืืืกื ื ื ืืืืขืืช ืืืื ืืืฆื ืืืืกืืฃ ืชืืืื ืืืงืืืช ืืืื ืื ืืืช ืืืืืื ืขืงืื ืืืืืื ื ืขื ืืืื
ืชืืื
ืื ืืชื ืืขืื ืืื ืื ืืชืื ื ืชืื ืื, ืืืื ืืชื ืืขืื ืืื ื- ืฉืื
ืืืื ืชืืืื ืื ืืืช ืืื ืืื ื ืคืจืืืงื ืืื ืชืฆืืจืช ืืื ืฆืืจ ืืฉืชื ื ืกืืืื ืืฆืืจืช ืืกื ื ืชืื ืื ืืชืืืช ืคืื ืงืฆืืืช ืืขืืืื ืขื ืืกื ืื ืชืื ืื ืฉืืืืช ืืื ืืกื ื ื ืืืืขืืช ืืืคืืื ืงืื ืืฉืงืช ืืื ืืกืงื ื
ืืืื
ืขื ืื ืช ืฉืืืื ืืืงืฉ ืืื ื ืชืื ืื ืืืืชืื ืฉืชืืื ืืืืข ืืืฉืื, โโืชืฆืืจื ืืชืขื ืืช ืืืฆื ืื ืืืื ืฉื ืืืืืืื. ืืืจื ืืืืื ืืืืชืจ ืืขืฉืืช ืืืช ืืื ืืืฉืชืืฉ ืืกืื ืฉื ืืกื ื ืชืื ืื ืืฉืืืฅ, ืืืื SQLite.
ืึธืึตื. ืืืืืืื ืืืื ืืืืงืื. ืื ื ืงืืจืืื ืืฉืืืช ืืืื, ืืืืื ืืืงืฉ ืืืืชื ื ืืจืฆืฃ ืืืืข ืืืฉืื, โโืืืื ืฉืื ืืื ืืืชืื ืืืื ืช ืืืืืข ืืื ืืืืื ืืืืืง ืืืชื.
ื ืืชืื ืืช ืืืื ืืคืฉืื ืืืืชืจ ืืืคืฉืจื, ืงืืื ืืื ืืืงืฉ ืืช ืฉืื, ืืืจ ืื ืืช ืืืื, ืืืฉืืืจ ืืช ืื ืชืื ืื ืฉืืชืงืืื ืืืกื ืื ืชืื ืื. ืืืฉืจ ืืืงืฉืื ืืื, ืืื ืืืืืง ืฉืื ืชืื ืื ืฉืืืื ื ืื ืืกืคืจ ืืื ืืงืกื.
ืืืืืืื ืคืฉืื ืืื ืืืื ืจืง ืฉืืืฉื ืืฆืืื:
- start ืืื ืืืฆื ืืจืืื ืฉื ืืืื, ืฉืื ืืื ืื ืืฆืคื ืืฉืื ืืืืข ืืื
- wait_name - ืืฆื ืฉืื ืืืื ืืืื ืืืื ืช ืฉื
- wait_age ืืื ืืืฆื ืฉืื ืืืื ืืืื ืืืื ืช ืืืื, ืืกืคืจ ืืฉื ืื ืืืืืืช.
ืชืืืื ืื ืืืช ืืื
ืืืืื ืืืืืจ, ื ืื ื ืืื ืฆืขื ืืืจ ืฆืขื; ืืชืืืื ืืืื ืืืื ืืืืืช ืืชืืืจ ืืืืคื ืกืืืื ืืืืคื ืืื:
- ืื ื ืืืฆืจืื ืชืฆืืจืช ืืื ืฉืื ื ืืืกื ืืื ืืืืจืืช. ืืืงืจื ืฉืื ื, ืืกืืืื ืืืื, ืืื ืชืื ืืงืืืฅ ืืกื ืื ืชืื ืื.
- ืื ื ืืืฆืจืื ืืฉืชื ื ืกืืืื ืื ืืืืืกื ืื ืชืื ืืคืจืืืงื ืขื ืืืื.
- ืื ื ืืืฆืจืื ืืช ืืกืืก ืื ืชืื ืื ืขืฆืื, ืืืกืคืจ ืคืื ืงืฆืืืช ืืื ืฉืืืื ืืืื ืืืฆืืจ ืืืชื ืืื ืืจืืงืฆืื.
- ืื ืื ื ืืืชืืื ืฉืืืืช ืืืืื, ืืืืืจ. ืืคืื ืงืฆืืืช ืฉืืื ืืืฆืข.
- ืืืกืคืช ืืกื ื ื ืืืืขืืช. ืืขืืจืชื ืืืื ืืืืฉ ืืฉืืืืช ืืืจืืฉืืช, ืืืชืื ืืืฆื ืื ืืืื ืฉื ืืฆ'ืื.
- ืื ื ืืืกืืคืื ืืืคืืื ืฉืืืืจื ืคืงืืืืช ืืืืืขืืช ืขื ืฉืืืืช ืืืื ืื ืืจืฉืืช.
- ืืืื ื ืคืขืื ืืช ืืืื.
ืืื ื ืคืจืืืงื ืืื
ืืืขืื ื ืืืืช, ื ืืืง ืืช ืืงืื ืฉื ืืืื ืฉืื ื, ืืงืืฆืื ืงืฉืืจืื ืืืจืื, ืืืื ื ืืื.
- bot.R - ืืงืื ืืจืืฉื ืฉื ืืืื ืฉืื ื
- db_bot_function.R - ืืืฉ ืงืื ืขื ืคืื ืงืฆืืืช ืืขืืืื ืขื ืืกื ื ืชืื ืื
- bot_methods.R - ืงืื ืฉื ืฉืืืืช ืืืืื
- message_filters.R - ืืกื ื ื ืืืืขืืช
- ืืืคืืื.ืจ - ืืืคืืื
- config.cfg - ืชืฆืืจืช ืืื
- create_db_data.sql - ืกืงืจืืคื SQL ืืืฆืืจืช ืืืื ืขื ื ืชืื ื ืฆ'ืื ืืืกื ืื ืชืื ืื
- create_db_state.sql - ืกืงืจืืคื SQL ืืืฆืืจืช ืืืื ืฉื ืืฆื ืืฆ'ืื ืื ืืืื ืืืกื ืื ืชืื ืื
- bot.db - ืืกื ื ืชืื ืื ืฉื ืืืืื
ืืชื ืืืื ืืืฆืื ืืช ืื ืคืจืืืงื ืืืื, ืื
ืชืฆืืจืช ืืื
ื ืฉืชืืฉ ืืชืฆืืจื ืืจืืืื
[bot_settings]
bot_token=ะขะะะะ_ะะะจะะะ_ะะะขะ
[db_settings]
db_path=C:/ะะฃะขะฌ/ะ/ะะะะะ/ะะ ะะะะขะ/bot.db
ืืชืฆืืจื ืื ื ืืืชืืื ืืช ืืกืืืื ืืืื ืืืช ืื ืชืื ืืืกื ืื ืชืื ืื, ืืืืืจ. ืืงืืืฅ bot.db; ืื ื ื ืืฆืืจ ืืช ืืงืืืฅ ืขืฆืื ืืฉืื ืืื.
ืขืืืจ ืืืืื ืืืจืืืื ืืืชืจ, ืืชื ืืืื ืืืฆืืจ ืชืฆืืจืืช ืืืจืืืืช ืืืชืจ, ืืืฅ ืืื, ืืื ืฆืืจื ืืืชืื ืชืฆืืจืช ini, ืืชื ืืืื ืืืฉืชืืฉ ืืื ืคืืจืื ืืืจ ืืืื JSON.
ืฆืืจ ืืฉืชื ื ืกืืืื
ืืื PC ื ืืชื ืืืชืจ ืืช ืืชืืงืื ืขื ืคืจืืืงื ืืืื ืืกืคืจืืืช ืฉืื ืืช ืืืืื ื ืื ืฉืื ืื, ืื ืฉืืงืื ืื ืชืื ืืชืืงืืืช ืืคืจืืืงื ืืืืืจ ืืืืฆืขืืช ืืฉืชื ื ืกืืืื TG_BOT_PATH
.
ืืฉื ื ืืกืคืจ ืืจืืื ืืืฆืืจ ืืฉืชื ื ืกืืืื, ืืคืฉืืื ืืืืชืจ ืืื ืืืชืื ืืืชื ืืงืืืฅ .Renviron.
ืืชื ืืืื ืืืฆืืจ ืื ืืขืจืื ืงืืืฅ ืื ืืืืฆืขืืช ืืคืงืืื file.edit(path.expand(file.path("~", ".Renviron")))
. ืืฆืข ืืืชื ืืืืกืฃ ืฉืืจื ืืืช ืืงืืืฅ:
TG_BOT_PATH=C:/ะะฃะขะฌ/ะ/ะะะจะะะฃ/ะะ ะะะะขะฃ
ืืืืจ ืืื ืฉืืืจ ืืช ืืงืืืฅ .Renviron ืืืคืขื ืืืืฉ ืืช 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
);
ืื ืืืจืืชื ืืช ืคืจืืืงื ืืืื ื
# ะกะบัะธะฟั ัะพะทะดะฐะฝะธั ะฑะฐะทั ะดะฐะฝะฝัั
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'))
ืืชืืืช ืคืื ืงืฆืืืช ืืขืืืื ืขื ืืกื ืื ืชืื ืื
ืืฉ ืื ื ืืืจ ืงืืืฅ ืชืฆืืจื ืืืื ืืืกื ื ืชืื ืื ื ืืฆืจ. ืืขืช ืขืืื ืืืชืื ืคืื ืงืฆืืืช ืืื ืืงืจืื ืืืืชืื ื ืชืื ืื ืืืกื ื ืชืื ืื ืื.
ืื ืืืจืืชื ืืช ืืคืจืืืงื ื
ืงืื ืคืื ืงืฆืื ืืขืืืื ืขื ืืกื ืื ืชืื ืื
# ###########################################################
# 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 ืืฉ ืืืืืฅ ืืืืืืืืช ืืืื ืืืคืชื ืืขืืงืจื ืฉื ืืืืืืช. ืืชืืืื, ืื ื ืื ืกืื ืืืืกืืฃ ืืืืข ืืืืื, ืืื ื ืืงืืืื ืฉืืืื ืื โโื ืชืื ืื ืขืืืจ ืืฆ'ืื ืื ืืืื ืืืจ ืงืืืืื, ืืืืงืจื ืื ืื ื ืคืฉืื ืืขืืื ืื ืืช ืืืืืข ืขืืืจ ืืฆ'ืื ืืื.
ืืืืจ ืืื, ื ืฉืชืืฉ ืืคืื ืงืฆืืืช ืืืื ืืฉืืืืช ืืืืกื ื ืื ืฉื ืืืื.
ืฉืืืืช ืืื
ืืฉืื ืืื ืืื ืืืช ืืืื ืฉืื ื ืืื ืืฆืืจืช ืฉืืืืช. ืื ืืืจืืชื ืืช ืืคืจืืืงื ื
ืงืื ืฉืืืช ืืื
# ###########################################################
# 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
ืืืงืฉ ืืช ืฉืื, ืืืฉื ื ืืช ืืฆื ืืฆ'ืื ื wait_name, ืืืืืจ ืืืฆื ืืืชื ื ืืืื ืช ืฉืื.
ืืืืจ ืืื, ืืชื ืฉืืื ืืช ืืฉื ืืืื ืืขืืื ืืฉืืื enter_name
, ืืืื ืืืจื ืืืชื, ืืืชื ืืช ืืฉื ืฉืืชืงืื ืืืกื ืื ืชืื ืื, ืืืขืืืจ ืืช ืืฆ'ืื ืืืฆื wait_age.
ืืฉืื ืื, ืืืื ืืฆืคื ืืื ืืืืื ืืช ืืืื ืฉืื. ืืชื ืฉืืื ืืช ืืืื ืฉืื, ืืืื ืืืืง ืืช ืืืืืขื, ืื ืฉืืืช ืืงืกื ืืืงืื ืืกืคืจ, ืืื ืืืื: ะขั ะฒะฒัะป ะฝะตะบะพััะตะบัะฝัะต ะดะฐะฝะฝัะต, ะฒะฒะตะดะธ ัะธัะปะพ
, ืืืืชืื ืฉืชืืื ืืืืฉ ืืช ืื ืชืื ืื ืฉืื. ืื ืฉืืืช ืืกืคืจ, ืืืื ืืืืื ืฉืืื ืงืืื ืืช ืืืื, ืืืชืื ืืช ืื ืชืื ืื ืฉืืชืงืืื ืืืืืจ, ืืืืื ืขื ืื ืื ืชืื ืื ืฉืืชืงืืื ืืื ืืืืืืจ ืืช ืืฆื ืืฆ'ืื ืืืงืืื ืืืงืืจื, ืืืืืจ. V 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()
, ืืื ืืืงืฉ ืืช ืืืฆื ืื ืืืื ืฉื ืืฆ'ืื. ืคืื ืงืฆืื ืื ืืืจืฉืช ืจืง ืืจืืืื ื ืืื, ืืืื ืฆ'ืื.
ืืืกื ื ืืื wait_name ืืขืื ืืืืขืืช ืืืฉืจ ืืฆ'ืื ื ืืฆื ืืืฆื wait_name
, ืืืืชืื ืืื ืืคืืืืจ wait_age ืืขืื ืืืืขืืช ืืืฉืจ ืืฆ'ืื ื ืืฆื ืืืฆื 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()
ืืชืืฆืื ืืื, ืงืืืื ื ืืช ืืืื ืืื:
ืืื ืขืช ืืืืฆืขืืช ืืคืงืืื /state
ืื ื ืืืืืื ืืฉืืื ืืช ืืฆื ืืฆ'ืื ืื ืืืื, ืืืืืฆืขืืช ืืคืงืืื /reset
ืืืืืืจ ืืช ืืฆ'ืื ืืืฆืื ืืืงืืจื ืืืืชืืื ืืช ืืืืืืื ืฉืื.
ืืกืงื ื
ืืืืืจ ืื, ืืื ื ืืืฆื ืืืฉืชืืฉ ืืืกื ื ืชืื ืื ืืชืื ืืื, ืืืืฆื ืืื ืืช ืืืืืืืื ืืืืืื ืขืืงืืื ืขื ืืื ืืงืืืช ืืฆื ืืฆ'ืื.
ืืืงืจื ืื, ืืกืชืืื ื ืขื ืืืืืื ืืคืจืืืืืืืืช ืืืืชืจ, ืืื ืฉืืืื ืื ืงื ืืืชืจ ืืืืื ืืช ืืจืขืืื ืฉื ืื ืืืช ืืืืื ืืืื; ืืคืืขื, ืืชื ืืืื ืืื ืืช ืืืืืืืื ืืจืื ืืืชืจ ืืืจืืืื.
ืืืืืจ ืืื ืืกืืจื ืื ื ืืื ืืืฆื ืืืืืื ืืช ืืืืืืืช ืฉื ืืฉืชืืฉื ืืืื ืืืฉืชืืฉ ืืฉืืืืช ืฉืื ืืช ืฉืื.
ืืงืืจ: www.habr.com