mirror of
				https://github.com/eternnoir/pyTelegramBotAPI.git
				synced 2023-08-10 21:12:57 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			66 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			66 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| from telebot.asyncio_storage.base_storage import StateStorageBase, StateContext
 | |
| 
 | |
| class StateMemoryStorage(StateStorageBase):
 | |
|     def __init__(self) -> None:
 | |
|         self.data = {}
 | |
|         #
 | |
|         # {chat_id: {user_id: {'state': None, 'data': {}}, ...}, ...}
 | |
|     
 | |
|     
 | |
|     async def set_state(self, chat_id, user_id, state):
 | |
|         if isinstance(state, object):
 | |
|             state = state.name
 | |
|         if chat_id in self.data:
 | |
|             if user_id in self.data[chat_id]:
 | |
|                 self.data[chat_id][user_id]['state'] = state
 | |
|                 return True
 | |
|             else:
 | |
|                 self.data[chat_id][user_id] = {'state': state, 'data': {}}
 | |
|                 return True
 | |
|         self.data[chat_id] = {user_id: {'state': state, 'data': {}}}
 | |
|         return True
 | |
|     
 | |
|     async def delete_state(self, chat_id, user_id):
 | |
|         if self.data.get(chat_id):
 | |
|             if self.data[chat_id].get(user_id):
 | |
|                 del self.data[chat_id][user_id]
 | |
|                 if chat_id == user_id:
 | |
|                     del self.data[chat_id]
 | |
|                     
 | |
|                 return True
 | |
| 
 | |
|         return False
 | |
| 
 | |
|     
 | |
|     async def get_state(self, chat_id, user_id):
 | |
|         if self.data.get(chat_id):
 | |
|             if self.data[chat_id].get(user_id):
 | |
|                 return self.data[chat_id][user_id]['state']
 | |
| 
 | |
|         return None
 | |
|     async def get_data(self, chat_id, user_id):
 | |
|         if self.data.get(chat_id):
 | |
|             if self.data[chat_id].get(user_id):
 | |
|                 return self.data[chat_id][user_id]['data']
 | |
|         
 | |
|         return None
 | |
| 
 | |
|     async def reset_data(self, chat_id, user_id):
 | |
|         if self.data.get(chat_id):
 | |
|             if self.data[chat_id].get(user_id):
 | |
|                 self.data[chat_id][user_id]['data'] = {}
 | |
|                 return True
 | |
|         return False
 | |
| 
 | |
|     async def set_data(self, chat_id, user_id, key, value):
 | |
|         if self.data.get(chat_id):
 | |
|             if self.data[chat_id].get(user_id):
 | |
|                 self.data[chat_id][user_id]['data'][key] = value
 | |
|                 return True
 | |
|         raise RuntimeError('chat_id {} and user_id {} does not exist'.format(chat_id, user_id))
 | |
| 
 | |
|     def get_interactive_data(self, chat_id, user_id):
 | |
|         return StateContext(self, chat_id, user_id)
 | |
| 
 | |
|     async def save(self, chat_id, user_id, data):
 | |
|         self.data[chat_id][user_id]['data'] = data  | 
