-
Notifications
You must be signed in to change notification settings - Fork 3
/
foaas.py
87 lines (66 loc) · 2.23 KB
/
foaas.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#!/usr/bin/env python
from flask import Flask, request, jsonify
import requests
import json
import random
app = Flask(__name__)
@app.route('/fuckoff_slashcommand', methods=['GET', 'POST'])
def slashcommand():
fo = gen_fuckoff()
return jsonify({
"response_type": "in_channel",
"attachments": [{
'title': fo['subtitle'],
'fallback': fo['message'],
'text': fo['message'],
'parse': 'none',
'mrkdwn': False
}]
})
@app.route('/fuckoff', methods=['GET', 'POST'])
def webhook():
fo = gen_fuckoff()
res_text = fo['message'] + "\n_" + fo['subtitle'] + '_'
resp = {
'text': res_text
}
return json.dumps(resp)
def gen_fuckoff():
# trigger warning: trigger word
trigger_word = request.values.get('trigger_word')
# from/dest params
name_from = request.values.get('user_name')
text = request.values.get('text')
# strip trigger word
name = text
if trigger_word:
name = text.replace(trigger_word, "", 1)
# grab available fuckoff operateions
ops_r = requests.get('http://foaas.com/operations')
ops = json.loads(ops_r.text)
# assemble list of valid ops
if not name:
# if we don't have a target name then we need to skip items that have a name param
ops = [op for op in ops if len([field for field in op['fields'] if field['field'] == 'name'])]
# strip out operations that require extra fields
basic_ops = []
for op in ops:
fields = op['fields']
field_names = [field['field'] for field in fields]
# if not len(field_names) or set(field_names) == set(['from']) or set(field_names) == set(['name', 'from']):
# only allow ones with from/to
if set(field_names) == set(['name', 'from']):
basic_ops.append(op)
# pick random op
op = random.choice(basic_ops)
url = op['url']
if name_from:
url = url.replace(':from', name_from)
if name:
url = url.replace(':name', name)
# get fuckoff
fo_r = requests.get('http://foaas.com%s' % url, headers={ 'Accept': 'application/json' })
fo = json.loads(fo_r.text)
return fo
if __name__ == '__main__':
app.run(host='0.0.0.0', debug=True)