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.
|
||||
|
||||
## Usage
|
||||
|
||||
Add @robbcampbot to your Telegram group.
|
||||
|
||||
Send the `/campcam` command.
|
||||
|
||||
## 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
|
||||
$ 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
|
||||
from telegram.ext import CommandHandler, Updater
|
||||
import logging
|
||||
import picamera
|
||||
import time
|
||||
import os
|
||||
|
||||
from telegram import ForceReply, Update
|
||||
from telegram.ext import Application, CommandHandler, ContextTypes, MessageHandler, filters
|
||||
|
||||
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):
|
||||
# Take a photo with the Raspberry Pi camera
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
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')
|
||||
|
||||
with picamera.PiCamera() as camera:
|
||||
camera.resolution = (2592, 1944)
|
||||
camera.start_preview()
|
||||
# Camera warm-up time
|
||||
time.sleep(5)
|
||||
# Save the photo to a file
|
||||
filename = 'data/' + str(int(time.time())) + '.jpg'
|
||||
camera.capture(filename)
|
||||
|
||||
print('Saved file to', filename)
|
||||
|
||||
chat_id = update.message.chat_id
|
||||
message_id = update.message.message_id
|
||||
bot.send_photo(chat_id=chat_id, photo=open(filename, 'rb'), reply_to_message_id=message_id)
|
||||
await update.message.reply_photo(photo=open(filename, 'rb'), connect_timeout=300, write_timeout=300, read_timeout=300)
|
||||
|
||||
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