เจ†เจฐ (เจญเจพเจ— 4) เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจŸเฉˆเจฒเฉ€เจ—เฉเจฐเจพเจฎ เจฌเฉ‹เจŸ เจฒเจฟเจ–เจฃเจพ: เจฌเฉ‹เจŸ เจจเจพเจฒ เจ‡เฉฑเจ• เจจเจฟเจฐเฉฐเจคเจฐ, เจคเจฐเจ•เจชเฉ‚เจฐเจจ เจธเฉฐเจตเจพเจฆ เจฌเจฃเจพเจ‰เจฃเจพ

เจœเฉ‡เจ•เจฐ เจคเฉเจธเฉ€เจ‚ เจชเจนเจฟเจฒเจพเจ‚ เจนเฉ€ เจชเจฟเจ›เจฒเฉ‡ เจชเฉœเฉเจน เจšเฉเฉฑเจ•เฉ‡ เจนเฉ‹ เจคเจฟเฉฐเจจ เจฒเฉ‡เจ– เจ‡เจธ เจฒเฉœเฉ€ เจคเฉ‹เจ‚, เจซเจฟเจฐ เจคเฉเจธเฉ€เจ‚ เจชเจนเจฟเจฒเจพเจ‚ เจนเฉ€ เจœเจพเจฃเจฆเฉ‡ เจนเฉ‹ เจ•เจฟ เจ•เฉ€เจฌเฉ‹เจฐเจก เจจเจพเจฒ เจชเฉ‚เจฐเฉ‡ เจŸเฉˆเจฒเฉ€เจ—เฉเจฐเจพเจฎ เจฌเฉ‹เจŸเจพเจ‚ เจจเฉ‚เฉฐ เจ•เจฟเจตเฉ‡เจ‚ เจฒเจฟเจ–เจฃเจพ เจนเฉˆเฅค

เจ‡เจธ เจฒเฉ‡เจ– เจตเจฟเจš, เจ…เจธเฉ€เจ‚ เจธเจฟเจ–เจพเจ‚เจ—เฉ‡ เจ•เจฟ เจ‡เจ• เจฌเฉ‹เจŸ เจ•เจฟเจตเฉ‡เจ‚ เจฒเจฟเจ–เจฃเจพ เจนเฉˆ เจœเฉ‹ เจ‡เจ•เจธเจพเจฐ เจธเฉฐเจตเจพเจฆ เจ•เจพเจ‡เจฎ เจฐเฉฑเจ–เฉ‡เจ—เจพเฅค เจ‰เจน. เจฌเฉ‹เจŸ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจธเจตเจพเจฒ เจชเฉเฉฑเจ›เฉ‡เจ—เจพ เจ…เจคเฉ‡ เจคเฉเจนเจพเจกเฉ‡ เจ•เฉเจ เจœเจพเจฃเจ•เจพเจฐเฉ€ เจฆเจพเจ–เจฒ เจ•เจฐเจจ เจฆเฉ€ เจ‰เจกเฉ€เจ• เจ•เจฐเฉ‡เจ—เจพเฅค เจคเฉเจนเจพเจกเฉ‡ เจฆเฉเจ†เจฐเจพ เจฆเจพเจ–เจฒ เจ•เฉ€เจคเฉ‡ เจ—เจ เจกเฉ‡เจŸเจพ 'เจคเฉ‡ เจจเจฟเจฐเจญเจฐ เจ•เจฐเจฆเจฟเจ†เจ‚, เจฌเฉ‹เจŸ เจ•เฉเจ เจ•เจพเจฐเจตเจพเจˆเจ†เจ‚ เจ•เจฐเฉ‡เจ—เจพเฅค

เจ‡เจธ เจฒเฉ‡เจ– เจตเจฟเฉฑเจš เจ…เจธเฉ€เจ‚ เจ‡เจน เจตเฉ€ เจธเจฟเจ–เจพเจ‚เจ—เฉ‡ เจ•เจฟ เจฌเฉ‹เจŸ เจฆเฉ‡ เจนเฉเฉฑเจก เจฆเฉ‡ เจนเฉ‡เจ เจพเจ‚ เจ‡เฉฑเจ• เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฟเจตเฉ‡เจ‚ เจ•เจฐเจจเฉ€ เจนเฉˆ, เจธเจพเจกเฉ€ เจ‰เจฆเจพเจนเจฐเจฃ เจตเจฟเฉฑเจš เจ‡เจน SQLite เจนเฉ‹เจตเฉ‡เจ—เจพ, เจชเจฐ เจคเฉเจธเฉ€เจ‚ เจ•เจฟเจธเฉ‡ เจนเฉ‹เจฐ DBMS เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹เฅค เจฎเฉˆเจ‚ เจตเจฟเฉฑเจš เจ†เจฐ เจญเจพเจธเจผเจพ เจตเจฟเฉฑเจš เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจจเจพเจฒ เจ—เฉฑเจฒเจฌเจพเจค เจ•เจฐเจจ เจฌเจพเจฐเฉ‡ เจตเจงเฉ‡เจฐเฉ‡ เจตเจฟเจธเจฅเจพเจฐ เจตเจฟเฉฑเจš เจฒเจฟเจ–เจฟเจ† เจ‡เจธ เจฒเฉ‡เจ–.

