init commit

master
Paul Walko 2020-09-01 00:30:07 +00:00
commit 13e5da66fa
4 changed files with 112 additions and 0 deletions

13
README.md Normal file
View File

@ -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.

46
signal/app.py Executable file
View File

@ -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()

48
sms/index.js Normal file
View File

@ -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)}`);
}
};

5
sms/package.json Normal file
View File

@ -0,0 +1,5 @@
{
"dependencies": {
"node-fetch": "^2.6.0"
}
}