Update telegram library, add docs
This commit is contained in:
parent
31049541ba
commit
b6f9687e4d
44
README.md
44
README.md
|
@ -2,10 +2,50 @@
|
||||||
|
|
||||||
This lets my deranged friend monitor his drunken campground shenanigans from a Telegram bot.
|
This lets my deranged friend monitor his drunken campground shenanigans from a Telegram bot.
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
Add @robbcampbot to your Telegram group.
|
||||||
|
|
||||||
|
Send the `/campcam` command.
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
```
|
```
|
||||||
$ pip install --force-reinstall 'python-telegram-bot==v13.15' 'picamera'
|
$ sudo raspi-config # enable the camera
|
||||||
|
$ sudo apt install python3 python3-pip python3-virtualenv
|
||||||
$ git clone https://git.tannercollin.com/tanner/campcam.git
|
$ git clone https://git.tannercollin.com/tanner/campcam.git
|
||||||
$ python campcam.py
|
$ cd campcam/
|
||||||
|
$ virtualenv -p python3 env
|
||||||
|
$ . env/bin/activate
|
||||||
|
(env) $ pip install -r requirements.txt
|
||||||
|
# edit secrets.py.example, save as secrets.py
|
||||||
|
(env) $ python campcam.py
|
||||||
|
```
|
||||||
|
|
||||||
|
## Process Control
|
||||||
|
|
||||||
|
```
|
||||||
|
$ sudo apt install supervisor
|
||||||
|
```
|
||||||
|
|
||||||
|
Append to `/etc/supervisor/supervisor.conf`, replace `tanner` with your Linux username:
|
||||||
|
|
||||||
|
```
|
||||||
|
[program:campcam]
|
||||||
|
user=tanner
|
||||||
|
directory=/home/tanner/campcam
|
||||||
|
command=/home/tanner/campcam/env/bin/python -u campcam.py
|
||||||
|
stopsignal=INT
|
||||||
|
stopasgroup=true
|
||||||
|
killasgroup=true
|
||||||
|
autostart=true
|
||||||
|
autorestart=true
|
||||||
|
stderr_logfile=/var/log/campcam.log
|
||||||
|
stderr_logfile_maxbytes=10MB
|
||||||
|
stdout_logfile=/var/log/campcam.log
|
||||||
|
stdout_logfile_maxbytes=10MB
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
$ sudo supervisorctl reread; sudo supervisorctl update
|
||||||
```
|
```
|
||||||
|
|
47
campcam.py
47
campcam.py
|
@ -1,39 +1,52 @@
|
||||||
import telegram
|
import logging
|
||||||
from telegram.ext import CommandHandler, Updater
|
|
||||||
import picamera
|
import picamera
|
||||||
import time
|
import time
|
||||||
import os
|
|
||||||
|
from telegram import ForceReply, Update
|
||||||
|
from telegram.ext import Application, CommandHandler, ContextTypes, MessageHandler, filters
|
||||||
|
|
||||||
import secrets
|
import secrets
|
||||||
|
|
||||||
bot = telegram.Bot(token=secrets.API_TOKEN)
|
logging.basicConfig(
|
||||||
|
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', level=logging.INFO
|
||||||
|
)
|
||||||
|
logging.getLogger('httpx').setLevel(logging.WARNING)
|
||||||
|
|
||||||
def send_photo(update, context):
|
logger = logging.getLogger(__name__)
|
||||||
# Take a photo with the Raspberry Pi camera
|
|
||||||
|
|
||||||
|
|
||||||
|
async def start(update, context):
|
||||||
|
user = update.effective_user
|
||||||
|
await update.message.reply_html(
|
||||||
|
rf'Hi {user.mention_html()}!',
|
||||||
|
reply_markup=ForceReply(selective=True),
|
||||||
|
)
|
||||||
|
|
||||||
|
async def campcam(update, context):
|
||||||
print('Got campcam command')
|
print('Got campcam command')
|
||||||
|
|
||||||
with picamera.PiCamera() as camera:
|
with picamera.PiCamera() as camera:
|
||||||
camera.resolution = (2592, 1944)
|
camera.resolution = (2592, 1944)
|
||||||
camera.start_preview()
|
camera.start_preview()
|
||||||
# Camera warm-up time
|
|
||||||
time.sleep(5)
|
time.sleep(5)
|
||||||
# Save the photo to a file
|
|
||||||
filename = 'data/' + str(int(time.time())) + '.jpg'
|
filename = 'data/' + str(int(time.time())) + '.jpg'
|
||||||
camera.capture(filename)
|
camera.capture(filename)
|
||||||
|
|
||||||
print('Saved file to', filename)
|
print('Saved file to', filename)
|
||||||
|
|
||||||
chat_id = update.message.chat_id
|
await update.message.reply_photo(photo=open(filename, 'rb'), connect_timeout=300, write_timeout=300, read_timeout=300)
|
||||||
message_id = update.message.message_id
|
|
||||||
bot.send_photo(chat_id=chat_id, photo=open(filename, 'rb'), reply_to_message_id=message_id)
|
|
||||||
|
|
||||||
print('Sent to chat')
|
print('Sent to chat')
|
||||||
|
|
||||||
send_photo_handler = CommandHandler('campcam', send_photo)
|
|
||||||
updater = Updater(bot=bot, workers=1)
|
|
||||||
dispatcher = updater.dispatcher
|
|
||||||
dispatcher.add_handler(send_photo_handler)
|
|
||||||
|
|
||||||
print('Loaded.')
|
def main():
|
||||||
|
application = Application.builder().token(secrets.API_TOKEN).build()
|
||||||
|
|
||||||
updater.start_polling()
|
application.add_handler(CommandHandler('start', start))
|
||||||
|
application.add_handler(CommandHandler('campcam', campcam))
|
||||||
|
|
||||||
|
application.run_polling(allowed_updates=Update.ALL_TYPES)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
||||||
|
|
17
requirements.txt
Normal file
17
requirements.txt
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
anyio==4.3.0
|
||||||
|
APScheduler==3.6.3
|
||||||
|
cachetools==4.2.2
|
||||||
|
certifi==2024.2.2
|
||||||
|
exceptiongroup==1.2.1
|
||||||
|
h11==0.14.0
|
||||||
|
httpcore==1.0.5
|
||||||
|
httpx==0.27.0
|
||||||
|
idna==3.7
|
||||||
|
picamera==1.13
|
||||||
|
python-telegram-bot==21.1.1
|
||||||
|
pytz==2024.1
|
||||||
|
six==1.16.0
|
||||||
|
sniffio==1.3.1
|
||||||
|
tornado==6.1
|
||||||
|
typing-extensions==4.11.0
|
||||||
|
tzlocal==5.2
|
1
secrets.py.example
Normal file
1
secrets.py.example
Normal file
|
@ -0,0 +1 @@
|
||||||
|
API_TOKEN = ''
|
Loading…
Reference in New Issue
Block a user