R-เตฝ เด’เดฐเต เดŸเต†เดฒเดฟเด—เตเดฐเดพเด‚ เดฌเต‹เดŸเตเดŸเต เดŽเดดเตเดคเตเดจเตเดจเต (เดญเดพเด—เด‚ 4): เดฌเต‹เดŸเตเดŸเตเดฎเดพเดฏเดฟ เดธเตเดฅเดฟเดฐเดตเตเด‚ เดฏเตเด•เตเดคเดฟเดธเดนเดตเตเดฎเดพเดฏ เดธเด‚เดญเดพเดทเดฃเด‚ เดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เตเด•

เดจเดฟเด™เตเด™เตพ เดฎเตเดฎเตเดชเดคเตเดคเต‡เดคเต เด‡เดคเดฟเดจเด•เด‚ เดตเดพเดฏเดฟเดšเตเดšเดฟเดŸเตเดŸเตเดฃเตเดŸเต†เด™เตเด•เดฟเตฝ เดฎเต‚เดจเตเดจเต เดฒเต‡เด–เดจเด™เตเด™เตพ เดˆ เดถเตเดฐเต‡เดฃเดฟเดฏเดฟเตฝ เดจเดฟเดจเตเดจเต, เด•เต€เดฌเต‹เตผเดกเต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดชเต‚เตผเดฃเตเดฃเดฎเดพเดฏ เดŸเต†เดฒเดฟเด—เตเดฐเดพเด‚ เดฌเต‹เดŸเตเดŸเตเด•เตพ เดŽเด™เตเด™เดจเต† เดŽเดดเตเดคเดพเดฎเต†เดจเตเดจเต เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด‡เดคเดฟเดจเด•เด‚ เด…เดฑเดฟเดฏเดพเด‚.

เดˆ เดฒเต‡เด–เดจเดคเตเดคเดฟเตฝ, เดธเตเดฅเดฟเดฐเดฎเดพเดฏ เดธเด‚เดญเดพเดทเดฃเด‚ เดจเดฟเดฒเดจเดฟเตผเดคเตเดคเตเดจเตเดจ เด’เดฐเต เดฌเต‹เดŸเตเดŸเต เดŽเด™เตเด™เดจเต† เดŽเดดเตเดคเดพเดฎเต†เดจเตเดจเต เดจเดฎเตเดฎเตพ เดชเด เดฟเด•เตเด•เตเด‚. เด†. เดฌเต‹เดŸเตเดŸเต เดจเดฟเด™เตเด™เดณเต‹เดŸเต เดšเต‹เดฆเตเดฏเด™เตเด™เตพ เดšเต‹เดฆเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดจเดฟเด™เตเด™เตพ เดšเดฟเดฒ เดตเดฟเดตเดฐเด™เตเด™เตพ เดจเตฝเด•เตเดจเตเดจเดคเดฟเดจเดพเดฏเดฟ เด•เดพเดคเตเดคเดฟเดฐเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเด‚. เดจเดฟเด™เตเด™เตพ เดจเตฝเด•เตเดจเตเดจ เดกเดพเดฑเตเดฑเดฏเต† เด†เดถเตเดฐเดฏเดฟเดšเตเดšเต, เดฌเต‹เดŸเตเดŸเต เดšเดฟเดฒ เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เตพ เดจเดŸเดคเตเดคเตเด‚.

เดˆ เดฒเต‡เด–เดจเดคเตเดคเดฟเตฝ เดฌเต‹เดŸเตเดŸเดฟเดจเตเดฑเต† เดนเต‚เดกเดฟเดจเต เด•เต€เดดเดฟเตฝ เด’เดฐเต เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเต เดŽเด™เตเด™เดจเต† เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเดฎเต†เดจเตเดจเต เดžเด™เตเด™เตพ เดชเด เดฟเด•เตเด•เตเด‚, เดžเด™เตเด™เดณเตเดŸเต† เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเตฝ เด‡เดคเต SQLite เด†เดฏเดฟเดฐเดฟเด•เตเด•เตเด‚, เดŽเดจเตเดจเดพเตฝ เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดฎเดฑเตเดฑเต‡เดคเต†เด™เตเด•เดฟเดฒเตเด‚ DBMS เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเด‚. R เดญเดพเดทเดฏเดฟเตฝ เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเตเด•เดณเตเดฎเดพเดฏเดฟ เดธเด‚เดตเดฆเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เดžเดพเตป เด•เต‚เดŸเตเดคเตฝ เดตเดฟเดถเดฆเดฎเดพเดฏเดฟ เดŽเดดเตเดคเดฟ เดˆ เดฒเต‡เด–เดจเด‚.

R-เตฝ เด’เดฐเต เดŸเต†เดฒเดฟเด—เตเดฐเดพเด‚ เดฌเต‹เดŸเตเดŸเต เดŽเดดเตเดคเตเดจเตเดจเต (เดญเดพเด—เด‚ 4): เดฌเต‹เดŸเตเดŸเตเดฎเดพเดฏเดฟ เดธเตเดฅเดฟเดฐเดตเตเด‚ เดฏเตเด•เตเดคเดฟเดธเดนเดตเตเดฎเดพเดฏ เดธเด‚เดญเดพเดทเดฃเด‚ เดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เตเด•

