Skip to content

Instantly share code, notes, and snippets.

@toracle
Last active August 3, 2017 06:08
Show Gist options
  • Save toracle/8a084c0c1c71b933053e0a572e639042 to your computer and use it in GitHub Desktop.
Save toracle/8a084c0c1c71b933053e0a572e639042 to your computer and use it in GitHub Desktop.
bothub-tutorial-digitalocean-3
class Bot(BaseBot):
def handle_message(self, event, context):
message = event.get('content')
if message == '/start':
self.set_start_message(event)
elif message == 'Create Droplet':
self.set_image(event)
elif message == 'List all Droplets':
self.list_droplets(event)
elif message.startswith('/delete '):
_, droplet_id = message.split()
self.delete_droplet(droplet_id, event)
elif message.startswith('/region '):
_, image = message.split()
self.set_data('image', image)
self.set_region(event)
elif message.startswith('/name '):
_, region = message.split()
self.set_data('region', region)
self.set_name(event)
# in case of natural language
else:
data = self.get_user_data()
api_key = data.get('api')
set_name = data.get('set_name')
if api_key:
self.verify_api(message, event)
return
elif set_name:
self.create_droplet(message, event)
return
def set_data(self, type, value):
data = self.get_user_data()
data[type] = value
self.set_user_data(data)
def set_image(self, event):
images = self.get_project_data()['image']
message = Message(event).set_text('Select an image.')
for image in images:
message.add_postback_button(image, '/region {}' \
.format(image))
self.send_message(message)
def set_region(self, event):
regions = self.get_project_data()['region']
message = Message(event).set_text('Select a region.')
for region in regions:
message.add_postback_button(region, '/name {}' \
.format(region))
self.send_message(message)
def set_name(self, event):
self.send_message('Input a hostname.')
data = self.get_user_data()
data['set_name'] = True
self.set_user_data(data)
def create_droplet(self, name, event):
d = DigitalOcean(self.api_key())
image = self.get_user_data()['image']
region = self.get_user_data()['region']
self.send_message(image, region)
droplet = d.create_droplet(name, region, image)
if not droplet:
self.send_message('Failed to create a Droplet.')
data = self.get_user_data()
data['set_name'] = False
self.set_user_data(data)
return
self.send_message('id: {} name: {} status: {}\n' \
'Created successfully'\
.format(droplet['droplet']['id'], \
droplet['droplet']['name'], droplet['droplet']['status']))
data = self.get_user_data()
data['set_name'] = False
self.set_user_data(data)
def api_key(self):
api_key = self.get_user_data()['api_key']
return api_key
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment