Last active
August 3, 2017 06:08
-
-
Save toracle/8a084c0c1c71b933053e0a572e639042 to your computer and use it in GitHub Desktop.
bothub-tutorial-digitalocean-3
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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