เจ†เจฐ (เจญเจพเจ— 4) เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจŸเฉˆเจฒเฉ€เจ—เฉเจฐเจพเจฎ เจฌเฉ‹เจŸ เจฒเจฟเจ–เจฃเจพ: เจฌเฉ‹เจŸ เจจเจพเจฒ เจ‡เฉฑเจ• เจจเจฟเจฐเฉฐเจคเจฐ, เจคเจฐเจ•เจชเฉ‚เจฐเจจ เจธเฉฐเจตเจพเจฆ เจฌเจฃเจพเจ‰เจฃเจพ

เจฒเฉœเฉ€ เจฆเฉ‡ เจธเจพเจฐเฉ‡ เจฒเฉ‡เจ– โ€œR เจตเจฟเฉฑเจš เจŸเฉˆเจฒเฉ€เจ—เฉเจฐเจพเจฎ เจฌเฉ‹เจŸ เจฒเจฟเจ–เจฃเจพโ€

  1. เจ…เจธเฉ€เจ‚ เจ‡เฉฑเจ• เจฌเฉ‹เจŸ เจฌเจฃเจพเจ‰เจ‚เจฆเฉ‡ เจนเจพเจ‚ เจ…เจคเฉ‡ เจ‡เจธเจจเฉ‚เฉฐ เจŸเฉˆเจฒเฉ€เจ—เฉเจฐเจพเจฎ เจตเจฟเฉฑเจš เจธเฉฐเจฆเฉ‡เจธเจผ เจญเฉ‡เจœเจฃ เจฒเจˆ เจตเจฐเจคเจฆเฉ‡ เจนเจพเจ‚
  2. เจฌเฉ‹เจŸ เจตเจฟเฉฑเจš เจ•เจฎเจพเจ‚เจก เจธเจนเจพเจ‡เจคเจพ เจ…เจคเฉ‡ เจธเฉเจจเฉ‡เจนเจพ เจซเจฟเจฒเจŸเจฐ เจธเจผเจพเจฎเจฒ เจ•เจฐเฉ‹
  3. เจ‡เฉฑเจ• เจฌเฉ‹เจŸ เจตเจฟเฉฑเจš เจ•เฉ€เจฌเฉ‹เจฐเจก เจธเจฎเจฐเจฅเจจ เจ•เจฟเจตเฉ‡เจ‚ เจœเฉ‹เฉœเจจเจพ เจนเฉˆ
  4. เจฌเฉ‹เจŸ เจจเจพเจฒ เจ‡เจ•เจธเจพเจฐ, เจคเจฐเจ•เจชเฉ‚เจฐเจจ เจธเฉฐเจตเจพเจฆ เจฌเจฃเจพเจ‰เจฃเจพ

เจธเจฎเฉฑเจ—เจฐเฉ€

เจœเฉ‡ เจคเฉเจธเฉ€เจ‚ เจกเฉ‡เจŸเจพ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ เจตเจฟเฉฑเจš เจฆเจฟเจฒเจšเจธเจชเฉ€ เจฐเฉฑเจ–เจฆเฉ‡ เจนเฉ‹, เจคเจพเจ‚ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจฎเฉ‡เจฐเฉ‡ เจตเจฟเฉฑเจš เจฆเจฟเจฒเจšเจธเจชเฉ€ เจนเฉ‹ เจธเจ•เจฆเฉ€ เจนเฉˆ เจคเจพเจฐ ะธ YouTube เจšเฉˆเจจเจฒเฅค เจœเจผเจฟเจ†เจฆเจพเจคเจฐ เจธเจฎเฉฑเจ—เจฐเฉ€ เจ†เจฐ เจญเจพเจธเจผเจพ เจจเฉ‚เฉฐ เจธเจฎเจฐเจชเจฟเจค เจนเฉˆเฅค

  1. เจœเจพเจฃ เจชเจ›เจพเจฃ
  2. เจฌเฉ‹เจŸ เจฌเจฃเจพเจ‰เจฃ เจฆเฉ€ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ†
  3. เจฌเฉ‹เจŸ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจฌเจฃเจคเจฐ
  4. เจฌเฉ‹เจŸ เจธเฉฐเจฐเจšเจจเจพ
  5. เจ‡เฉฑเจ• เจตเจพเจคเจพเจตเจฐเจฃ เจตเฉ‡เจฐเฉ€เจเจฌเจฒ เจฌเจฃเจพเจ“
  6. เจ‡เฉฑเจ• เจกเจพเจŸเจพเจฌเฉ‡เจธ เจฌเจฃเจพเจ‰เจฃเจพ
  7. เจกเจพเจŸเจพเจฌเฉ‡เจธ เจจเจพเจฒ เจ•เฉฐเจฎ เจ•เจฐเจจ เจฒเจˆ เจซเฉฐเจ•เจธเจผเจจ เจฒเจฟเจ–เจฃเจพ
  8. เจฌเฉ‹เจŸ เจขเฉฐเจ—
  9. เจธเฉเจจเฉ‡เจนเจพ เจซเจฟเจฒเจŸเจฐ
  10. เจนเฉˆเจ‚เจกเจฒเจฐ
  11. เจฌเฉ‹เจŸ เจฒเจพเจ‚เจš เจ•เฉ‹เจก
  12. เจธเจฟเฉฑเจŸเจพ

เจœเจพเจฃ เจชเจ›เจพเจฃ