"R-เตฝ เด’เดฐเต เดŸเต†เดฒเดฟเด—เตเดฐเดพเด‚ เดฌเต‹เดŸเตเดŸเต เดŽเดดเตเดคเตเดจเตเดจเต" เดŽเดจเตเดจ เดชเดฐเดฎเตเดชเดฐเดฏเดฟเดฒเต† เดŽเดฒเตเดฒเดพ เดฒเต‡เด–เดจเด™เตเด™เดณเตเด‚

  1. เดžเด™เตเด™เตพ เด’เดฐเต เดฌเต‹เดŸเตเดŸเต เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดŸเต†เดฒเดฟเด—เตเดฐเดพเดฎเดฟเตฝ เดธเดจเตเดฆเต‡เดถเด™เตเด™เตพ เด…เดฏเดฏเตเด•เตเด•เดพเตป เด…เดคเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต
  2. เดฌเต‹เดŸเตเดŸเดฟเดฒเต‡เด•เตเด•เต เด•เดฎเดพเตปเดกเต เดชเดฟเดจเตเดคเตเดฃเดฏเตเด‚ เดธเดจเตเดฆเต‡เดถ เดซเดฟเตฝเดŸเตเดŸเดฑเตเด•เดณเตเด‚ เดšเต‡เตผเด•เตเด•เตเด•
  3. เด’เดฐเต เดฌเต‹เดŸเตเดŸเดฟเดฒเต‡เด•เตเด•เต เด•เต€เดฌเต‹เตผเดกเต เดชเดฟเดจเตเดคเตเดฃ เดŽเด™เตเด™เดจเต† เดšเต‡เตผเด•เตเด•เดพเด‚
  4. เดฌเต‹เดŸเตเดŸเตเดฎเดพเดฏเดฟ เดธเตเดธเตเดฅเดฟเดฐเดตเตเด‚ เดฏเตเด•เตเดคเดฟเดธเดนเดตเตเดฎเดพเดฏ เดธเด‚เดญเดพเดทเดฃเด‚ เดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เตเดจเตเดจเต

เด‰เดณเตเดณเดŸเด•เตเด•เด‚

เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดกเดพเดฑเตเดฑ เดตเดฟเดถเด•เดฒเดจเดคเตเดคเดฟเตฝ เดคเดพเตฝเดชเตเดชเดฐเตเดฏเดฎเตเดฃเตเดŸเต†เด™เตเด•เดฟเตฝ, เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดŽเดจเตเดฑเต† เดคเดพเตฝเดชเตเดชเดฐเตเดฏเดฎเตเดฃเตเดŸเดพเด•เดพเด‚ เดŸเต†เดฒเด—เตเดฐเดพเด‚ ะธ YouTube เดšเดพเดจเดฒเตเด•เตพ. เด‰เดณเตเดณเดŸเด•เตเด•เดคเตเดคเดฟเดจเตเดฑเต† เดญเต‚เดฐเดฟเดญเดพเด—เดตเตเด‚ R เดญเดพเดทเดฏเตโ€Œเด•เตเด•เดพเดฏเดฟ เดธเดฎเตผเดชเตเดชเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต.

  1. เด†เดฎเตเด–เด‚
  2. เดฌเต‹เดŸเตเดŸเต เดจเดฟเตผเดฎเตเดฎเดพเดฃ เดชเตเดฐเด•เตเดฐเดฟเดฏ
  3. เดฌเต‹เดŸเตเดŸเต เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต เด˜เดŸเดจ
  4. เดฌเต‹เดŸเตเดŸเต เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป
  5. เด’เดฐเต เดชเดฐเดฟเดธเตเดฅเดฟเดคเดฟ เดตเต‡เดฐเดฟเดฏเดฌเดฟเตพ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเด•
  6. เด’เดฐเต เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเต เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจเต
  7. เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเตเดฎเดพเดฏเดฟ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เดพเดจเตเดณเตเดณ เดซเด‚เด—เตเดทเดจเตเด•เตพ เดŽเดดเตเดคเตเด•
  8. เดฌเต‹เดŸเตเดŸเต เดฐเต€เดคเดฟเด•เตพ
  9. เดธเดจเตเดฆเต‡เดถ เดซเดฟเตฝเดŸเตเดŸเดฑเตเด•เตพ
  10. เด•เตˆเด•เดพเดฐเตเดฏเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเดตเตผ
  11. เดฌเต‹เดŸเตเดŸเต เดฒเต‹เดžเตเดšเต เด•เต‹เดกเต
  12. เดคเต€เดฐเตเดฎเดพเดจเด‚

เด†เดฎเตเด–เด‚

เดฌเต‹เดŸเตเดŸเต เดจเดฟเด™เตเด™เดณเดฟเตฝ เดจเดฟเดจเตเดจเต เดกเดพเดฑเตเดฑ เด…เดญเตเดฏเตผเดคเตเดฅเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเด‚ เดจเดฟเด™เตเด™เตพ เดŽเดจเตเดคเต†เด™เตเด•เดฟเดฒเตเด‚ เดตเดฟเดตเดฐเด™เตเด™เตพ เดจเตฝเด•เตเดจเตเดจเดคเดฟเดจเดพเดฏเดฟ เด•เดพเดคเตเดคเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเด‚ เดตเต‡เดฃเตเดŸเดฟ, เดจเดฟเด™เตเด™เตพ เดกเดฏเดฒเต‹เด—เดฟเดจเตเดฑเต† เดจเดฟเดฒเดตเดฟเดฒเต† เด…เดตเดธเตเดฅ เดฐเต‡เด–เดชเตเดชเต†เดŸเตเดคเตเดคเต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต. SQLite เดชเต‹เดฒเต†เดฏเตเดณเตเดณ เดšเดฟเดฒ เด‰เตพเดšเตเดšเต‡เตผเดคเตเดค เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดคเดพเดฃเต เด‡เดคเดฟเดจเตเดณเตเดณ เดเดฑเตเดฑเดตเตเด‚ เดจเดฒเตเดฒ เดฎเดพเตผเด—เด‚.

