แแฃ แฃแแแ แฌแแแแแแฎแ แฌแแแ
แแ แกแขแแขแแแจแ แฉแแแ แแแกแฌแแแแแ แ แแแแ แแแแฌแแ แแ แแแขแ, แ แแแแแแช แจแแแแแ แฉแฃแแแแก แแแแแแแแแแ แฃแ แแแแแแแก. แแแแ. แแแขแ แแแแแกแแแแ แแแแฎแแแแก แแ แแแแแแแแแแ แ แแแแ แแแคแแ แแแชแแแก แจแแงแแแแแก. แแฅแแแแก แแแแ แจแแงแแแแแแ แแแแแชแแแแแแแแ แแแแแแแแแแ แ, แแแขแ แจแแแกแ แฃแแแแก แ แแแแแแแแ แแแฅแแแแแแแก.
แแกแแแ แแ แกแขแแขแแแจแ แฉแแแ แแแกแฌแแแแแ แแฃ แ แแแแ แแแแแแแงแแแแ แแแแแชแแแแ แแแแ แแแขแแก แฅแฃแแแก แฅแแแจ, แฉแแแแก แแแแแแแแจแ แแก แแฅแแแแ SQLite, แแแแ แแ แจแแแแซแแแแ แแแแแแงแแแแ แแแแแกแแแแ แ แกแฎแแ DBMS. แแ แฃแคแ แ แแแขแแแฃแ แแ แแแแฌแแ แ แแแแแชแแแแ แแแแแแแแ แฃแ แแแแ แแฅแแแแแแแก แจแแกแแฎแแ R แแแแแ
แงแแแแ แกแขแแขแแ แกแแ แแแแแ "แขแแแแแ แแแแก แแแขแแก แแแฌแแ แ R-แจแ"
แฉแแแ แแฅแแแแ แแแขแก แแ แแแงแแแแแ แแแก แขแแแแแ แแแแจแ แจแแขแงแแแแแแแแแแก แแแกแแแแแแแแ แแแแแแขแแ แแ แซแแแแแแก แแฎแแ แแแญแแ แ แแ แจแแขแงแแแแแแแแแแก แคแแแขแ แแแ แแแขแจแ แ แแแแ แแแแแแแขแแ แแแแแแแขแฃแ แแก แแฎแแ แแแญแแ แ แแแขแก แแแแแแแแแแ แฃแแ, แแแแแแฃแ แ แแแแแแแแก แแแแแ แแแขแแแ
แแแคแแ แแแชแแแก
แแฃ แแแแแขแแ แแกแแแ แแแแแชแแแแ แแแแแแแ, แจแแแซแแแแ แแแแแแแขแแ แแกแแ แฉแแแ
แจแแกแแแแแ แแแขแแก แแแแแแก แแ แแชแแกแ แแแขแแก แแ แแแฅแขแแก แกแขแ แฃแฅแขแฃแ แ แแแขแแก แแแแคแแแฃแ แแชแแ แจแแฅแแแแแ แแแ แแแแก แชแแแแแ แแแแแชแแแแ แแแแแก แจแแฅแแแ แคแฃแแฅแชแแแแแก แฉแแฌแแ แ แแแแแชแแแแ แแแแแกแแแ แแฃแจแแแแแกแแแแก แแแขแแก แแแแแแแแ แจแแขแงแแแแแแแแแแก แคแแแขแ แแแ แแแแแฃแจแแแแแแแแ แแแขแแก แแแจแแแแแก แแแแ แแแกแแแแ
แจแแกแแแแแ
แแแแกแแแแก, แ แแ แแแขแแ แแแแแฎแแแแก แแฅแแแแแแ แแแแแชแแแแแ แแ แแแแแแแแ แ แแแแ แแแคแแ แแแชแแแก แจแแงแแแแแก, แแฅแแแ แแแแญแแ แแแแแ แแแแแแแแก แแแแแแแแ แ แแแแแแแ แแแแแก แฉแแฌแแ แ. แแแแก แแแแแแแแแก แกแแฃแแแแแกแ แแแ แแ แแก แ แแแแ แกแแฎแแก แฉแแจแแแแแฃแแ แแแแแชแแแแ แแแแแก แแแแแงแแแแแ, แ แแแแ แแชแแ SQLite.
แแแแ. แแแแแแ แแกแแแ แแฅแแแแ. แฉแแแ แแแแฃแฌแแแแแ แแแขแแก แแแแแแก แแ แแแขแ แแแแแแแแแแ แฃแแแ แแแฎแแแก แฉแแแแแแ แแแ แแแแฃแ แแแคแแ แแแชแแแก แแ แงแแแแ แแแแแฏแแ แแแแแแแ แแ แแแคแแ แแแชแแแก แจแแงแแแแแก แแ แจแแฃแซแแแ แจแแแแแฌแแแก แแแ.
แฉแแแ แแแแฌแแ แ แฃแแแ แขแแแแก แแแขแก, แฏแแ แแก แแแแแฎแแแก แกแแฎแแแก, แจแแแแแ แแกแแแก แแ แแแฆแแแฃแ แแแแแชแแแแแก แแแแแชแแแแ แแแแแจแ แจแแแแแฎแแแก. แแกแแแแก แแแแฎแแแแแกแแก แแแแฌแแแแก, แ แแ แจแแงแแแแแแ แแแแแชแแแแแ แแ แแก แ แแชแฎแแ แแ แแ แ แขแแฅแกแขแ.
แแกแแ แแแ แขแแ แแแแแแแก แแฎแแแแ แกแแแ แแแแแแแ แแแแ แแฅแแแแ:
- แแแฌแงแแแ แแ แแก แแแขแแก แแแ แแแแฃแ แ แแแแแแแ แแแแ, แ แแแแแจแแช แแก แแ แแแแก แแฅแแแแแแ แแแคแแ แแแชแแแก
- Wait_name - แแแแแแแ แแแแ, แ แแแแแจแแช แแแขแ แแแแแแแ แกแแฎแแแแก แจแแงแแแแแก
- Wait_age แแ แแก แแแแแแแ แแแแ, แ แแแแแจแแช แแแขแ แแแแแแแ แแฅแแแแ แแกแแแแก แจแแงแแแแแก, แกแ แฃแแ แฌแแแแแก แ แแแแแแแแแก.
แแแขแแก แแแแแแก แแ แแชแแกแ
แกแขแแขแแแก แแแแแแแแแแแจแ แฉแแแ แแแแจแแแแแ แแแขแก แแขแแแแแ แแแแ; แแแแแ แแ แแชแแกแ แจแแแซแแแแ แกแฅแแแแขแฃแ แแ แแงแแก แแแแแกแแฎแฃแแ แจแแแแแแแแแ แแ:
- แฉแแแ แแฅแแแแ แแแขแแก แแแแคแแแฃแ แแชแแแก, แ แแแแแจแแช แจแแแแแแฎแแแ แ แแแแแแแแ แแแ แแแแขแ แก. แฉแแแแก แจแแแแฎแแแแแจแ, แแแขแแก แแแจแแแ แแ แแแ แแแแแชแแแแ แแแแแก แคแแแแแกแแแ.
- แฉแแแ แแฅแแแแ แแแ แแแแก แชแแแแแก, แ แแแแแจแแช แจแแแแแฎแแแ แแแขแแ แแ แแแฅแขแแก แแแ.
- แฉแแแ แแฅแแแแ แแแแแ แแแแแชแแแแ แแแแแก แแ แ แแ แคแฃแแฅแชแแแแก, แ แแแ แแแขแแ แจแแซแแแก แแแกแแแ แฃแ แแแแ แแแแ.
- แแฌแแ แ แแแขแแก แแแแแแแแก, แ.แ. แคแฃแแฅแชแแแแก, แ แแแแแกแแช แแก แจแแแกแ แฃแแแแก.
- แจแแขแงแแแแแแแแแแก แคแแแขแ แแแแก แแแแแขแแแ. แ แแแแแก แแแฎแแแ แแแแ แแแขแ แแแแฆแแแก แฌแแแแแแก แแฃแชแแแแแแ แแแแแแแแแ, แ แแช แแแแแแแแแแฃแแแ แฉแแขแแก แแแแแแแแแแ แแแแแแแ แแแแแแ.
- แฉแแแ แแแแแขแแแ แแแแแฃแจแแแแแแแแก, แ แแแแแแแช แแแแแแแจแแ แแแแ แแ แซแแแแแแแก แแ แจแแขแงแแแแแแแแแก แแแขแแก แกแแญแแ แ แแแแแแแแแ.
- แแแแแ แแแแฃแจแแแ แแแขแ.
แแแขแแก แแ แแแฅแขแแก แกแขแ แฃแฅแขแฃแ แ
แแแฎแแ แฎแแแฃแแแแแกแแแแก, แฉแแแ แแแแงแแคแ แฉแแแแ แแแขแแก แแแแก แแ แกแฎแแ แแแแแแจแแ แแแฃแ แคแแแแแแก แจแแแแแ แกแขแ แฃแฅแขแฃแ แแ.
- แแแขแ.แ โ แฉแแแแ แแแขแแก แแแแแแ แ แแแแ
- db_bot_function.R โ แแแแแก แแแแแ แแแแแชแแแแ แแแแแกแแแ แแฃแจแแแแแก แคแฃแแฅแชแแแแแ
- bot_methods.R - แแแขแแก แแแแแแแแแก แแแแ
- แจแแขแงแแแแแแแแก_แคแแแขแ แแแ.R - แจแแขแงแแแแแแแแแแก แคแแแขแ แแแ
- แแแแแฃแจแแแแแแแแ.แ - แแแแแฃแจแแแแแแแแ
- แแแแคแแแฃแ แแชแแ. 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-แแก แฉแแแแแแ.
แจแแฅแแแแแ แแแ แแแแก แชแแแแแ
แแแแแแฃแ แแแแแแฃแขแแ แแ แแแขแแก แแ แแแฅแขแแก แแฅแแแ แกแแฅแแฆแแแแ แจแแแซแแแแ แแแแแแแกแแแก แกแฎแแแแแกแฎแแ แแแ แแฅแขแแ แแแจแ แแ แกแฎแแแแแกแฎแแ แแแกแแแ, แแกแ แ แแ แแแแจแ แแ แแแฅแขแแก แกแแฅแแฆแแแแแกแแแ แแแแแแแแ แแแ แแแงแแแแแแ แแแ แแแแก แชแแแแแแก แแแจแแแแแแ. 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
);
แแฃ แฉแแแแขแแแ แแแ แแแขแแก แแ แแแฅแขแ
# ะกะบัะธะฟั ัะพะทะดะฐะฝะธั ะฑะฐะทั ะดะฐะฝะฝัั
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
, แแแขแ แแแแแชแแแก, แฌแแ แก แแแฆแแแฃแ แกแแฎแแแก แแแแแชแแแแ แแแแแจแ แแ แชแแแแก แฉแแขแก แแแแแแแ แแแแแแ แแแแแแแก_แแกแแแ.
แแ แแขแแแแ แแแขแ แแแแก, แ แแ แจแแแงแแแแแ แแฅแแแแ แแกแแแ. แแฅแแแ แแแแแแแแ แแฅแแแแก แแกแแแก, แแแขแ แแแแฌแแแแก แจแแขแงแแแแแแแแก, แแฃ แแแแ แแก แแแชแแแแ แแแแแแแแแ แขแแฅแกแขแ, แแก แแขแงแแแก: ะขั ะฒะฒัะป ะฝะตะบะพััะตะบัะฝัะต ะดะฐะฝะฝัะต, ะฒะฒะตะดะธ ัะธัะปะพ
แแ แแแแแแแแแ แแฅแแแ แฎแแแแฎแแ แจแแแงแแแแแ แแฅแแแแ แแแแแชแแแแแ. แแฃ แแแแแ แ แแแแแแแแแแแแแ, แแแขแ แจแแแแขแงแแแแแแแ, แ แแ แแแ แแแแฆแ แแฅแแแแ แแกแแแ, แฉแแฌแแ แก แแแฆแแแฃแ แแแแแชแแแแแก แแแแแชแแแแ แแแแแจแ, แแแแฎแกแแแแแก แแฅแแแแแแ แแแฆแแแฃแแ แงแแแแ แแแแแชแแแก แแ แแแแแ แฃแแแแก แฉแแขแแก แแแแแแแ แแแแแก แแแแแแแแ แแแ แแแแแชแแแแ, แ.แ. แ 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 แแ แแฃแแแแขแก, แฉแแขแแก ID-แก.
แจแแแแแแ แคแแแขแ แ Wait_name แแแฃแจแแแแแก แจแแขแงแแแแแแแแแก, แ แแแแกแแช แฉแแขแ แแแแแแแ แแแแแจแแ 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()
แจแแแแแแ แแแแแฆแแ แแก แแแขแ:
แแแแแกแแแแ แแ แแก แแ แซแแแแแแก แแแแแงแแแแแแ /state
แฉแแแ แจแแแแแซแแแ แแแแแแแแแแฎแแ แฉแแขแแก แแแแแแแแ แ แแแแแแแ แแแแ แแ แแ แซแแแแแแก แแแแแงแแแแแแ /reset
แแแแแ แฃแแแ แฉแแขแ แแแแแแแแ แแแ แแแแแแแ แแแแแจแ แแ แแแแแ แแแแฌแงแแ แแแแแแแ.
แแแกแแแแ
แแ แกแขแแขแแแจแ แฉแแแ แแแแแ แแแแแ, แแฃ แ แแแแ แแแแแแแงแแแแ แแแแแชแแแแ แแแแ แแแขแแก แจแแแแแ แแ แ แแแแ แแแแจแแแแ แแแแแแแแแแ แฃแแ แแแแแแฃแ แ แแแแแแแแแ แฉแแขแแก แแแแแแแ แแแแแก แฉแแฌแแ แแ.
แแ แจแแแแฎแแแแแจแ แฉแแแ แแแแแแฎแแแแ แงแแแแแแ แแ แแแแขแแฃแ แแแแแแแแก, แ แแแ แแแแแแแแแแแแ แแแแแแ แ แแแขแแแแก แจแแฅแแแแก แแแแแก แแแแแแ; แแ แแฅแขแแแแจแ, แแฅแแแ แจแแแแซแแแแ แแแฌแงแแ แแแแ แแ แฃแคแ แ แ แแฃแแ แแแแแแแแแ.
แแ แกแแ แแแก แแแแแแแแ แกแขแแขแแแจแ แฉแแแ แแแกแฌแแแแแ, แแฃ แ แแแแ แจแแแแฆแฃแแแ แแแขแแก แแแแฎแแแ แแแแแแแก แฃแคแแแแแแ แแแกแ แกแฎแแแแแกแฎแแ แแแแแแแแแก แแแแแงแแแแแแก แจแแกแแฎแแ.
แฌแงแแ แ: www.habr.com