เจฌเฉ‹เจŸ เจจเฉ‚เฉฐ เจคเฉเจนเจพเจกเฉ‡ เจคเฉ‹เจ‚ เจกเฉ‡เจŸเจพ เจฆเฉ€ เจฌเฉ‡เจจเจคเฉ€ เจ•เจฐเจจ เจ…เจคเฉ‡ เจคเฉเจนเจพเจกเฉ‡ เจฆเฉเจ†เจฐเจพ เจ•เฉ‹เจˆ เจœเจพเจฃเจ•เจพเจฐเฉ€ เจฆเจฐเจœ เจ•เจฐเจจ เจฆเฉ€ เจ‰เจกเฉ€เจ• เจ•เจฐเจจ เจฒเจˆ, เจคเฉเจนเจพเจจเฉ‚เฉฐ เจธเฉฐเจตเจพเจฆ เจฆเฉ€ เจฎเฉŒเจœเฉ‚เจฆเจพ เจธเจฅเจฟเจคเฉ€ เจจเฉ‚เฉฐ เจฐเจฟเจ•เจพเจฐเจก เจ•เจฐเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉ‹เจตเฉ‡เจ—เฉ€เฅค เจ…เจœเจฟเจนเจพ เจ•เจฐเจจ เจฆเจพ เจธเจญ เจคเฉ‹เจ‚ เจตเจงเฉ€เจ† เจคเจฐเฉ€เจ•เจพ เจนเฉˆ เจ•เจฟเจธเฉ‡ เจ•เจฟเจธเจฎ เจฆเฉ‡ เจเจฎเจฌเฉˆเจกเจก เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจเจพ, เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ SQLite.

เจ‰เจน. เจคเจฐเจ• เจนเฉ‡เจ  เจฒเจฟเจ–เฉ‡ เจ…เจจเฉเจธเจพเจฐ เจนเฉ‹เจตเฉ‡เจ—เจพเฅค เจ…เจธเฉ€เจ‚ เจฌเฉ‹เจŸ เจตเจฟเจงเฉ€ เจจเฉ‚เฉฐ เจ•เจพเจฒ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚, เจ…เจคเฉ‡ เจฌเฉ‹เจŸ เจ•เฉเจฐเจฎเจตเจพเจฐ เจธเจพเจกเฉ‡ เจคเฉ‹เจ‚ เจ•เฉเจ เจœเจพเจฃเจ•เจพเจฐเฉ€ เจฆเฉ€ เจฌเฉ‡เจจเจคเฉ€ เจ•เจฐเจฆเจพ เจนเฉˆ, เจ…เจคเฉ‡ เจนเจฐ เจชเฉœเจพเจ… 'เจคเฉ‡ เจ‡เจน เจ‡เจธ เจœเจพเจฃเจ•เจพเจฐเฉ€ เจฆเฉ‡ เจฆเจพเจ–เจฒ เจนเฉ‹เจฃ เจฆเฉ€ เจ‰เจกเฉ€เจ• เจ•เจฐเจฆเจพ เจนเฉˆ เจ…เจคเฉ‡ เจ‡เจธเจฆเฉ€ เจœเจพเจ‚เจš เจ•เจฐ เจธเจ•เจฆเจพ เจนเฉˆเฅค

เจ…เจธเฉ€เจ‚ เจธเจญ เจคเฉ‹เจ‚ เจธเจฐเจฒ เจธเฉฐเจญเจต เจฌเฉ‹เจŸ เจฒเจฟเจ–เจพเจ‚เจ—เฉ‡, เจชเจนเจฟเจฒเจพเจ‚ เจ‡เจน เจคเฉเจนเจพเจกเจพ เจจเจพเจฎ เจชเฉเฉฑเจ›เฉ‡เจ—เจพ, เจซเจฟเจฐ เจคเฉเจนเจพเจกเฉ€ เจ‰เจฎเจฐ, เจ…เจคเฉ‡ เจชเฉเจฐเจพเจชเจค เจ•เฉ€เจคเฉ‡ เจกเฉ‡เจŸเจพ เจจเฉ‚เฉฐ เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจตเจฟเฉฑเจš เจธเฉเจฐเฉฑเจ–เจฟเจ…เจค เจ•เจฐเฉ‡เจ—เจพเฅค เจ‰เจฎเจฐ เจฌเจพเจฐเฉ‡ เจชเฉเฉฑเจ›เจฃ 'เจคเฉ‡, เจ‡เจน เจœเจพเจ‚เจš เจ•เจฐเฉ‡เจ—เจพ เจ•เจฟ เจฆเจพเจ–เจฒ เจ•เฉ€เจคเจพ เจกเฉ‡เจŸเจพ เจ‡เฉฑเจ• เจจเฉฐเจฌเจฐ เจนเฉˆ เจจเจพ เจ•เจฟ เจŸเฉˆเจ•เจธเจŸเฅค