เด†. เดฏเตเด•เตเดคเดฟ เด‡เดชเตเดฐเด•เดพเดฐเดฎเดพเดฏเดฟเดฐเดฟเด•เตเด•เตเด‚. เดžเด™เตเด™เตพ เดฌเต‹เดŸเตเดŸเต เดฐเต€เดคเดฟเดฏเต† เดตเดฟเดณเดฟเด•เตเด•เตเดจเตเดจเต, เดฌเต‹เดŸเตเดŸเต เดžเด™เตเด™เดณเดฟเตฝ เดจเดฟเดจเตเดจเต เดšเดฟเดฒ เดตเดฟเดตเดฐเด™เตเด™เตพ เดคเตเดŸเตผเดšเตเดšเดฏเดพเดฏเดฟ เด…เดญเตเดฏเตผเดคเตเดฅเดฟเด•เตเด•เตเดจเตเดจเต, เด“เดฐเต‹ เด˜เดŸเตเดŸเดคเตเดคเดฟเดฒเตเด‚ เด…เดคเต เดˆ เดตเดฟเดตเดฐเด™เตเด™เตพ เดจเตฝเด•เตเดจเตเดจเดคเดฟเดจเดพเดฏเดฟ เด•เดพเดคเตเดคเดฟเดฐเดฟเด•เตเด•เตเด•เดฏเตเด‚ เด…เดคเต เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเดพเด‚.

เดธเดพเดงเตเดฏเดฎเดพเดฏ เดเดฑเตเดฑเดตเตเด‚ เดฒเดณเดฟเดคเดฎเดพเดฏ เดฌเต‹เดŸเตเดŸเต เดžเด™เตเด™เตพ เดŽเดดเตเดคเตเด‚, เด†เดฆเตเดฏเด‚ เด…เดคเต เดจเดฟเด™เตเด™เดณเตเดŸเต† เดชเต‡เดฐเตเด‚ เดชเดฟเดจเตเดจเต€เดŸเต เดจเดฟเด™เตเด™เดณเตเดŸเต† เดชเตเดฐเดพเดฏเดตเตเด‚ เดšเต‹เดฆเดฟเด•เตเด•เตเด‚, เด•เต‚เดŸเดพเดคเต† เดฒเดญเดฟเดšเตเดš เดกเดพเดฑเตเดฑ เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเดฟเดฒเต‡เด•เตเด•เต เดธเด‚เดฐเด•เตเดทเดฟเด•เตเด•เตเด‚. เดชเตเดฐเดพเดฏเด‚ เดšเต‹เดฆเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ, เดจเตฝเด•เดฟเดฏ เดกเดพเดฑเตเดฑ เด’เดฐเต เดธเด‚เด–เตเดฏเดฏเดพเดฃเต†เดจเตเดจเตเด‚ เดตเดพเดšเด•เดฎเดฒเตเดฒเต†เดจเตเดจเตเด‚ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเด‚.

เด…เดคเตเดคเดฐเดฎเตŠเดฐเต เดฒเดณเดฟเดคเดฎเดพเดฏ เดธเด‚เดญเดพเดทเดฃเดคเตเดคเดฟเดจเต เดฎเต‚เดจเตเดจเต เด…เดตเดธเตเดฅเด•เตพ เดฎเดพเดคเตเดฐเดฎเต‡ เด‰เดฃเตเดŸเดพเด•เต‚:

  1. เดธเตเดฑเตเดฑเดพเตผเดŸเตเดŸเต เดŽเดจเตเดจเดคเต เดฌเต‹เดŸเตเดŸเดฟเดจเตเดฑเต† เดธเดพเดงเดพเดฐเดฃ เด…เดตเดธเตเดฅเดฏเดพเดฃเต, เด…เดคเดฟเตฝ เดจเดฟเด™เตเด™เดณเดฟเตฝ เดจเดฟเดจเตเดจเต เด’เดฐเต เดตเดฟเดตเดฐเดตเตเด‚ เดชเตเดฐเดคเต€เด•เตเดทเดฟเด•เตเด•เตเดจเตเดจเดฟเดฒเตเดฒ
  2. wait_name - เด’เดฐเต เดชเต‡เดฐเต เดจเตฝเด•เตเดจเตเดจเดคเดฟเดจเดพเดฏเดฟ เดฌเต‹เดŸเตเดŸเต เด•เดพเดคเตเดคเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจ เด…เดตเดธเตเดฅ
  3. เดจเดฟเด™เตเด™เดณเตเดŸเต† เดชเตเดฐเดพเดฏเด‚ เดจเตฝเด•เตเดจเตเดจเดคเดฟเดจเดพเดฏเดฟ เดฌเต‹เดŸเตเดŸเต เด•เดพเดคเตเดคเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจ เด…เดตเดธเตเดฅเดฏเดพเดฃเต wait_age, เดฎเตเดดเตเดตเตป เดตเตผเดทเด™เตเด™เดณเตเดŸเต† เดŽเดฃเตเดฃเด‚.

เดฌเต‹เดŸเตเดŸเต เดจเดฟเตผเดฎเตเดฎเดพเดฃ เดชเตเดฐเด•เตเดฐเดฟเดฏ

