-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathmain.py
74 lines (61 loc) · 2.29 KB
/
main.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
import pydotenv
import threading
from getpass import getpass
from flask import Flask
from BandwidthSmsHandler import BandwidthSmsHandler
from MessengerHandler import MessengerHandler
from SMSOutgoingMiddleman import SMSOutgoingMiddleman
from TwilioSmsHandler import TwilioSmsHandler
from PipelineHandler import PipelineHandler
def get_sms_provider(provider_name, environment):
to_number = environment.get('YOUR_NUMBER')
if provider_name == 'bandwidth':
return BandwidthSmsHandler(
environment.get('BANDWIDTH_USER'),
environment.get('BANDWIDTH_TOKEN'),
environment.get('BANDWIDTH_SECRET'),
environment.get('BANDWIDTH_FROM_NUMBER'),
to_number
)
elif provider_name == 'twilio':
return TwilioSmsHandler(
environment.get('TWILIO_SID'),
environment.get('TWILIO_AUTH_TOKEN'),
environment.get('TWILIO_FROM_NUMBER'),
to_number
)
else:
raise ValueError('Bad SMS_PROVIDER in .env. Choices are: [bandwidth, twilio]')
def sms_listen(flask_listener, sms_handler, pipeline, host, port):
sms_handler.register_with_flask(flask)
sms_handler.start(pipeline.send_callback)
flask_listener.run(host=host, port=port, debug=False)
def messenger_listen(fb, pipeline):
fb.start(pipeline.send_callback)
if __name__ == '__main__':
env = pydotenv.Environment(check_file_exists=True)
flask = Flask(__name__)
fbmessenger = MessengerHandler(
env.get('MESSENGER_LOGIN'),
env.get('MESSENGER_PASSWORD')
)
sms_listener = get_sms_provider(env.get('SMS_PROVIDER'), env)
middleman = SMSOutgoingMiddleman()
sms_event_pipeline = PipelineHandler([
middleman.sms_to_messenger,
fbmessenger.send_callback
])
messenger_event_pipeline = PipelineHandler([
middleman.messenger_to_sms,
sms_listener.send_callback
])
sms_listen_thread = threading.Thread(target=sms_listen, args=[
flask,
sms_listener,
sms_event_pipeline,
env.get('FLASK_HOST', None),
env.get('FLASK_PORT', '5000')
])
messenger_listen_thread = threading.Thread(target=messenger_listen, args=[fbmessenger, messenger_event_pipeline])
sms_listen_thread.start()
messenger_listen_thread.start()