เจ…เจœเจฟเจนเฉ‡ เจธเจงเจพเจฐเจจ เจธเฉฐเจตเจพเจฆ เจฆเฉ‡ เจธเจฟเจฐเจซ เจคเจฟเฉฐเจจ เจฐเจพเจœ เจนเฉ‹เจฃเจ—เฉ‡:

  1. เจธเจผเฉเจฐเฉ‚เจ†เจค เจฌเฉ‹เจŸ เจฆเฉ€ เจ†เจฎ เจธเจฅเจฟเจคเฉ€ เจนเฉˆ, เจœเจฟเจธ เจตเจฟเฉฑเจš เจ‡เจน เจคเฉเจนเจพเจกเฉ‡ เจคเฉ‹เจ‚ เจ•เจฟเจธเฉ‡ เจœเจพเจฃเจ•เจพเจฐเฉ€ เจฆเฉ€ เจ‰เจฎเฉ€เจฆ เจจเจนเฉ€เจ‚ เจ•เจฐเจฆเจพ เจนเฉˆ
  2. เจ‰เจกเฉ€เจ•_เจจเจพเจฎ - เจ‰เจน เจธเจฅเจฟเจคเฉ€ เจœเจฟเจธ เจตเจฟเฉฑเจš เจฌเฉ‹เจŸ เจ‡เฉฑเจ• เจจเจพเจฎ เจฆเจฐเจœ เจ•เฉ€เจคเฉ‡ เจœเจพเจฃ เจฆเฉ€ เจ‰เจกเฉ€เจ• เจ•เจฐเจฆเจพ เจนเฉˆ
  3. wait_age เจ‰เจน เจ…เจตเจธเจฅเจพ เจนเฉˆ เจœเจฟเจธ เจตเจฟเฉฑเจš เจฌเฉ‹เจŸ เจคเฉเจนเจพเจกเฉ€ เจ‰เจฎเจฐ เจฆเฉ‡ เจฆเจพเจ–เจฒ เจนเฉ‹เจฃ เจฆเฉ€ เจ‰เจกเฉ€เจ• เจ•เจฐเจฆเจพ เจนเฉˆ, เจชเฉ‚เจฐเฉ‡ เจธเจพเจฒเจพเจ‚ เจฆเฉ€ เจธเฉฐเจ–เจฟเจ†เฅค

เจฌเฉ‹เจŸ เจฌเจฃเจพเจ‰เจฃ เจฆเฉ€ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ†

เจฒเฉ‡เจ– เจฆเฉ‡ เจฆเฉŒเจฐเจพเจจ, เจ…เจธเฉ€เจ‚ เจ•เจฆเจฎ-เจฆเจฐ-เจ•เจฆเจฎ เจ‡เฉฑเจ• เจฌเฉ‹เจŸ เจฌเจฃเจพเจตเจพเจ‚เจ—เฉ‡; เจชเฉ‚เจฐเฉ€ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจจเฉ‚เฉฐ เจฏเฉ‹เจœเจจเจพเจฌเฉฑเจง เจฐเฉ‚เจช เจตเจฟเฉฑเจš เจนเฉ‡เจ เจพเจ‚ เจฆเจฐเจธเจพเจ‡เจ† เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆ:
เจ†เจฐ (เจญเจพเจ— 4) เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจŸเฉˆเจฒเฉ€เจ—เฉเจฐเจพเจฎ เจฌเฉ‹เจŸ เจฒเจฟเจ–เจฃเจพ: เจฌเฉ‹เจŸ เจจเจพเจฒ เจ‡เฉฑเจ• เจจเจฟเจฐเฉฐเจคเจฐ, เจคเจฐเจ•เจชเฉ‚เจฐเจจ เจธเฉฐเจตเจพเจฆ เจฌเจฃเจพเจ‰เจฃเจพ

  1. เจ…เจธเฉ€เจ‚ เจ‡เฉฑเจ• เจฌเฉ‹เจŸ เจธเฉฐเจฐเจšเจจเจพ เจฌเจฃเจพเจ‰เจ‚เจฆเฉ‡ เจนเจพเจ‚ เจœเจฟเจธ เจตเจฟเฉฑเจš เจ…เจธเฉ€เจ‚ เจ•เฉเจ เจธเฉˆเจŸเจฟเฉฐเจ—เจพเจ‚ เจจเฉ‚เฉฐ เจธเจŸเฉ‹เจฐ เจ•เจฐเจพเจ‚เจ—เฉ‡เฅค เจธเจพเจกเฉ‡ เจ•เฉ‡เจธ เจตเจฟเฉฑเจš, เจฌเฉ‹เจŸ เจŸเฉ‹เจ•เจจ, เจ…เจคเฉ‡ เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจซเจพเจˆเจฒ เจฆเจพ เจฎเจพเจฐเจ—.
  2. เจ…เจธเฉ€เจ‚ เจ‡เฉฑเจ• เจตเจพเจคเจพเจตเจฐเจฃ เจตเฉ‡เจฐเฉ€เจเจฌเจฒ เจฌเจฃเจพเจ‰เจ‚เจฆเฉ‡ เจนเจพเจ‚ เจœเจฟเจธ เจตเจฟเฉฑเจš เจฌเฉ‹เจŸ เจฆเฉ‡ เจจเจพเจฒ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจฆเจพ เจฎเจพเจฐเจ— เจธเจŸเฉ‹เจฐ เจ•เฉ€เจคเจพ เจœเจพเจตเฉ‡เจ—เจพเฅค
  3. เจ…เจธเฉ€เจ‚ เจ–เฉเจฆ เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจฌเจฃเจพเจ‰เจ‚เจฆเฉ‡ เจนเจพเจ‚, เจ…เจคเฉ‡ เจ•เจˆ เจซเฉฐเจ•เจธเจผเจจ เจคเจพเจ‚ เจœเฉ‹ เจฌเฉ‹เจŸ เจ‡เจธ เจจเจพเจฒ เจ‡เฉฐเจŸเจฐเฉˆเจ•เจŸ เจ•เจฐ เจธเจ•เฉ‡เฅค
  4. เจ…เจธเฉ€เจ‚ เจฌเฉ‹เจŸ เจตเจฟเจงเฉ€เจ†เจ‚ เจฒเจฟเจ–เจฆเฉ‡ เจนเจพเจ‚, เจฏเจพเจจเฉ€. เจซเฉฐเจ•เจธเจผเจจ เจœเฉ‹ เจ‡เจน เจ•เจฐเฉ‡เจ—เจพเฅค
  5. เจธเฉเจจเฉ‡เจนเจพ เจซเจฟเจฒเจŸเจฐ เจœเฉ‹เฉœ เจฐเจฟเจนเจพ เจนเฉˆเฅค เจœเจฟเจธ เจฆเฉ€ เจฎเจฆเจฆ เจจเจพเจฒ เจฌเฉ‹เจŸ เจšเฉˆเจŸ เจฆเฉ€ เจฎเฉŒเจœเฉ‚เจฆเจพ เจธเจฅเจฟเจคเฉ€ เจฆเฉ‡ เจ†เจงเจพเจฐ 'เจคเฉ‡ เจœเจผเจฐเฉ‚เจฐเฉ€ เจคเจฐเฉ€เจ•เจฟเจ†เจ‚ เจคเฉฑเจ• เจชเจนเฉเฉฐเจš เจ•เจฐเฉ‡เจ—เจพเฅค
  6. เจ…เจธเฉ€เจ‚ เจนเฉˆเจ‚เจกเจฒเจฐ เจœเฉ‹เฉœเจฆเฉ‡ เจนเจพเจ‚ เจœเฉ‹ เจœเจผเจฐเฉ‚เจฐเฉ€ เจฌเฉ‹เจŸ เจคเจฐเฉ€เจ•เจฟเจ†เจ‚ เจจเจพเจฒ เจ•เจฎเจพเจ‚เจกเจพเจ‚ เจ…เจคเฉ‡ เจธเฉฐเจฆเฉ‡เจธเจผเจพเจ‚ เจจเฉ‚เฉฐ เจœเฉ‹เฉœเจจเจ—เฉ‡เฅค
  7. เจ†เจ‰ เจฌเฉ‹เจŸ เจจเฉ‚เฉฐ เจฒเจพเจ‚เจš เจ•เจฐเฉ€เจเฅค