เดฒเต‡เด–เดจเดคเตเดคเดฟเตฝ, เดžเด™เตเด™เตพ เด˜เดŸเตเดŸเด‚ เด˜เดŸเตเดŸเดฎเดพเดฏเดฟ เด’เดฐเต เดฌเต‹เดŸเตเดŸเต เดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เตเด‚; เดฎเตเดดเตเดตเตป เดชเตเดฐเด•เตเดฐเดฟเดฏเดฏเตเด‚ เด‡เดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจ เดฐเต€เดคเดฟเดฏเดฟเตฝ เดšเดฟเดคเตเดฐเต€เด•เดฐเดฟเด•เตเด•เดพเด‚:
R-เตฝ เด’เดฐเต เดŸเต†เดฒเดฟเด—เตเดฐเดพเด‚ เดฌเต‹เดŸเตเดŸเต เดŽเดดเตเดคเตเดจเตเดจเต (เดญเดพเด—เด‚ 4): เดฌเต‹เดŸเตเดŸเตเดฎเดพเดฏเดฟ เดธเตเดฅเดฟเดฐเดตเตเด‚ เดฏเตเด•เตเดคเดฟเดธเดนเดตเตเดฎเดพเดฏ เดธเด‚เดญเดพเดทเดฃเด‚ เดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เตเด•

  1. เดžเด™เตเด™เตพ เด’เดฐเต เดฌเต‹เดŸเตเดŸเต เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจเต, เด…เดคเดฟเตฝ เดžเด™เตเด™เตพ เดšเดฟเดฒ เด•เตเดฐเดฎเต€เด•เดฐเดฃเด™เตเด™เตพ เดธเด‚เดญเดฐเดฟเด•เตเด•เตเด‚. เดžเด™เตเด™เดณเตเดŸเต† เด•เดพเดฐเตเดฏเดคเตเดคเดฟเตฝ, เดฌเต‹เดŸเตเดŸเต เดŸเต‹เด•เตเด•เดฃเตเด‚ เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเต เดซเดฏเดฒเดฟเดฒเต‡เด•เตเด•เตเดณเตเดณ เดชเดพเดคเดฏเตเด‚.
  2. เดฌเต‹เดŸเตเดŸเต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเดฟเดฒเต‡เด•เตเด•เตเดณเตเดณ เดชเดพเดค เดธเด‚เดญเดฐเดฟเด•เตเด•เตเดจเตเดจ เด’เดฐเต เดชเดฐเดฟเดธเตเดฅเดฟเดคเดฟ เดตเต‡เดฐเดฟเดฏเดฌเดฟเตพ เดžเด™เตเด™เตพ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจเต.
  3. เดžเด™เตเด™เตพ เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเตเด‚ เดจเดฟเดฐเดตเดงเดฟ เดซเด‚เด—เตเดทเดจเตเด•เดณเตเด‚ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจเต, เด…เดคเตเดตเดดเดฟ เดฌเต‹เดŸเตเดŸเดฟเดจเต เดธเด‚เดตเดฆเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเด‚.
  4. เดžเด™เตเด™เตพ เดฌเต‹เดŸเตเดŸเต เดฐเต€เดคเดฟเด•เตพ เดŽเดดเตเดคเตเดจเตเดจเต, เด…เดคเดพเดฏเดคเต. เด…เดคเต เดจเดฟเตผเดตเดนเดฟเด•เตเด•เตเดจเตเดจ เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เตพ.
  5. เดธเดจเตเดฆเต‡เดถ เดซเดฟเตฝเดŸเตเดŸเดฑเตเด•เตพ เดšเต‡เตผเด•เตเด•เตเดจเตเดจเต. เดšเดพเดฑเตเดฑเดฟเดจเตเดฑเต† เดจเดฟเดฒเดตเดฟเดฒเต† เด…เดตเดธเตเดฅเดฏเต† เด†เดถเตเดฐเดฏเดฟเดšเตเดšเต เดฌเต‹เดŸเตเดŸเต เด†เดตเดถเตเดฏเดฎเดพเดฏ เดฐเต€เดคเดฟเด•เตพ เด†เด•เตเดธเดธเต เดšเต†เดฏเตเดฏเตเดจเตเดจ เดธเดนเดพเดฏเดคเตเดคเต‹เดŸเต†.
  6. เด†เดตเดถเตเดฏเดฎเดพเดฏ เดฌเต‹เดŸเตเดŸเต เดฐเต€เดคเดฟเด•เดณเตเดฎเดพเดฏเดฟ เด•เดฎเดพเตปเดกเตเด•เดณเตเด‚ เดธเดจเตเดฆเต‡เดถเด™เตเด™เดณเตเด‚ เดฌเดจเตเดงเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจ เดนเดพเตปเดกเตโ€Œเดฒเดฑเตเด•เตพ เดžเด™เตเด™เตพ เดšเต‡เตผเด•เตเด•เตเดจเตเดจเต.
  7. เดจเดฎเตเด•เตเด•เต เดฌเต‹เดŸเตเดŸเต เดฒเต‹เดžเตเดšเต เดšเต†เดฏเตเดฏเดพเด‚.

เดฌเต‹เดŸเตเดŸเต เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต เด˜เดŸเดจ

