From 13e5da66fa33194fed2177c2fcdc08e320d7e697 Mon Sep 17 00:00:00 2001 From: Paul Walko Date: Tue, 1 Sep 2020 00:30:07 +0000 Subject: [PATCH] init commit --- README.md | 13 +++++++++++++ signal/app.py | 46 ++++++++++++++++++++++++++++++++++++++++++++++ sms/index.js | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ sms/package.json | 5 +++++ 4 files changed, 112 insertions(+) create mode 100644 README.md create mode 100755 signal/app.py create mode 100644 sms/index.js create mode 100644 sms/package.json diff --git a/README.md b/README.md new file mode 100644 index 0000000..7568e64 --- /dev/null +++ b/README.md @@ -0,0 +1,13 @@ +# wuvt-signal + +Code for a wuvt signal & SMS bot + + +### signal + +See `signal/app.py`. Requires signald + pysignald. Must provide `SIGNAL_NUMBER` env var. + + +### sms + +See `sms/index.js`. Requires lambda to respond and AWS pinpoint + an SNS topic to receive messages. diff --git a/signal/app.py b/signal/app.py new file mode 100755 index 0000000..af80da5 --- /dev/null +++ b/signal/app.py @@ -0,0 +1,46 @@ +#!/usr/bin/env python3 + +import os +import re +import time + +import requests +from signald import Signal + +s = Signal(os.environ["SIGNAL_NUMBER"]) + +@s.chat_handler(".wuvt")#re.compile(".*?(wuvt).*?")) +def wuvt(message, match): + r = requests.get('https://www.wuvt.vt.edu/playlists/latest_track', headers={'Accept': "application/json"}) + trackinfo = r.json() + + if 'listeners' in trackinfo and trackinfo['listeners'] is not None: + return str( + "{dj} is currently playing \"{title}\" by {artist} with " + "{listeners:d} online listeners".format( + dj=trackinfo['dj'], + title=trackinfo['title'], + artist=trackinfo['artist'], + listeners=trackinfo['listeners'])) + else: + return str("{dj} is currently playing \"{title}\" by {artist}".format( + dj=trackinfo['dj'], + title=trackinfo['title'], + artist=trackinfo['artist'])) + +def divide(input, by): + return (input // by), (input % by) + +@s.chat_handler(".yi") +def yi(message, match): + quadraels, remainder = divide(int(time.time()), 1753200) + raels = quadraels * 4 + extraraels, remainder = divide(remainder, 432000) + if extraraels == 4: + return('Yes! PARTAI!') + elif extraraels == 3: + return('Soon...') + else: + return('Not yet...') + +s.run_chat() diff --git a/sms/index.js b/sms/index.js new file mode 100644 index 0000000..4efeb26 --- /dev/null +++ b/sms/index.js @@ -0,0 +1,48 @@ +const AWS = require('aws-sdk'); +const fetch = require('node-fetch'); + +AWS.config.update({region: 'us-east-1'}); + + +exports.handler = (event) => { + const message = JSON.parse(event.Records[0].Sns.Message); + //console.log(`MESSAGE: ${JSON.stringify(message)}`); + + if (message.messageBody.toLowerCase().includes('wuvt')) { + fetch('https://www.wuvt.vt.edu/playlists/latest_track', { + headers: { + Accept: 'application/json', + } + }).then((r) => { + r.text().then((rt) => { + // Check for error + if (r.status !== 200) { + console.error(`ERROR, STATUS: ${r.status}, TEXT: ${rt}`); + return; + } + + // Create smsResponse + const trackinfo = JSON.parse(rt); + let smsResponse = ''; + if (trackinfo.listeners) { + smsResponse = `${trackinfo.dj} is currently playing "${trackinfo.title}" by ${trackinfo.artist} with ${trackinfo.listeners} listeners.`; + } else { + smsResponse = `${trackinfo.dj} is currently playing "${trackinfo.title}" by ${trackinfo.artist}.`; + } + + // Send smsResponse + const smsParams = { + Message: smsResponse, + PhoneNumber: message.originationNumber, + }; + + const promise = new AWS.SNS({apiVersion: '2010-03-31'}).publish(smsParams).promise(); + promise.then().catch((err) => { + console.error(err, err.stack); + }); + }); + }); + } else { + console.log(`MESSAGE: ${JSON.stringify(message)}`); + } +}; diff --git a/sms/package.json b/sms/package.json new file mode 100644 index 0000000..40ceb84 --- /dev/null +++ b/sms/package.json @@ -0,0 +1,5 @@ +{ + "dependencies": { + "node-fetch": "^2.6.0" + } +}