เจฌเฉ‹เจŸ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจฌเจฃเจคเจฐ

เจธเจนเฉ‚เจฒเจค เจฒเจˆ, เจ…เจธเฉ€เจ‚ เจ†เจชเจฃเฉ‡ เจฌเฉ‹เจŸ เจฆเฉ‡ เจ•เฉ‹เจก เจ…เจคเฉ‡ เจนเฉ‹เจฐ เจธเฉฐเจฌเฉฐเจงเจฟเจค เจซเจพเจˆเจฒเจพเจ‚ เจจเฉ‚เฉฐ เจนเฉ‡เจ เจพเจ‚ เจฆเจฟเฉฑเจคเฉ‡ เจขเจพเจ‚เจšเฉ‡ เจตเจฟเฉฑเจš เจตเฉฐเจกเจพเจ‚เจ—เฉ‡เฅค

  • เจฌเฉ‹เจŸ.เจ†เจฐ - เจธเจพเจกเฉ‡ เจฌเฉ‹เจŸ เจฆเจพ เจฎเฉเฉฑเจ– เจ•เฉ‹เจก
  • db_bot_function.R - เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจจเจพเจฒ เจ•เฉฐเจฎ เจ•เจฐเจจ เจฒเจˆ เจซเฉฐเจ•เจธเจผเจจเจพเจ‚ เจตเจพเจฒเจพ เจ•เฉ‹เจก เจฆเจพ เจ‡เฉฑเจ• เจฌเจฒเจพเจ•
  • bot_methods.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
);

เจœเฉ‡เจ•เจฐ เจคเฉเจธเฉ€เจ‚ เจฌเฉ‹เจŸ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจจเฉ‚เฉฐ เจ‡เจธ เจคเฉ‹เจ‚ เจกเจพเจŠเจจเจฒเฉ‹เจก เจ•เฉ€เจคเจพ เจนเฉˆ 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 เจคเจฐเฉ€เจ•เฉ‡ เจฌเจฃเจพเจ:

  • start โ€” เจ‡เฉฑเจ• เจกเจพเจ‡เจฒเจพเจ— เจธเจผเฉเจฐเฉ‚ เจ•เจฐเฉ‹
  • เจฐเจพเจœ - เจฎเฉŒเจœเฉ‚เจฆเจพ เจšเฉˆเจŸ เจธเจฅเจฟเจคเฉ€ เจชเฉเจฐเจพเจชเจค เจ•เจฐเฉ‹
  • เจฐเฉ€เจธเฉˆเจŸ - เจฎเฉŒเจœเฉ‚เจฆเจพ เจšเฉˆเจŸ เจธเจฅเจฟเจคเฉ€ เจจเฉ‚เฉฐ เจฐเฉ€เจธเฉˆเจŸ เจ•เจฐเฉ‹
  • enter_name โ€” เจฌเฉ‹เจŸ เจคเฉเจนเจพเจกเจพ เจจเจพเจฎ เจชเฉเฉฑเจ›เจฆเจพ เจนเฉˆ
  • enter_age โ€” เจฌเฉ‹เจŸ เจคเฉเจนเจพเจกเฉ€ เจ‰เจฎเจฐ เจชเฉเฉฑเจ›เจฆเจพ เจนเฉˆ

