ášáá°ááá á áá¥á á ášáá
á áá áœáá ááµá¥, áᥠášáá ááááµá ášáá á¥á áŠáµ á¥ááŽáµ á¥áá°áá»á á¥ááá«áá. á¥ááá«á¢ áŠá± á¥á«áááœá áá áá áá³á á¥á á áá³ááµ áášáááœá á¥áá²á«áµáá¡ áá á¥á áá³áᢠá áá«áµáá¡áµ ááᥠáá á áááµášáµ áŠáµ á áá³ááµ áµááá¶áœá áááœáá.
á¥áá²áá á áá
áœáá ááµá¥ á bot áœáá áµá ášááᥠáá³ á¥ááŽáµ á¥áá°áá áá á¥ááá«áá ᣠá á¥á áá³á ááµá¥ SQLite áááá ᣠáá áááááá áá DBMS áá áá ááœááᢠá R ááá ášáášá áá¶áœ áá áµá ááµá°áá¥á ášá áá á áááá áœáá«áá
ášá°ášá³á³á© ááá áá£á¥áᜠ"ášáŽááá«á áŠáµ á R ááµá¥ áá»á"
áŠáµ ááá á© á¥á áá° áŽááá«á ááá¥ááµ áááá áá ááá áµ ášáµá¥áá áµáá á¥á ášááá¥ááµ áá£áªá«ááœá áá° áŠáµ á«áá ášááá á°áá³ áµááá áá° áŠáµ á¥ááŽáµ áášá á¥áá°áá»á ášáŠáµ áá áᥠášáá áááá«á³á ááááµ áááá£áµ
ááá¶áœ
ášááᥠáµáá°á áá ááááµ á«ááµ ášá¥áá áááá ááœáá
ááá¢á« ášáŠáµ ááá£á³ áá°áµ Bot áá®áááµ ááá á ášáŠáµ áááá ášá á«á£á¢ á°áááá ááá á© ášááᥠáá³ ááá á ášáášá áá± áá áááµá«áµ ášáá»á á°áá£á«áµ ášáŠáµ ááŽáᜠášááá¥ááµ áá£áªá«áᜠá°áá£á£áªáᜠášáŠáµ ááµáááªá« á®áµ áá°áá°áá«
ááá¢á«
áŠáµ áášáá ášá¥ááµá á¥áá²á áá á¥á áááááá áášá á¥áá²á«áµáá¡ á¥áá²á á¥á ááµ, ášááááµ áááá©á áá á³á ááá³ ááááᥠá«áµááááá³á. áá áá áááµášá á á£á á¥á©á ááááµ á¥áá° SQLite á«á á áá³ááµ ášá°ášá°á° ášááᥠáá³ áá áá ááá¢
á¥ááá«á¢ á áááá®á á¥áá°áášá°áá áááá. ášáŠáµ ááŽá á¥áá á«ááá, á¥á áŠáµ á á á°á á°ášá°á á áá³ááµ áášáááœá ášá¥á áá ááá, á¥á á á¥á«áá³áá± á¥ááá áá áášá á¥áµáªáᣠáµášáµ áá á¥áá á¥á áá«á£á«á ááœáá.
á á£á ááá ášáááá áŠáµ á¥ááœááá, á ááááªá« áµááá, ášáá«á á¥áµááá áá ááá, á¥á ášá°áá ááá ááᥠáá° ášááᥠáá³ á«áµááá£á. á¥áµá á²á áá ášáá£á áášá áá¥á á¥áá áœáá á ááááá á«ášááá£áá¢
á¥áá²á áááá± ááá ááááµ áŠáµáµ ááá³áᜠá¥á» ááášáá.
- á áá ášá¥ááµá ááá áášá ášááá á¥á á áµ ášáŠáµ áá°á á ááá³ ááá¢
- wait_name - áŠáµ áµá á¥áµáªáᣠášáá á¥á á áµ ááá³
- wait_age áááµ ááµáá á¥áµáªáᣠáµášáµ áŠá± ášáá á¥á á áµ ááá³á£ ášáá ááá³áµ á¥ááµ ááá¢
ášáŠáµ ááá£á³ áá°áµ
á á ááá¹ áá áŠáµ á°ášá á á°ášá á¥áááá£áá ᣠá á ááá áá°á± á áášá°áá ááµá áááᜠááœáá-
- á áá³ááµ á áá¥á®áœá ášááášááœá áµ áš bot config á¥ááá¥á«ááᢠá á¥á ááá³, bot token, á¥á áá° ášááᥠáá³ ááá ášáááµá°á ááááµ.
- ášáŠáµ áá áá° áá®ááá± ášáááµá°á ááááµ ášáášááœá áµá ášá á«á£á¢ á°áááá á¥ááá¥á«áá.
- áŠáµ ášá¥á± áá ááµá°áá¥á á¥áá²áá á ášááᥠáá³áá á¥á«á± á¥á á áá«á³ á°áá£á«áµá á¥ááá¥á«áá.
- ášáŠáµ ááŽááœá á¥ááœááá, áááµá. ášáá«ášáááážá á°áá£á«áµ.
- ášááá¥ááµ áá£áªá«ááœá á áášá ááᢠá ášáµáá áŠáµ á¥áá³á³ á¥áá° á»á± áá á³á ááá³, á áµááá ášáááµá ááŽáᜠá«ááá.
- áµááááœá á¥á ááááá¶áœá ášá áµáááá ášáŠáµ ááŽáᜠáá ášáá«ááá á°áá£á£áªááœá á¥áášáá«áá.
- áŠá±á á¥ááµáááá¢
Bot áá®áááµ ááá á
áááá»ážáµ ášáŠá³áœáá á®áµ á¥á ááᜠá°ááá ááááœá á áášá°áá ááá á á¥áášáááááá¢
- bot.R - ášá¥á bot áá á®áµ
- db_bot_function.R - ášáášá áá± áá áááµá«áµ á°áá£á«áµ á«áá ášá®áµ á¥áá³
- ášáŠáµ_ááŽááœ.á á - áš bot ááŽáᜠá®áµ
- áááááµ_áá£áªá«ááœ.á á - ášááá¥ááµ áá£áªá«ááœ
- á°áá£á£áªááœ.á á - á°áá£á£áªááœ
- config.cfg - bot áá á
- áá á_db_á³á³.sql - á ááᥠáá³ ááµá¥ ášááááµ ááᥠá«áá á°áá ášá¥ áááá á SQL áµááªááµ
- áá á_db_state.sql - á áášá áá± ááµá¥ ášá ááá ášááááµ ááá³ á°áá ášá¥ áááá á SQL áµááªááµ
- bot.db - bot ášááᥠáá³
áááá ášáŠáµ áá®áááµ áášáµ ááœááᣠááá
ášáŠáµ áááá
ášá°ááá°áá á¥áá° áááá á¥áá áááá
[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
);
ášáŠáµ áá®ááá±á á«áášá±
# СкÑÐžÐ¿Ñ ÑÐŸÐ·ÐŽÐ°ÐœÐžÑ Ð±Ð°Ð·Ñ ÐŽÐ°ÐœÐœÑÑ
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}';
á¥ááá«á¢ á á ášáŽááá»áœá ááµá ááááµ_áá³ááá« ášáá©ááµ áá°á¥ á áá á¥á ášá ášáŽááᜠáá ááá ááᢠááááªá« áá, áášáá áá° á ášáŽáá ááášáá á¥áááá«áá, á¥á áá áá ááááµ ááᥠááµááá á«á áµá á°áµ á¥ááááá, á áá á áá£á ášáá á ááááµ áášá á ááá á¥ááááááá.
á ááá á á¥ááá á á°áá£á«áµ á 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()
á áá€á±á ᣠáá
áá áŠáµ á ááá-
á ááááá áá áµáááá á áá áá /state
á áá á«ááá ášááááµ ááá³ á¥á áµáááá á áá áá áá ášá
á¥ááœááá /reset
áááá±á áá° ááááªá«á ááá³á ââáááá± á¥á áááá±á á¥áá°áá áááá©á¢
áá°áá°áá«
á áá áœáá ááµá¥, á bot ááµá¥ ášááᥠáá³ á¥ááŽáµ á¥áá°áá áá, á¥á ášá»áµ ááá³á á ááááᥠá¥ááŽáµ á°ášá³á³á ááá«á áááá¶áœá áááá£áµ á¥áá°áá»á á áááá.
á áá áá᳠ᣠá¥áá°áá á«á áŠá¶áœ ášáááá£áµá áá³á¥ ááášá³áµ ááá ááááá áááµ á á£á á¥áá³ááá áá³á á°áááá°áá ᣠá á°áá£á ᣠášá áá ááµá¥áµá¥ áááá¶áœá áááá£áµ ááœááá¢
á áá á°ášá³á³á áááµ ááµá¥ ášáŠáµ á°á ááááœá ášá°áá«á© ááŽááœá ášáá áá áá¥áµá á¥ááŽáµ ááá°á¥ á¥áá°áá»á á¥ááá«ááá¢
ááá: hab.com