Interactive bots: Create a thesaurus bot.
This commit is contained in:
		
							parent
							
								
									72486f6371
								
							
						
					
					
						commit
						0e26a0bb3b
					
				
					 1 changed files with 90 additions and 0 deletions
				
			
		
							
								
								
									
										90
									
								
								contrib_bots/lib/thesaurus.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										90
									
								
								contrib_bots/lib/thesaurus.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,90 @@ | |||
| # See zulip/contrib_bots/lib/readme.md for instructions on running this code. | ||||
| from __future__ import print_function | ||||
| import sys | ||||
| import logging | ||||
| try: | ||||
|     from PyDictionary import PyDictionary as Dictionary | ||||
| except ImportError: | ||||
|     logging.error("Dependency Missing!") | ||||
|     sys.exit(0) | ||||
| 
 | ||||
| #Uses Python's Dictionary module | ||||
| #  pip install PyDictionary | ||||
| 
 | ||||
| def get_clean_response(m, method): | ||||
|     try: | ||||
|         response = method(m) | ||||
|     except Exception as e: | ||||
|         logging.exception(e) | ||||
|         return e | ||||
|     if isinstance(response, str): | ||||
|         return response | ||||
|     elif isinstance(response, list): | ||||
|         return ', '.join(response) | ||||
| 
 | ||||
| def get_thesaurus_result(original_content): | ||||
|     search_keyword = original_content.strip().split(' ', 1)[1] | ||||
|     if search_keyword == 'help': | ||||
|         help_message = "To use this bot, start messages with either \ | ||||
|                         @synonym (to get the synonyms of a given word) \ | ||||
|                         or @antonym (to get the antonyms of a given word). \ | ||||
|                         Phrases are not accepted so only use single words \ | ||||
|                         to search. For example you could search '@synonym hello' \ | ||||
|                         or '@antonym goodbye'." | ||||
|         return help_message | ||||
|     elif original_content.startswith('@synonym'): | ||||
|         result = get_clean_response(search_keyword, method = Dictionary.synonym) | ||||
|         return result | ||||
|     elif original_content.startswith('@antonym'): | ||||
|         result = get_clean_response(search_keyword, method = Dictionary.antonym) | ||||
|         return result | ||||
| 
 | ||||
| class ThesaurusHandler(object): | ||||
|     ''' | ||||
|     This plugin allows users to enter a word in zulip | ||||
|     and get synonyms, and antonyms, for that word sent | ||||
|     back to the context (stream or private) in which | ||||
|     it was sent. It looks for messages starting with | ||||
|     @synonym or @antonym. | ||||
|     ''' | ||||
| 
 | ||||
|     def usage(self): | ||||
|         return ''' | ||||
|             This plugin will allow users to get both synonyms | ||||
|             and antonyms for a given word from zulip. To use this | ||||
|             plugin, users need to install the PyDictionary module | ||||
|             using 'pip install PyDictionary'.Use '@synonym help' or | ||||
|             '@antonym help' for more usage information. Users should | ||||
|             preface messages with @synonym or @antonym. | ||||
|             ''' | ||||
| 
 | ||||
|     def triage_message(self, message, client): | ||||
|         # return True if we want to (possibly) respond to this message | ||||
| 
 | ||||
|         original_content = message['content'] | ||||
| 
 | ||||
|         is_thesaurus = (original_content.startswith('@synonym') or | ||||
|                         original_content.startswith('@antonym')) | ||||
| 
 | ||||
|         return is_thesaurus | ||||
| 
 | ||||
|     def handle_message(self, message, client, state_handler): | ||||
|         original_content = message['content'] | ||||
|         original_sender = message['sender_email'] | ||||
|         new_content = get_thesaurus_result(original_content) | ||||
| 
 | ||||
|         if message['type'] == 'private': | ||||
|             client.send_message(dict( | ||||
|                 type='private', | ||||
|                 to=original_sender, | ||||
|                 content=new_content, | ||||
|             )) | ||||
|         else: | ||||
|             client.send_message(dict( | ||||
|                 type=message['type'], | ||||
|                 to=message['display_recipient'], | ||||
|                 subject=message['subject'], | ||||
|                 content=new_content, | ||||
|             )) | ||||
| 
 | ||||
| handler_class = ThesaurusHandler | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 royabouhamad
						royabouhamad