.เฉฐเจ— start เจคเฉเจนเจพเจกเจพ เจจเจพเจฎ เจชเฉเฉฑเจ›เจฆเจพ เจนเฉˆ, เจ…เจคเฉ‡ เจšเฉˆเจŸ เจธเจฅเจฟเจคเฉ€ เจจเฉ‚เฉฐ เจ‡เจธ เจตเจฟเฉฑเจš เจฌเจฆเจฒเจฆเจพ เจนเฉˆ เจ‰เจกเฉ€เจ•_เจจเจพเจฎ, i.e. เจคเฉเจนเจพเจกเจพ เจจเจพเจฎ เจฆเจฐเจœ เจ•เจฐเจจ เจฒเจˆ เจธเจŸเฉˆเจ‚เจกเจฌเจพเจ เจนเฉ‹เจฃ เจฒเจˆเฅค

เจ…เฉฑเจ—เฉ‡, เจคเฉเจธเฉ€เจ‚ เจจเจพเจฎ เจญเฉ‡เจœเจฆเฉ‡ เจนเฉ‹ เจ…เจคเฉ‡ เจ‡เจน เจตเจฟเจงเฉ€ เจฆเฉเจ†เจฐเจพ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจ•เฉ€เจคเฉ€ เจœเจพเจ‚เจฆเฉ€ เจนเฉˆ enter_name, เจฌเฉ‹เจŸ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจธเจผเฉเจญเจ•เจพเจฎเจจเจพเจตเจพเจ‚ เจฆเจฟเฉฐเจฆเจพ เจนเฉˆ, เจชเฉเจฐเจพเจชเจค เจนเฉ‹เจ เจจเจพเจฎ เจจเฉ‚เฉฐ เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจตเจฟเฉฑเจš เจฒเจฟเจ–เจฆเจพ เจนเฉˆ, เจ…เจคเฉ‡ เจšเฉˆเจŸ เจจเฉ‚เฉฐ เจธเจŸเฉ‡เจŸ เจตเจฟเฉฑเจš เจฌเจฆเจฒเจฆเจพ เจนเฉˆ เจ‰เจกเฉ€เจ•_เจ‰เจฎเจฐ.

เจ‡เจธ เจชเฉœเจพเจ… 'เจคเฉ‡, เจฌเฉ‹เจŸ เจคเฉเจนเจพเจกเฉ‡ เจคเฉ‹เจ‚ เจคเฉเจนเจพเจกเฉ€ เจ‰เจฎเจฐ เจตเจฟเฉฑเจš เจฆเจพเจ–เจฒ เจนเฉ‹เจฃ เจฆเฉ€ เจ‰เจฎเฉ€เจฆ เจ•เจฐเจฆเจพ เจนเฉˆเฅค เจคเฉเจธเฉ€เจ‚ เจ†เจชเจฃเฉ€ เจ‰เจฎเจฐ เจญเฉ‡เจœเจฆเฉ‡ เจนเฉ‹, เจฌเฉ‹เจŸ เจธเฉฐเจฆเฉ‡เจธเจผ เจฆเฉ€ เจœเจพเจ‚เจš เจ•เจฐเจฆเจพ เจนเฉˆ, เจœเฉ‡เจ•เจฐ เจคเฉเจธเฉ€เจ‚ เจ‡เฉฑเจ• เจจเฉฐเจฌเจฐ เจฆเฉ€ เจฌเจœเจพเจ เจ•เฉเจ เจŸเฉˆเจ•เจธเจŸ เจญเฉ‡เจœเจฟเจ† เจนเฉˆ, เจคเจพเจ‚ เจ‡เจน เจ•เจนเฉ‡เจ—เจพ: ะขั‹ ะฒะฒั‘ะป ะฝะตะบะพั€ั€ะตะบั‚ะฝั‹ะต ะดะฐะฝะฝั‹ะต, ะฒะฒะตะดะธ ั‡ะธัะปะพ, เจ…เจคเฉ‡ เจคเฉเจนเจพเจกเฉ‡ เจกเฉ‡เจŸเจพ เจจเฉ‚เฉฐ เจฆเฉเจฌเจพเจฐเจพ เจฆเจฐเจœ เจ•เจฐเจจ เจฆเฉ€ เจ‰เจกเฉ€เจ• เจ•เจฐเฉ‡เจ—เจพเฅค เจœเฉ‡เจ•เจฐ เจคเฉเจธเฉ€เจ‚ เจ‡เฉฑเจ• เจจเฉฐเจฌเจฐ เจญเฉ‡เจœเจฟเจ† เจนเฉˆ, เจคเจพเจ‚ เจฌเฉ‹เจŸ เจฐเจฟเจชเฉ‹เจฐเจŸ เจ•เจฐเฉ‡เจ—เจพ เจ•เจฟ เจ‰เจธเจจเฉ‡ เจคเฉเจนเจพเจกเฉ€ เจ‰เจฎเจฐ เจจเฉ‚เฉฐ เจธเจตเฉ€เจ•เจพเจฐ เจ•เจฐ เจฒเจฟเจ† เจนเฉˆ, เจชเฉเจฐเจพเจชเจค เจกเฉ‡เจŸเจพ เจจเฉ‚เฉฐ เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจตเจฟเฉฑเจš เจฒเจฟเจ–เฉ‹, เจคเฉเจนเจพเจกเฉ‡ เจคเฉ‹เจ‚ เจชเฉเจฐเจพเจชเจค เจ•เฉ€เจคเฉ‡ เจธเจพเจฐเฉ‡ เจกเฉ‡เจŸเจพ เจฆเฉ€ เจฐเจฟเจชเฉ‹เจฐเจŸ เจ•เจฐเฉ‹ เจ…เจคเฉ‡ เจšเฉˆเจŸ เจธเจฅเจฟเจคเฉ€ เจจเฉ‚เฉฐ เจ‡เจธเจฆเฉ€ เจ…เจธเจฒ เจธเจฅเจฟเจคเฉ€ เจตเจฟเฉฑเจš เจตเจพเจชเจธ เจ•เจฐเฉ‹, เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ. เจตเฉ€ start.

