เจเฉเจเจฐ เจคเฉเจธเฉเจ เจชเจนเจฟเจฒเจพเจ เจนเฉ เจชเจฟเจเจฒเฉ เจชเฉเฉเจน เจเฉเฉฑเจเฉ เจนเฉ
เจเจธ เจฒเฉเจ เจตเจฟเจ, เจ เจธเฉเจ เจธเจฟเจเจพเจเจเฉ เจเจฟ เจเจ เจฌเฉเจ เจเจฟเจตเฉเจ เจฒเจฟเจเจฃเจพ เจนเฉ เจเฉ เจเจเจธเจพเจฐ เจธเฉฐเจตเจพเจฆ เจเจพเจเจฎ เจฐเฉฑเจเฉเจเจพเฅค เจเจน. เจฌเฉเจ เจคเฉเจนเจพเจจเฉเฉฐ เจธเจตเจพเจฒ เจชเฉเฉฑเจเฉเจเจพ เจ เจคเฉ เจคเฉเจนเจพเจกเฉ เจเฉเจ เจเจพเจฃเจเจพเจฐเฉ เจฆเจพเจเจฒ เจเจฐเจจ เจฆเฉ เจเจกเฉเจ เจเจฐเฉเจเจพเฅค เจคเฉเจนเจพเจกเฉ เจฆเฉเจเจฐเจพ เจฆเจพเจเจฒ เจเฉเจคเฉ เจเจ เจกเฉเจเจพ 'เจคเฉ เจจเจฟเจฐเจญเจฐ เจเจฐเจฆเจฟเจเจ, เจฌเฉเจ เจเฉเจ เจเจพเจฐเจตเจพเจเจเจ เจเจฐเฉเจเจพเฅค
เจเจธ เจฒเฉเจ เจตเจฟเฉฑเจ เจ
เจธเฉเจ เจเจน เจตเฉ เจธเจฟเจเจพเจเจเฉ เจเจฟ เจฌเฉเจ เจฆเฉ เจนเฉเฉฑเจก เจฆเฉ เจนเฉเจ เจพเจ เจเฉฑเจ เจกเฉเจเจพเจฌเฉเจธ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฟเจตเฉเจ เจเจฐเจจเฉ เจนเฉ, เจธเจพเจกเฉ เจเจฆเจพเจนเจฐเจฃ เจตเจฟเฉฑเจ เจเจน SQLite เจนเฉเจตเฉเจเจพ, เจชเจฐ เจคเฉเจธเฉเจ เจเจฟเจธเฉ เจนเฉเจฐ DBMS เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐ เจธเจเจฆเฉ เจนเฉเฅค เจฎเฉเจ เจตเจฟเฉฑเจ เจเจฐ เจญเจพเจธเจผเจพ เจตเจฟเฉฑเจ เจกเฉเจเจพเจฌเฉเจธ เจจเจพเจฒ เจเฉฑเจฒเจฌเจพเจค เจเจฐเจจ เจฌเจพเจฐเฉ เจตเจงเฉเจฐเฉ เจตเจฟเจธเจฅเจพเจฐ เจตเจฟเฉฑเจ เจฒเจฟเจเจฟเจ
เจฒเฉเฉ เจฆเฉ เจธเจพเจฐเฉ เจฒเฉเจ โR เจตเจฟเฉฑเจ เจเฉเจฒเฉเจเฉเจฐเจพเจฎ เจฌเฉเจ เจฒเจฟเจเจฃเจพโ
เจ เจธเฉเจ เจเฉฑเจ เจฌเฉเจ เจฌเจฃเจพเจเจเจฆเฉ เจนเจพเจ เจ เจคเฉ เจเจธเจจเฉเฉฐ เจเฉเจฒเฉเจเฉเจฐเจพเจฎ เจตเจฟเฉฑเจ เจธเฉฐเจฆเฉเจธเจผ เจญเฉเจเจฃ เจฒเจ เจตเจฐเจคเจฆเฉ เจนเจพเจ เจฌเฉเจ เจตเจฟเฉฑเจ เจเจฎเจพเจเจก เจธเจนเจพเจเจคเจพ เจ เจคเฉ เจธเฉเจจเฉเจนเจพ เจซเจฟเจฒเจเจฐ เจธเจผเจพเจฎเจฒ เจเจฐเฉ เจเฉฑเจ เจฌเฉเจ เจตเจฟเฉฑเจ เจเฉเจฌเฉเจฐเจก เจธเจฎเจฐเจฅเจจ เจเจฟเจตเฉเจ เจเฉเฉเจจเจพ เจนเฉ เจฌเฉเจ เจจเจพเจฒ เจเจเจธเจพเจฐ, เจคเจฐเจเจชเฉเจฐเจจ เจธเฉฐเจตเจพเจฆ เจฌเจฃเจพเจเจฃเจพ
เจธเจฎเฉฑเจเจฐเฉ
เจเฉ เจคเฉเจธเฉเจ เจกเฉเจเจพ เจตเจฟเจธเจผเจฒเฉเจธเจผเจฃ เจตเจฟเฉฑเจ เจฆเจฟเจฒเจเจธเจชเฉ เจฐเฉฑเจเจฆเฉ เจนเฉ, เจคเจพเจ เจคเฉเจนเจพเจจเฉเฉฐ เจฎเฉเจฐเฉ เจตเจฟเฉฑเจ เจฆเจฟเจฒเจเจธเจชเฉ เจนเฉ เจธเจเจฆเฉ เจนเฉ
เจเจพเจฃ เจชเจเจพเจฃ เจฌเฉเจ เจฌเจฃเจพเจเจฃ เจฆเฉ เจชเฉเจฐเจเจฟเจฐเจฟเจ เจฌเฉเจ เจชเฉเจฐเฉเจเฉเจเจ เจฌเจฃเจคเจฐ เจฌเฉเจ เจธเฉฐเจฐเจเจจเจพ เจเฉฑเจ เจตเจพเจคเจพเจตเจฐเจฃ เจตเฉเจฐเฉเจเจฌเจฒ เจฌเจฃเจพเจ เจเฉฑเจ เจกเจพเจเจพเจฌเฉเจธ เจฌเจฃเจพเจเจฃเจพ เจกเจพเจเจพเจฌเฉเจธ เจจเจพเจฒ เจเฉฐเจฎ เจเจฐเจจ เจฒเจ เจซเฉฐเจเจธเจผเจจ เจฒเจฟเจเจฃเจพ เจฌเฉเจ เจขเฉฐเจ เจธเฉเจจเฉเจนเจพ เจซเจฟเจฒเจเจฐ เจนเฉเจเจกเจฒเจฐ เจฌเฉเจ เจฒเจพเจเจ เจเฉเจก เจธเจฟเฉฑเจเจพ
เจเจพเจฃ เจชเจเจพเจฃ
เจฌเฉเจ เจจเฉเฉฐ เจคเฉเจนเจพเจกเฉ เจคเฉเจ เจกเฉเจเจพ เจฆเฉ เจฌเฉเจจเจคเฉ เจเจฐเจจ เจ เจคเฉ เจคเฉเจนเจพเจกเฉ เจฆเฉเจเจฐเจพ เจเฉเจ เจเจพเจฃเจเจพเจฐเฉ เจฆเจฐเจ เจเจฐเจจ เจฆเฉ เจเจกเฉเจ เจเจฐเจจ เจฒเจ, เจคเฉเจนเจพเจจเฉเฉฐ เจธเฉฐเจตเจพเจฆ เจฆเฉ เจฎเฉเจเฉเจฆเจพ เจธเจฅเจฟเจคเฉ เจจเฉเฉฐ เจฐเจฟเจเจพเจฐเจก เจเจฐเจจ เจฆเฉ เจฒเฉเฉ เจนเฉเจตเฉเจเฉเฅค เจ เจเจฟเจนเจพ เจเจฐเจจ เจฆเจพ เจธเจญ เจคเฉเจ เจตเจงเฉเจ เจคเจฐเฉเจเจพ เจนเฉ เจเจฟเจธเฉ เจเจฟเจธเจฎ เจฆเฉ เจเจฎเจฌเฉเจกเจก เจกเฉเจเจพเจฌเฉเจธ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจจเจพ, เจเจฟเจตเฉเจ เจเจฟ SQLite.
เจเจน. เจคเจฐเจ เจนเฉเจ เจฒเจฟเจเฉ เจ เจจเฉเจธเจพเจฐ เจนเฉเจตเฉเจเจพเฅค เจ เจธเฉเจ เจฌเฉเจ เจตเจฟเจงเฉ เจจเฉเฉฐ เจเจพเจฒ เจเจฐเจฆเฉ เจนเจพเจ, เจ เจคเฉ เจฌเฉเจ เจเฉเจฐเจฎเจตเจพเจฐ เจธเจพเจกเฉ เจคเฉเจ เจเฉเจ เจเจพเจฃเจเจพเจฐเฉ เจฆเฉ เจฌเฉเจจเจคเฉ เจเจฐเจฆเจพ เจนเฉ, เจ เจคเฉ เจนเจฐ เจชเฉเจพเจ 'เจคเฉ เจเจน เจเจธ เจเจพเจฃเจเจพเจฐเฉ เจฆเฉ เจฆเจพเจเจฒ เจนเฉเจฃ เจฆเฉ เจเจกเฉเจ เจเจฐเจฆเจพ เจนเฉ เจ เจคเฉ เจเจธเจฆเฉ เจเจพเจเจ เจเจฐ เจธเจเจฆเจพ เจนเฉเฅค
เจ เจธเฉเจ เจธเจญ เจคเฉเจ เจธเจฐเจฒ เจธเฉฐเจญเจต เจฌเฉเจ เจฒเจฟเจเจพเจเจเฉ, เจชเจนเจฟเจฒเจพเจ เจเจน เจคเฉเจนเจพเจกเจพ เจจเจพเจฎ เจชเฉเฉฑเจเฉเจเจพ, เจซเจฟเจฐ เจคเฉเจนเจพเจกเฉ เจเจฎเจฐ, เจ เจคเฉ เจชเฉเจฐเจพเจชเจค เจเฉเจคเฉ เจกเฉเจเจพ เจจเฉเฉฐ เจกเฉเจเจพเจฌเฉเจธ เจตเจฟเฉฑเจ เจธเฉเจฐเฉฑเจเจฟเจ เจค เจเจฐเฉเจเจพเฅค เจเจฎเจฐ เจฌเจพเจฐเฉ เจชเฉเฉฑเจเจฃ 'เจคเฉ, เจเจน เจเจพเจเจ เจเจฐเฉเจเจพ เจเจฟ เจฆเจพเจเจฒ เจเฉเจคเจพ เจกเฉเจเจพ เจเฉฑเจ เจจเฉฐเจฌเจฐ เจนเฉ เจจเจพ เจเจฟ เจเฉเจเจธเจเฅค
เจ เจเจฟเจนเฉ เจธเจงเจพเจฐเจจ เจธเฉฐเจตเจพเจฆ เจฆเฉ เจธเจฟเจฐเจซ เจคเจฟเฉฐเจจ เจฐเจพเจ เจนเฉเจฃเจเฉ:
- เจธเจผเฉเจฐเฉเจเจค เจฌเฉเจ เจฆเฉ เจเจฎ เจธเจฅเจฟเจคเฉ เจนเฉ, เจเจฟเจธ เจตเจฟเฉฑเจ เจเจน เจคเฉเจนเจพเจกเฉ เจคเฉเจ เจเจฟเจธเฉ เจเจพเจฃเจเจพเจฐเฉ เจฆเฉ เจเจฎเฉเจฆ เจจเจนเฉเจ เจเจฐเจฆเจพ เจนเฉ
- เจเจกเฉเจ_เจจเจพเจฎ - เจเจน เจธเจฅเจฟเจคเฉ เจเจฟเจธ เจตเจฟเฉฑเจ เจฌเฉเจ เจเฉฑเจ เจจเจพเจฎ เจฆเจฐเจ เจเฉเจคเฉ เจเจพเจฃ เจฆเฉ เจเจกเฉเจ เจเจฐเจฆเจพ เจนเฉ
- wait_age เจเจน เจ เจตเจธเจฅเจพ เจนเฉ เจเจฟเจธ เจตเจฟเฉฑเจ เจฌเฉเจ เจคเฉเจนเจพเจกเฉ เจเจฎเจฐ เจฆเฉ เจฆเจพเจเจฒ เจนเฉเจฃ เจฆเฉ เจเจกเฉเจ เจเจฐเจฆเจพ เจนเฉ, เจชเฉเจฐเฉ เจธเจพเจฒเจพเจ เจฆเฉ เจธเฉฐเจเจฟเจเฅค
เจฌเฉเจ เจฌเจฃเจพเจเจฃ เจฆเฉ เจชเฉเจฐเจเจฟเจฐเจฟเจ
เจฒเฉเจ เจฆเฉ เจฆเฉเจฐเจพเจจ, เจ
เจธเฉเจ เจเจฆเจฎ-เจฆเจฐ-เจเจฆเจฎ เจเฉฑเจ เจฌเฉเจ เจฌเจฃเจพเจตเจพเจเจเฉ; เจชเฉเจฐเฉ เจชเฉเจฐเจเจฟเจฐเจฟเจ เจจเฉเฉฐ เจฏเฉเจเจจเจพเจฌเฉฑเจง เจฐเฉเจช เจตเจฟเฉฑเจ เจนเฉเจ เจพเจ เจฆเจฐเจธเจพเจเจ เจเจพ เจธเจเจฆเจพ เจนเฉ:
- เจ เจธเฉเจ เจเฉฑเจ เจฌเฉเจ เจธเฉฐเจฐเจเจจเจพ เจฌเจฃเจพเจเจเจฆเฉ เจนเจพเจ เจเจฟเจธ เจตเจฟเฉฑเจ เจ เจธเฉเจ เจเฉเจ เจธเฉเจเจฟเฉฐเจเจพเจ เจจเฉเฉฐ เจธเจเฉเจฐ เจเจฐเจพเจเจเฉเฅค เจธเจพเจกเฉ เจเฉเจธ เจตเจฟเฉฑเจ, เจฌเฉเจ เจเฉเจเจจ, เจ เจคเฉ เจกเฉเจเจพเจฌเฉเจธ เจซเจพเจเจฒ เจฆเจพ เจฎเจพเจฐเจ.
- เจ เจธเฉเจ เจเฉฑเจ เจตเจพเจคเจพเจตเจฐเจฃ เจตเฉเจฐเฉเจเจฌเจฒ เจฌเจฃเจพเจเจเจฆเฉ เจนเจพเจ เจเจฟเจธ เจตเจฟเฉฑเจ เจฌเฉเจ เจฆเฉ เจจเจพเจฒ เจชเฉเจฐเฉเจเฉเจเจ เจฆเจพ เจฎเจพเจฐเจ เจธเจเฉเจฐ เจเฉเจคเจพ เจเจพเจตเฉเจเจพเฅค
- เจ เจธเฉเจ เจเฉเจฆ เจกเฉเจเจพเจฌเฉเจธ เจฌเจฃเจพเจเจเจฆเฉ เจนเจพเจ, เจ เจคเฉ เจเจ เจซเฉฐเจเจธเจผเจจ เจคเจพเจ เจเฉ เจฌเฉเจ เจเจธ เจจเจพเจฒ เจเฉฐเจเจฐเฉเจเจ เจเจฐ เจธเจเฉเฅค
- เจ เจธเฉเจ เจฌเฉเจ เจตเจฟเจงเฉเจเจ เจฒเจฟเจเจฆเฉ เจนเจพเจ, เจฏเจพเจจเฉ. เจซเฉฐเจเจธเจผเจจ เจเฉ เจเจน เจเจฐเฉเจเจพเฅค
- เจธเฉเจจเฉเจนเจพ เจซเจฟเจฒเจเจฐ เจเฉเฉ เจฐเจฟเจนเจพ เจนเฉเฅค เจเจฟเจธ เจฆเฉ เจฎเจฆเจฆ เจจเจพเจฒ เจฌเฉเจ เจเฉเจ เจฆเฉ เจฎเฉเจเฉเจฆเจพ เจธเจฅเจฟเจคเฉ เจฆเฉ เจเจงเจพเจฐ 'เจคเฉ เจเจผเจฐเฉเจฐเฉ เจคเจฐเฉเจเจฟเจเจ เจคเฉฑเจ เจชเจนเฉเฉฐเจ เจเจฐเฉเจเจพเฅค
- เจ เจธเฉเจ เจนเฉเจเจกเจฒเจฐ เจเฉเฉเจฆเฉ เจนเจพเจ เจเฉ เจเจผเจฐเฉเจฐเฉ เจฌเฉเจ เจคเจฐเฉเจเจฟเจเจ เจจเจพเจฒ เจเจฎเจพเจเจกเจพเจ เจ เจคเฉ เจธเฉฐเจฆเฉเจธเจผเจพเจ เจจเฉเฉฐ เจเฉเฉเจจเจเฉเฅค
- เจเจ เจฌเฉเจ เจจเฉเฉฐ เจฒเจพเจเจ เจเจฐเฉเจเฅค
เจฌเฉเจ เจชเฉเจฐเฉเจเฉเจเจ เจฌเจฃเจคเจฐ
เจธเจนเฉเจฒเจค เจฒเจ, เจ เจธเฉเจ เจเจชเจฃเฉ เจฌเฉเจ เจฆเฉ เจเฉเจก เจ เจคเฉ เจนเฉเจฐ เจธเฉฐเจฌเฉฐเจงเจฟเจค เจซเจพเจเจฒเจพเจ เจจเฉเฉฐ เจนเฉเจ เจพเจ เจฆเจฟเฉฑเจคเฉ เจขเจพเจเจเฉ เจตเจฟเฉฑเจ เจตเฉฐเจกเจพเจเจเฉเฅค
- เจฌเฉเจ.เจเจฐ - เจธเจพเจกเฉ เจฌเฉเจ เจฆเจพ เจฎเฉเฉฑเจ เจเฉเจก
- db_bot_function.R - เจกเฉเจเจพเจฌเฉเจธ เจจเจพเจฒ เจเฉฐเจฎ เจเจฐเจจ เจฒเจ เจซเฉฐเจเจธเจผเจจเจพเจ เจตเจพเจฒเจพ เจเฉเจก เจฆเจพ เจเฉฑเจ เจฌเจฒเจพเจ
- bot_methods.R - เจฌเฉเจ เจตเจฟเจงเฉเจเจ เจฆเจพ เจเฉเจก
- เจธเฉเจจเฉเจนเจพ_เจซเจฟเจฒเจเจฐ.เจเจฐ - เจธเฉเจจเฉเจนเจพ เจซเจฟเจฒเจเจฐ
- เจนเฉเจเจกเจฒเจฐ.เจเจฐ - เจนเฉเจเจกเจฒเจฐ
- config.cfg - เจฌเฉเจ เจธเฉฐเจฐเจเจจเจพ
- create_db_data.sql - เจกเจพเจเจพเจฌเฉเจธ เจตเจฟเฉฑเจ เจเฉเจ เจกเฉเจเจพ เจฆเฉ เจจเจพเจฒ เจเฉฑเจ เจธเจพเจฐเจฃเฉ เจฌเจฃเจพเจเจฃ เจฒเจ SQL เจธเจเฉเจฐเจฟเจชเจ
- create_db_state.sql - เจกเจพเจเจพเจฌเฉเจธ เจตเจฟเฉฑเจ เจฎเฉเจเฉเจฆเจพ เจเฉเจ เจธเจฅเจฟเจคเฉ เจฆเฉ เจเฉฑเจ เจธเจพเจฐเจฃเฉ เจฌเจฃเจพเจเจฃ เจฒเจ SQL เจธเจเฉเจฐเจฟเจชเจ
- bot.db - เจฌเฉเจ เจกเจพเจเจพเจฌเฉเจธ
เจคเฉเจธเฉเจ เจชเฉเจฐเฉ เจฌเฉเจ เจชเฉเจฐเฉเจเฉเจเจ เจจเฉเฉฐ เจฆเฉเจ เจธเจเจฆเฉ เจนเฉ, เจเจพเจ
เจฌเฉเจ เจธเฉฐเจฐเจเจจเจพ
เจ
เจธเฉเจ เจเฉฑเจ เจธเฉฐเจฐเจเจจเจพ เจฆเฉ เจคเฉเจฐ เจคเฉ เจเจฎ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจพเจเจเฉ
[bot_settings]
bot_token=ะขะะะะ_ะะะจะะะ_ะะะขะ
[db_settings]
db_path=C:/ะะฃะขะฌ/ะ/ะะะะะ/ะะ ะะะะขะ/bot.db
เจธเฉฐเจฐเจเจจเจพ เจตเจฟเฉฑเจ เจ เจธเฉเจ เจฌเฉเจ เจเฉเจเจจ เจ เจคเฉ เจกเฉเจเจพเจฌเฉเจธ เจฆเจพ เจฎเจพเจฐเจ เจฒเจฟเจเจฆเฉ เจนเจพเจ, เจเจฟเจตเฉเจ เจเจฟ. bot.db เจซเจพเจเจฒ เจตเจฟเฉฑเจ; เจ เจธเฉเจ เจ เจเจฒเฉ เจชเฉเจพเจ เจตเจฟเฉฑเจ เจซเจพเจเจฒ เจเฉเจฆ เจฌเจฃเจพเจตเจพเจเจเฉเฅค
เจตเจงเฉเจฐเฉ เจเฉเฉฐเจเจฒเจฆเจพเจฐ เจฌเฉเจเจพเจ เจฒเจ, เจคเฉเจธเฉเจ เจตเจงเฉเจฐเฉ เจเฉเฉฐเจเจฒเจฆเจพเจฐ เจธเฉฐเจฐเจเจจเจพ เจฌเจฃเจพ เจธเจเจฆเฉ เจนเฉ, เจเจธ เจคเฉเจ เจเจฒเจพเจตเจพ, เจเฉฑเจ ini เจธเฉฐเจฐเจเจจเจพ เจฒเจฟเจเจฃเจพ เจเจผเจฐเฉเจฐเฉ เจจเจนเฉเจ เจนเฉ, เจคเฉเจธเฉเจ JSON เจธเจฎเฉเจค เจเจฟเจธเฉ เจนเฉเจฐ เจซเจพเจฐเจฎเฉเจ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐ เจธเจเจฆเฉ เจนเฉ.
เจเฉฑเจ เจตเจพเจคเจพเจตเจฐเจฃ เจตเฉเจฐเฉเจเจฌเจฒ เจฌเจฃเจพเจ
เจนเจฐเฉเจ เจชเฉเจธเฉ 'เจคเฉ, เจฌเฉเจ เจชเฉเจฐเฉเจเฉเจเจ เจตเจพเจฒเจพ เจซเฉเจฒเจกเจฐ เจตเฉฑเจ-เจตเฉฑเจ เจกเจพเจเจฐเฉเจเจเจฐเฉเจเจ เจ
เจคเฉ เจตเฉฑเจ-เจตเฉฑเจ เจกเจฐเจพเจเจตเจพเจ เจตเจฟเฉฑเจ เจธเจฅเจฟเจค เจนเฉ เจธเจเจฆเจพ เจนเฉ, เจเจธเจฒเจ เจเฉเจก เจตเจฟเฉฑเจ เจชเฉเจฐเฉเจเฉเจเจ เจซเฉเจฒเจกเจฐ เจฆเจพ เจฎเจพเจฐเจ เจตเจพเจคเจพเจตเจฐเจฃ เจตเฉเจฐเฉเจเจฌเจฒ เจฆเฉเจเจฐเจพ เจธเฉเฉฑเจ เจเฉเจคเจพ เจเจพเจตเฉเจเจพเฅค 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 เจคเจฐเฉเจเฉ เจฌเจฃเจพเจ:
- start โ เจเฉฑเจ เจกเจพเจเจฒเจพเจ เจธเจผเฉเจฐเฉ เจเจฐเฉ
- เจฐเจพเจ - เจฎเฉเจเฉเจฆเจพ เจเฉเจ เจธเจฅเจฟเจคเฉ เจชเฉเจฐเจพเจชเจค เจเจฐเฉ
- เจฐเฉเจธเฉเจ - เจฎเฉเจเฉเจฆเจพ เจเฉเจ เจธเจฅเจฟเจคเฉ เจจเฉเฉฐ เจฐเฉเจธเฉเจ เจเจฐเฉ
- enter_name โ เจฌเฉเจ เจคเฉเจนเจพเจกเจพ เจจเจพเจฎ เจชเฉเฉฑเจเจฆเจพ เจนเฉ
- enter_age โ เจฌเฉเจ เจคเฉเจนเจพเจกเฉ เจเจฎเจฐ เจชเฉเฉฑเจเจฆเจพ เจนเฉ
.เฉฐเจ start
เจคเฉเจนเจพเจกเจพ เจจเจพเจฎ เจชเฉเฉฑเจเจฆเจพ เจนเฉ, เจ
เจคเฉ เจเฉเจ เจธเจฅเจฟเจคเฉ เจจเฉเฉฐ เจเจธ เจตเจฟเฉฑเจ เจฌเจฆเจฒเจฆเจพ เจนเฉ เจเจกเฉเจ_เจจเจพเจฎ, i.e. เจคเฉเจนเจพเจกเจพ เจจเจพเจฎ เจฆเจฐเจ เจเจฐเจจ เจฒเจ เจธเจเฉเจเจกเจฌเจพเจ เจนเฉเจฃ เจฒเจเฅค
เจ
เฉฑเจเฉ, เจคเฉเจธเฉเจ เจจเจพเจฎ เจญเฉเจเจฆเฉ เจนเฉ เจ
เจคเฉ เจเจน เจตเจฟเจงเฉ เจฆเฉเจเจฐเจพ เจชเฉเจฐเจเจฟเจฐเจฟเจ เจเฉเจคเฉ เจเจพเจเจฆเฉ เจนเฉ 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
, เจคเจพเจ เจเฉ เจ
เจธเฉเจ เจเจฟเจธเฉ เจตเฉ เจเฉเจ เจธเจฅเจฟเจคเฉ เจตเจฟเฉฑเจ เจเจฎเจพเจเจกเจพเจ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐ เจธเจเฉเจเฅค
เจฌเฉเจ เจฒเจพเจเจ เจเฉเจก
เจนเฉเจฃ เจธเจพเจกเฉ เจเฉเจฒ เจฒเจพเจเจ เจเจฐเจจ เจฒเจ เจธเจญ เจเฉเจ เจคเจฟเจเจฐ เจนเฉ, เจฌเฉเจ เจจเฉเฉฐ เจฒเจพเจเจ เจเจฐเจจ เจฒเจ เจฎเฉเฉฑเจ เจเฉเจก เจซเจพเจเจฒ เจตเจฟเฉฑเจ เจนเฉ เจฌเฉเจ.เจเจฐ.
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