เดธเต—เด•เดฐเตเดฏเดพเตผเดคเตเดฅเด‚, เดžเด™เตเด™เดณเตเดŸเต† เดฌเต‹เดŸเตเดŸเดฟเดจเตเดฑเต† เด•เต‹เดกเตเด‚ เดฎเดฑเตเดฑเต เด…เดจเตเดฌเดจเตเดง เดซเดฏเดฒเตเด•เดณเตเด‚ เด‡เดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจ เด˜เดŸเดจเดฏเดฟเดฒเต‡เด•เตเด•เต เดตเดฟเดญเดœเดฟเด•เตเด•เตเด‚.

  • เดฌเต‹เดŸเตเดŸเต.เด†เตผ - เดžเด™เตเด™เดณเตเดŸเต† เดฌเต‹เดŸเตเดŸเดฟเดจเตเดฑเต† เดชเตเดฐเดงเดพเดจ เด•เต‹เดกเต
  • db_bot_function.R - เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเตเดฎเดพเดฏเดฟ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดซเด‚เด—เตเดทเดจเตเด•เดณเตเดณเตเดณ เด•เต‹เดกเดฟเดจเตเดฑเต† เด’เดฐเต เดฌเตเดฒเต‹เด•เตเด•เต
  • bot_methods.R - เดฌเต‹เดŸเตเดŸเต เดฐเต€เดคเดฟเด•เดณเตเดŸเต† เด•เต‹เดกเต
  • message_filters.R - เดธเดจเตเดฆเต‡เดถ เดซเดฟเตฝเดŸเตเดŸเดฑเตเด•เตพ
  • เด•เตˆเด•เดพเดฐเตเดฏเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเดตเตผ.เด†เตผ - เด•เตˆเด•เดพเดฐเตเดฏเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเดตเตผ
  • config.cfg - เดฌเต‹เดŸเตเดŸเต เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป
  • create_db_data.sql โ€” เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเดฟเตฝ เดšเดพเดฑเตเดฑเต เดกเดพเดฑเตเดฑ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เด’เดฐเต เดชเดŸเตเดŸเดฟเด• เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ SQL เดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเต
  • create_db_state.sql โ€” เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเดฟเตฝ เดจเดฟเดฒเดตเดฟเดฒเต† เดšเดพเดฑเตเดฑเต เด…เดตเดธเตเดฅเดฏเตเดŸเต† เด’เดฐเต เดชเดŸเตเดŸเดฟเด• เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ SQL เดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเต
  • bot.db - เดฌเต‹เดŸเตเดŸเต เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเต

เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดฎเตเดดเตเดตเตป เดฌเต‹เดŸเตเดŸเต เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเตเด‚ เด•เดพเดฃเดพเตป เด•เดดเดฟเดฏเตเด‚, เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ ัะบะฐั‡ะฐั‚ัŒ เดŽเดจเตเดฑเต† เดจเดฟเดจเตเดจเต GitHub-เดฒเต† เดถเต‡เด–เดฐเด‚.

เดฌเต‹เดŸเตเดŸเต เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป

เดžเด™เตเด™เตพ เด’เดฐเต เด•เต‹เตบเดซเดฟเด—เดฑเดฑเดพเดฏเดฟ เดธเดพเดงเดพเดฐเดฃ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเด‚ ini เดซเดฏเตฝ, เด‡เดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจ เดซเต‹เด‚:

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

เดจเดฟเด™เตเด™เตพ เดฌเต‹เดŸเตเดŸเต เดชเตเดฐเตŠเดœเด•เตเดฑเตเดฑเต เดกเต—เตบเดฒเต‹เดกเต เดšเต†เดฏเตเดคเดฟเดŸเตเดŸเตเดฃเตเดŸเต†เด™เตเด•เดฟเตฝ เดธเดพเดฎเต‚เดนเดฟเด•เด‚, เดคเตเดŸเตผเดจเตเดจเต เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเต เดธเตƒเดทเตเดŸเดฟเด•เตเด•เดพเตป เดจเดฟเด™เตเด™เตพเด•เตเด•เต 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'))

เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเตเดฎเดพเดฏเดฟ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เดพเดจเตเดณเตเดณ เดซเด‚เด—เตเดทเดจเตเด•เตพ เดŽเดดเตเดคเตเด•

เดžเด™เตเด™เตพเด•เตเด•เต เด‡เดคเดฟเดจเด•เด‚ เด’เดฐเต เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดซเดฏเตฝ เดคเดฏเตเดฏเดพเดฑเดพเดฃเต เด•เต‚เดŸเดพเดคเต† เด’เดฐเต เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเต เดธเตƒเดทเตโ€ŒเดŸเดฟเดšเตเดšเดฟเดŸเตเดŸเตเดฃเตเดŸเต. เดˆ เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเดฟเดฒเต‡เด•เตเด•เต เดกเดพเดฑเตเดฑ เดตเดพเดฏเดฟเด•เตเด•เดพเดจเตเด‚ เดŽเดดเตเดคเดพเดจเตเด‚ เดจเดฟเด™เตเด™เตพ เด‡เดชเตเดชเต‹เตพ เดซเด‚เด—เตเดทเดจเตเด•เตพ เดŽเดดเตเดคเต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต.

เดจเดฟเด™เตเด™เตพ เดชเตเดฐเตŠเดœเด•เตเดฑเตเดฑเต เดกเต—เตบเดฒเต‹เดกเต เดšเต†เดฏเตเดคเดฟเดŸเตเดŸเตเดฃเตเดŸเต†เด™เตเด•เดฟเตฝ เดธเดพเดฎเต‚เดนเดฟเด•เด‚, เด…เดชเตเดชเต‹เตพ เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดซเดฏเดฒเดฟเดฒเต† เดซเด‚เด—เตเดทเดจเตเด•เตพ เด•เดฃเตเดŸเต†เดคเตเดคเดพเดจเดพเด•เตเด‚ 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 เด’เดฐเต เด…เดฆเตเดตเดฟเดคเต€เดฏ เดชเดฐเดฟเดฎเดฟเดคเดฟ เด‰เดฃเตเดŸเต, เดชเดŸเตเดŸเดฟเด•เด•เดณเตเดŸเต† เดชเตเดฐเดพเดฅเดฎเดฟเด• เดคเดพเด•เตเด•เต‹เดฒเดพเดฃเต. เดคเตเดŸเด•เตเด•เดคเตเดคเดฟเตฝ, เดžเด™เตเด™เตพ เดชเดŸเตเดŸเดฟเด•เดฏเดฟเดฒเต‡เด•เตเด•เต เดตเดฟเดตเดฐเด™เตเด™เตพ เดšเต‡เตผเด•เตเด•เดพเตป เดถเตเดฐเดฎเดฟเด•เตเด•เตเดจเตเดจเต, เดจเดฟเดฒเดตเดฟเดฒเต† เดšเดพเดฑเตเดฑเดฟเดจเตเดณเตเดณ เดกเดพเดฑเตเดฑ เด‡เดคเดฟเดจเด•เด‚ เดจเดฟเดฒเดตเดฟเดฒเตเดฃเตเดŸเต†เด™เตเด•เดฟเตฝ เดžเด™เตเด™เตพเด•เตเด•เต เด’เดฐเต เดชเดฟเดถเด•เต เดฒเดญเดฟเด•เตเด•เตเด‚, เดˆ เดธเดพเดนเดšเดฐเตเดฏเดคเตเดคเดฟเตฝ เดžเด™เตเด™เตพ เดˆ เดšเดพเดฑเตเดฑเดฟเดจเดพเดฏเตเดณเตเดณ เดตเดฟเดตเดฐเด™เตเด™เตพ เด…เดชเตโ€Œเดกเต‡เดฑเตเดฑเต เดšเต†เดฏเตเดฏเตเดจเตเดจเต.