เจตเจฟเจงเฉ€ เจจเฉ‚เฉฐ เจฌเฉเจฒเจพ เจ•เฉ‡ state เจคเฉเจธเฉ€เจ‚ เจ•เจฟเจธเฉ‡ เจตเฉ€ เจธเจฎเฉ‡เจ‚ เจฎเฉŒเจœเฉ‚เจฆเจพ เจšเฉˆเจŸ เจธเจฅเจฟเจคเฉ€ เจฆเฉ€ เจฌเฉ‡เจจเจคเฉ€ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹, เจ…เจคเฉ‡ เจตเจฐเจค เจ•เฉ‡ reset เจšเฉˆเจŸ เจจเฉ‚เฉฐ เจ‡เจธเจฆเฉ€ เจ…เจธเจฒ เจธเจฅเจฟเจคเฉ€ เจตเจฟเฉฑเจš เจตเจพเจชเจธ เจ•เจฐเฉ‹เฅค

เจธเฉเจจเฉ‡เจนเจพ เจซเจฟเจฒเจŸเจฐ

เจธเจพเจกเฉ‡ เจ•เฉ‡เจธ เจตเจฟเฉฑเจš, เจ‡เจน เจ‡เฉฑเจ• เจฌเฉ‹เจŸ เจฌเจฃเจพเจ‰เจฃ เจตเจฟเฉฑเจš เจธเจญ เจคเฉ‹เจ‚ เจฎเจนเฉฑเจคเจตเจชเฉ‚เจฐเจจ เจญเจพเจ—เจพเจ‚ เจตเจฟเฉฑเจšเฉ‹เจ‚ เจ‡เฉฑเจ• เจนเฉˆ. เจ‡เจน เจธเฉเจจเฉ‡เจนเจพ เจซเจฟเจฒเจŸเจฐเจพเจ‚ เจฆเฉ€ เจฎเจฆเจฆ เจจเจพเจฒ เจนเฉˆ เจ•เจฟ เจฌเฉ‹เจŸ เจธเจฎเจเฉ‡เจ—เจพ เจ•เจฟ เจ‰เจน เจคเฉเจนเจพเจกเฉ‡ เจคเฉ‹เจ‚ เจ•เจฟเจนเฉœเฉ€ เจœเจพเจฃเจ•เจพเจฐเฉ€ เจฆเฉ€ เจ‰เจฎเฉ€เจฆ เจ•เจฐเจฆเจพ เจนเฉˆ เจ…เจคเฉ‡ เจ‡เจธ 'เจคเฉ‡ เจ•เจฟเจตเฉ‡เจ‚ เจ•เจพเจฐเจตเจพเจˆ เจ•เฉ€เจคเฉ€ เจœเจพเจฃเฉ€ เจšเจพเจนเฉ€เจฆเฉ€ เจนเฉˆเฅค

'เจคเฉ‡ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจตเจฟเฉฑเจš GitHub เจซเจฟเจฒเจŸเจฐ เจซเจพเจˆเจฒ เจตเจฟเฉฑเจš เจฆเจฐเจœ เจนเจจ เจธเฉเจจเฉ‡เจนเจพ_เจซเจฟเจฒเจŸเจฐ.เจ†เจฐ.

เจธเฉเจจเฉ‡เจนเจพ เจซเจฟเจฒเจŸเจฐ เจ•เฉ‹เจก:

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

เจจเจคเฉ€เจœเฉ‡ เจตเจœเฉ‹เจ‚, เจธเจพเจจเฉ‚เฉฐ เจ‡เจน เจฌเฉ‹เจŸ เจฎเจฟเจฒเจฟเจ†:
เจ†เจฐ (เจญเจพเจ— 4) เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจŸเฉˆเจฒเฉ€เจ—เฉเจฐเจพเจฎ เจฌเฉ‹เจŸ เจฒเจฟเจ–เจฃเจพ: เจฌเฉ‹เจŸ เจจเจพเจฒ เจ‡เฉฑเจ• เจจเจฟเจฐเฉฐเจคเจฐ, เจคเจฐเจ•เจชเฉ‚เจฐเจจ เจธเฉฐเจตเจพเจฆ เจฌเจฃเจพเจ‰เจฃเจพ

