from deltachat2 import MsgData, events from deltabot_cli import BotCli import RPi.GPIO as GPIO import time import subprocess cli = BotCli("doorbot") allowed_chats = [10,12,13] @cli.on(events.RawEvent) def log_event(bot, accid, event): bot.logger.info(event) def open_downstairs(bot, accid, msg): pin = 26 if not msg.chat_id == cli.get_admin_chat(bot.rpc, accid): bot.rpc.send_msg(accid, msg.chat_id, MsgData(text="permission denied")) return bot.rpc.send_reaction(accid, msg.id, ["🆗"]) GPIO.setmode(GPIO.BCM) GPIO.setwarnings(False) GPIO.setup(pin,GPIO.OUT) GPIO.output(pin,GPIO.HIGH) time.sleep(3) GPIO.output(pin,GPIO.LOW) @cli.on(events.NewMessage) def echo(bot, accid, event): # TODO: check the time this was sent that it is not too far ago # or and use realtime channels msg = event.msg if msg.text == "/open2": if not msg.chat_id == cli.get_admin_chat(bot.rpc, accid): bot.rpc.send_msg(accid, msg.chat_id, MsgData(text="permission denied")) return bot.rpc.send_reaction(accid, msg.id, ["🆗"]) try: subprocess.run(["./unlock.sh"], timeout=25) except subprocess.TimeoutExpired: bot.rpc.send_reaction(accid, msg.id, ["❌"]) elif msg.text.startswith("/open"): try: n = int(msg.text.removeprefix("/open")) except ValueError: n = 0 time.sleep(n) open_downstairs(bot, accid, msg) elif msg.text == "/id": bot.rpc.send_msg(accid, msg.chat_id, MsgData(text="the id of this chat is {id}, add this to the allowlist to allow opening the door from this group".format(id = msg.chat_id))) elif msg.text == "/help": bot.rpc.send_msg(accid, msg.chat_id, MsgData(text="/open - open the downstairs door\n/open2 - open the upstairs door\n/open 120 - wait 120 seconds, then open the downstairs door")) if __name__ == "__main__": cli.start()