เด…เดŸเตเดคเตเดคเดคเดพเดฏเดฟ, เดฌเต‹เดŸเตเดŸเดฟเดจเตเดฑเต† เดฐเต€เดคเดฟเด•เดณเดฟเดฒเตเด‚ เดซเดฟเตฝเดŸเตเดŸเดฑเตเด•เดณเดฟเดฒเตเด‚ เดžเด™เตเด™เตพ เดˆ เดซเด‚เด—เตเดทเดจเตเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเด‚.

เดฌเต‹เดŸเตเดŸเต เดฐเต€เดคเดฟเด•เตพ

เดžเด™เตเด™เดณเตเดŸเต† เดฌเต‹เดŸเตเดŸเต เดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เด…เดŸเตเดคเตเดค เด˜เดŸเตเดŸเด‚ เดฐเต€เดคเดฟเด•เตพ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเด• เดŽเดจเตเดจเดคเดพเดฃเต. เดจเดฟเด™เตเด™เตพ เดชเตเดฐเตŠเดœเด•เตเดฑเตเดฑเต เดกเต—เตบเดฒเต‹เดกเต เดšเต†เดฏเตเดคเดฟเดŸเตเดŸเตเดฃเตเดŸเต†เด™เตเด•เดฟเตฝ เดธเดพเดฎเต‚เดนเดฟเด•เด‚, เด…เดชเตเดชเต‹เตพ เดŽเดฒเตเดฒเดพ เดฐเต€เดคเดฟเด•เดณเตเด‚ เดซเดฏเดฒเดฟเดฒเตเดฃเตเดŸเต 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 เดจเดฟเด™เตเด™เดณเตเดŸเต† เดชเต‡เดฐเต เดšเต‹เดฆเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดšเดพเดฑเตเดฑเต เดจเดฟเดฒ เดฎเดพเดฑเตเดฑเตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต เด•เดพเดคเตเดคเดฟเดฐเดฟเด•เตเด•เตเด•_เดชเต‡เดฐเต, เด…เดคเดพเดฏเดคเต. เดจเดฟเด™เตเด™เดณเตเดŸเต† เดชเต‡เดฐเต เดจเตฝเด•เตเดจเตเดจเดคเดฟเดจเต เดธเตเดฑเตเดฑเดพเตปเดกเตเดฌเตˆ เดšเต†เดฏเตเดฏเดพเตป.

เด…เดŸเตเดคเตเดคเดคเดพเดฏเดฟ, เดจเดฟเด™เตเด™เตพ เดชเต‡เดฐเต เด…เดฏเดฏเตเด•เตเด•เตเด•เดฏเตเด‚ เด…เดคเต เดฐเต€เดคเดฟ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดชเตเดฐเต‹เดธเดธเตเดธเต เดšเต†เดฏเตเดฏเตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต enter_name, เดฌเต‹เดŸเตเดŸเต เดจเดฟเด™เตเด™เดณเต† เด…เดญเดฟเดตเดพเดฆเตเดฏเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต, เดฒเดญเดฟเดšเตเดš เดชเต‡เดฐเต เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเดฟเดฒเต‡เด•เตเด•เต เดŽเดดเตเดคเตเดจเตเดจเต, เด•เต‚เดŸเดพเดคเต† เดšเดพเดฑเตเดฑเต เดธเตเดฑเตเดฑเต‡เดฑเตเดฑเดฟเดฒเต‡เด•เตเด•เต เดฎเดพเดฑเตเดฑเตเดจเตเดจเต เด•เดพเดคเตเดคเดฟเดฐเดฟเดชเตเดชเต_เดชเตเดฐเดพเดฏเด‚.