เจ•เจฟเจธเฉ‡ เจตเฉ€ เจธเจฎเฉ‡เจ‚ เจ•เจฎเจพเจ‚เจก เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ /state เจ…เจธเฉ€เจ‚ เจฎเฉŒเจœเฉ‚เจฆเจพ เจšเฉˆเจŸ เจธเจฅเจฟเจคเฉ€, เจ…เจคเฉ‡ เจ•เจฎเจพเจ‚เจก เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจชเฉเฉฑเจ›เจ—เจฟเฉฑเจ› เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเจพเจ‚ /reset เจšเฉˆเจŸ เจจเฉ‚เฉฐ เจ‡เจธเจฆเฉ€ เจ…เจธเจฒ เจธเจฅเจฟเจคเฉ€ เจตเจฟเฉฑเจš เจตเจพเจชเจธ เจ•เจฐเฉ‹ เจ…เจคเฉ‡ เจตเจพเจฐเจคเจพเจฒเจพเจช เจฆเฉเจฌเจพเจฐเจพ เจธเจผเฉเจฐเฉ‚ เจ•เจฐเฉ‹เฅค

เจธเจฟเฉฑเจŸเจพ

เจ‡เจธ เจฒเฉ‡เจ– เจตเจฟเฉฑเจš, เจ…เจธเฉ€เจ‚ เจ‡เจน เจชเจคเจพ เจฒเจ—เจพเจ‡เจ† เจนเฉˆ เจ•เจฟ เจ‡เฉฑเจ• เจฌเฉ‹เจŸ เจฆเฉ‡ เจ…เฉฐเจฆเจฐ เจ‡เฉฑเจ• เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฟเจตเฉ‡เจ‚ เจ•เจฐเจจเฉ€ เจนเฉˆ, เจ…เจคเฉ‡ เจšเฉˆเจŸ เจธเจฅเจฟเจคเฉ€ เจจเฉ‚เฉฐ เจฐเจฟเจ•เจพเจฐเจก เจ•เจฐเจ•เฉ‡ เจ•เฉเจฐเจฎเจตเจพเจฐ เจฒเจพเจœเจผเฉ€เจ•เจฒ เจธเฉฐเจตเจพเจฆเจพเจ‚ เจจเฉ‚เฉฐ เจ•เจฟเจตเฉ‡เจ‚ เจฌเจฃเจพเจ‡เจ† เจœเจพเจตเฉ‡เฅค

เจ‡เจธ เจ•เฉ‡เจธ เจตเจฟเฉฑเจš, เจ…เจธเฉ€เจ‚ เจธเจญ เจคเฉ‹เจ‚ เจฎเฉเฉฑเจขเจฒเฉ€ เจ‰เจฆเจพเจนเจฐเจจ เจฆเฉ‡เจ–เฉ€, เจคเจพเจ‚ เจœเฉ‹ เจคเฉเจนเจพเจกเฉ‡ เจฒเจˆ เจ…เจœเจฟเจนเฉ‡ เจฌเฉ‹เจŸเจพเจ‚ เจจเฉ‚เฉฐ เจฌเจฃเจพเจ‰เจฃ เจฆเฉ‡ เจตเจฟเจšเจพเจฐ เจจเฉ‚เฉฐ เจธเจฎเจเจฃเจพ เจ†เจธเจพเจจ เจนเฉ‹ เจœเจพเจตเฉ‡; เจ…เจญเจฟเจ†เจธ เจตเจฟเฉฑเจš, เจคเฉเจธเฉ€เจ‚ เจฌเจนเฉเจค เจœเจผเจฟเจ†เจฆเจพ เจ—เฉเฉฐเจเจฒเจฆเจพเจฐ เจธเฉฐเจตเจพเจฆ เจฌเจฃเจพ เจธเจ•เจฆเฉ‡ เจนเฉ‹เฅค

เจ‡เจธ เจฒเฉœเฉ€ เจฆเฉ‡ เจ…เจ—เจฒเฉ‡ เจฒเฉ‡เจ– เจตเจฟเฉฑเจš, เจ…เจธเฉ€เจ‚ เจธเจฟเจ–เจพเจ‚เจ—เฉ‡ เจ•เจฟ เจฌเฉ‹เจŸ เจ‰เจชเจญเฉ‹เจ—เจคเจพเจตเจพเจ‚ เจฆเฉ‡ เจตเฉฑเจ–-เจตเฉฑเจ– เจคเจฐเฉ€เจ•เจฟเจ†เจ‚ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจ เจฆเฉ‡ เจ…เจงเจฟเจ•เจพเจฐเจพเจ‚ เจจเฉ‚เฉฐ เจ•เจฟเจตเฉ‡เจ‚ เจธเฉ€เจฎเจค เจ•เจฐเจจเจพ เจนเฉˆเฅค

เจธเจฐเฉ‹เจค: www.habr.com

เจ‡เฉฑเจ• เจŸเจฟเฉฑเจชเจฃเฉ€ เจœเฉ‹เฉœเฉ‹