เดˆ เด˜เดŸเตเดŸเดคเตเดคเดฟเตฝ, เดจเดฟเด™เตเด™เตพ เดจเดฟเด™เตเด™เดณเตเดŸเต† เดชเตเดฐเดพเดฏเดคเตเดคเดฟเดฒเต‡เด•เตเด•เต เดชเตเดฐเดตเต‡เดถเดฟเด•เตเด•เตเดฎเต†เดจเตเดจเต เดฌเต‹เดŸเตเดŸเต เดชเตเดฐเดคเต€เด•เตเดทเดฟเด•เตเด•เตเดจเตเดจเต. เดจเดฟเด™เตเด™เตพ เดจเดฟเด™เตเด™เดณเตเดŸเต† เดชเตเดฐเดพเดฏเด‚ เด…เดฏเดฏเตเด•เตเด•เตเดจเตเดจเต, เดฌเต‹เดŸเตเดŸเต เดธเดจเตเดฆเต‡เดถเด‚ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเดจเตเดจเต, เดจเดฟเด™เตเด™เตพ เด’เดฐเต เดจเดฎเตเดชเดฑเดฟเดจเต เดชเด•เดฐเด‚ เด•เตเดฑเดšเตเดšเต เดตเดพเดšเด•เด‚ เด…เดฏเดšเตเดšเดพเตฝ, เด…เดคเต เดชเดฑเดฏเตเด‚: ะขั‹ ะฒะฒั‘ะป ะฝะตะบะพั€ั€ะตะบั‚ะฝั‹ะต ะดะฐะฝะฝั‹ะต, ะฒะฒะตะดะธ ั‡ะธัะปะพ, เดจเดฟเด™เตเด™เดณเตเดŸเต† เดกเดพเดฑเตเดฑ เดตเต€เดฃเตเดŸเตเด‚ เดจเตฝเด•เตเดจเตเดจเดคเดฟเดจเดพเดฏเดฟ เด•เดพเดคเตเดคเดฟเดฐเดฟเด•เตเด•เตเด‚. เดจเดฟเด™เตเด™เตพ เด’เดฐเต เดจเดฎเตเดชเตผ เด…เดฏเดšเตเดšเดพเตฝ, เดฌเต‹เดŸเตเดŸเต เดจเดฟเด™เตเด™เดณเตเดŸเต† เดชเตเดฐเดพเดฏเด‚ เด…เด‚เด—เต€เด•เดฐเดฟเดšเตเดšเดคเดพเดฏเดฟ เดฑเดฟเดชเตเดชเต‹เตผเดŸเตเดŸเตเดšเต†เดฏเตเดฏเตเด‚, เดฒเดญเดฟเดšเตเดš เดกเดพเดฑเตเดฑ เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเดฟเดฒเต‡เด•เตเด•เต เดŽเดดเตเดคเตเด•เดฏเตเด‚ เดจเดฟเด™เตเด™เดณเดฟเตฝ เดจเดฟเดจเตเดจเต เดฒเดญเดฟเดšเตเดš เดŽเดฒเตเดฒเดพ เดกเดพเดฑเตเดฑเดฏเตเด‚ เดฑเดฟเดชเตเดชเต‹เตผเดŸเตเดŸเต เดšเต†เดฏเตเดฏเตเด•เดฏเตเด‚ เดšเดพเดฑเตเดฑเต เดจเดฟเดฒ เด…เดคเดฟเดจเตเดฑเต† เดฏเดฅเดพเตผเดคเตเดฅ เดธเตเดฅเดพเดจเดคเตเดคเต‡เด•เตเด•เต เดคเดฟเดฐเดฟเด•เต† เดจเตฝเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเด‚, เด…เดคเดพเดฏเดคเต. เดตเดฟ start.

เดฐเต€เดคเดฟ เดตเดฟเดณเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดฒเต‚เดŸเต† state เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดŽเดชเตเดชเต‹เตพ เดตเต‡เดฃเดฎเต†เด™เตเด•เดฟเดฒเตเด‚ เดจเดฟเดฒเดตเดฟเดฒเต† เดšเดพเดฑเตเดฑเต เดธเตเดฑเตเดฑเดพเดฑเตเดฑเดธเต เด…เดญเตเดฏเตผเดคเตเดฅเดฟเด•เตเด•เดพเด‚ reset เดšเดพเดฑเตเดฑเต เด…เดคเดฟเดจเตเดฑเต† เดฏเดฅเดพเตผเดคเตเดฅ เด…เดตเดธเตเดฅเดฏเดฟเดฒเต‡เด•เตเด•เต เดคเดฟเดฐเดฟเด•เต† เด•เตŠเดฃเตเดŸเตเดตเดฐเดฟเด•.

เดธเดจเตเดฆเต‡เดถ เดซเดฟเตฝเดŸเตเดŸเดฑเตเด•เตพ

เดžเด™เตเด™เดณเตเดŸเต† เด•เดพเดฐเตเดฏเดคเตเดคเดฟเตฝ, เด’เดฐเต เดฌเต‹เดŸเตเดŸเต เดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดเดฑเตเดฑเดตเตเด‚ เดชเตเดฐเดงเดพเดจเดชเตเดชเต†เดŸเตเดŸ เดญเดพเด—เด™เตเด™เดณเดฟเตฝ เด’เดจเตเดจเดพเดฃเดฟเดคเต. เดฎเต†เดธเต‡เดœเต เดซเดฟเตฝเดŸเตเดŸเดฑเตเด•เดณเตเดŸเต† เดธเดนเดพเดฏเดคเตเดคเต‹เดŸเต†เดฏเดพเดฃเต เดฌเต‹เดŸเตเดŸเต เดจเดฟเด™เตเด™เดณเดฟเตฝ เดจเดฟเดจเตเดจเต เดŽเดจเตเดคเต เดตเดฟเดตเดฐเด™เตเด™เดณเดพเดฃเต เดชเตเดฐเดคเต€เด•เตเดทเดฟเด•เตเด•เตเดจเตเดจเดคเต†เดจเตเดจเตเด‚ เด…เดคเต เดŽเด™เตเด™เดจเต† เดชเตเดฐเต‹เดธเดธเตเดธเต เดšเต†เดฏเตเดฏเดฃเดฎเต†เดจเตเดจเตเด‚ เดฎเดจเดธเตเดธเดฟเดฒเดพเด•เตเด•เตเด‚.

เดชเดฆเตเดงเดคเดฟเดฏเดฟเตฝ เดธเดพเดฎเต‚เดนเดฟเด•เด‚ เดซเดฟเตฝเดŸเตเดŸเดฑเตเด•เตพ เดซเดฏเดฒเดฟเตฝ เดฐเดœเดฟเดธเตเดฑเตเดฑเตผ เดšเต†เดฏเตเดคเดฟเดŸเตเดŸเตเดฃเตเดŸเต 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_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()

เดคเตฝเดซเดฒเดฎเดพเดฏเดฟ, เดžเด™เตเด™เตพเด•เตเด•เต เดˆ เดฌเต‹เดŸเตเดŸเต เดฒเดญเดฟเดšเตเดšเต:
R-เตฝ เด’เดฐเต เดŸเต†เดฒเดฟเด—เตเดฐเดพเด‚ เดฌเต‹เดŸเตเดŸเต เดŽเดดเตเดคเตเดจเตเดจเต (เดญเดพเด—เด‚ 4): เดฌเต‹เดŸเตเดŸเตเดฎเดพเดฏเดฟ เดธเตเดฅเดฟเดฐเดตเตเด‚ เดฏเตเด•เตเดคเดฟเดธเดนเดตเตเดฎเดพเดฏ เดธเด‚เดญเดพเดทเดฃเด‚ เดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เตเด•

เดเดคเต เดธเดฎเดฏเดคเตเดคเตเด‚ เด•เดฎเดพเตปเดกเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต /state เดจเดฟเดฒเดตเดฟเดฒเต† เดšเดพเดฑเตเดฑเต เดจเดฟเดฒเดฏเตเด‚ เด•เดฎเดพเตปเดกเต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดจเดฎเตเด•เตเด•เต เด…เดจเตเดตเต‡เดทเดฟเด•เตเด•เดพเด‚ /reset เดšเดพเดฑเตเดฑเต เด…เดคเดฟเดจเตเดฑเต† เดฏเดฅเดพเตผเดคเตเดฅ เด…เดตเดธเตเดฅเดฏเดฟเดฒเต‡เด•เตเด•เต เดคเดฟเดฐเดฟเด•เต† เดจเตฝเด•เตเด•เดฏเตเด‚ เดกเดฏเดฒเต‹เด—เต เดตเต€เดฃเตเดŸเตเด‚ เด†เดฐเด‚เดญเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเด•.

เดคเต€เดฐเตเดฎเดพเดจเด‚

เดˆ เดฒเต‡เด–เดจเดคเตเดคเดฟเตฝ, เด’เดฐเต เดฌเต‹เดŸเตเดŸเดฟเดจเตเดณเตเดณเดฟเตฝ เด’เดฐเต เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเต เดŽเด™เตเด™เดจเต† เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเดฎเต†เดจเตเดจเตเด‚ เดšเดพเดฑเตเดฑเต เดจเดฟเดฒ เดฐเต‡เด–เดชเตเดชเต†เดŸเตเดคเตเดคเดฟ เดคเตเดŸเตผเดšเตเดšเดฏเดพเดฏ เดฒเต‹เดœเดฟเด•เตเด•เตฝ เดกเดฏเดฒเต‹เด—เตเด•เตพ เดŽเด™เตเด™เดจเต† เดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เดพเดฎเต†เดจเตเดจเตเด‚ เดžเด™เตเด™เตพ เด•เดฃเตเดŸเต†เดคเตเดคเดฟ.

เดˆ เดธเดพเดนเดšเดฐเตเดฏเดคเตเดคเดฟเตฝ, เดžเด™เตเด™เตพ เดเดฑเตเดฑเดตเตเด‚ เดชเตเดฐเดพเด•เตƒเดคเดฎเดพเดฏ เด‰เดฆเดพเดนเดฐเดฃเด‚ เดชเดฐเดฟเดถเต‹เดงเดฟเดšเตเดšเต, เด…เดคเตเดตเดดเดฟ เด…เดคเตเดคเดฐเด‚ เดฌเต‹เดŸเตเดŸเตเด•เตพ เดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เด†เดถเดฏเด‚ เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดฎเดจเดธเดฟเดฒเดพเด•เตเด•เดพเตป เดŽเดณเตเดชเตเดชเดฎเดพเด•เตเด‚; เดชเตเดฐเดพเดฏเต‹เด—เดฟเด•เดฎเดพเดฏเดฟ, เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด•เต‚เดŸเตเดคเตฝ เดธเด™เตเด•เต€เตผเดฃเตเดฃเดฎเดพเดฏ เดกเดฏเดฒเต‹เด—เตเด•เตพ เดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเด‚.

เดˆ เดชเดฐเดฎเตเดชเดฐเดฏเดฟเดฒเต† เด…เดŸเตเดคเตเดค เดฒเต‡เด–เดจเดคเตเดคเดฟเตฝ, เดฌเต‹เดŸเตเดŸเต เด‰เดชเดฏเต‹เด•เตเดคเดพเด•เตเด•เดณเตเดŸเต† เดตเดฟเดตเดฟเดง เดฐเต€เดคเดฟเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เด…เดตเด•เดพเดถเด™เตเด™เตพ เดŽเด™เตเด™เดจเต† เดจเดฟเดฏเดจเตเดคเตเดฐเดฟเด•เตเด•เดพเดฎเต†เดจเตเดจเต เดจเดฎเตเดฎเตพ เดชเด เดฟเด•เตเด•เตเด‚.

เด…เดตเดฒเด‚เดฌเด‚: www.habr.com

เด’เดฐเต เด…เดญเดฟเดชเตเดฐเดพเดฏเด‚ เดšเต‡เตผเด•เตเด•เตเด•