"""
This type stub file was generated by pyright.
"""

log = ...
class Driver:
	"""
	Contains the client, api and provides you with functions for
	login, logout and initializing a websocket connection.
	"""
	default_options = ...
	def __init__(self, options=..., client_cls=...) -> None:
		"""
		:param options: A dict with the values from `default_options`
		:type options: dict
		"""
		...
	
	def init_websocket(self, event_handler, websocket_cls=...): # -> AbstractEventLoop:
		"""
		Will initialize the websocket connection to the mattermost server.

		This should be run after login(), because the websocket needs to make
		an authentification.

		See https://api.mattermost.com/v4/#tag/WebSocket for which
		websocket events mattermost sends.

		Example of a really simple event_handler function

		.. code:: python

			async def my_event_handler(message):
				print(message)


		:param event_handler: The function to handle the websocket events. Takes one argument.
		:type event_handler: Function(message)
		:return: The event loop
		"""
		...
	
	def disconnect(self): # -> None:
		"""Disconnects the driver from the server, stopping the websocket event loop."""
		...
	
	def login(self):
		"""
		Logs the user in.

		The log in information is saved in the client
			- userid
			- username
			- cookies

		:return: The raw response from the request
		"""
		...
	
	def logout(self):
		"""
		Log the user out.

		:return: The JSON response from the server
		"""
		...
	
	@property
	def api(self): # -> dict[str, Users | Teams | Channels | Posts | Files | Preferences | Status | Emoji | Reactions | System | Webhooks | Commands | Compliance | Cluster | Brand | OAuth | Roles | SAML | LDAP | Elasticsearch | DataRetention | Bots | Opengraph | IntegrationActions]:
		"""
		.. deprecated:: 4.0.2

		Use the endpoints directly instead.

		:return: dictionary containing the endpoints
		:rtype: dict
		"""
		...
	
	@property
	def users(self): # -> Users:
		"""
		Api endpoint for users

		:return: Instance of :class:`~endpoints.users.Users`
		"""
		...
	
	@property
	def teams(self): # -> Teams:
		"""
		Api endpoint for teams

		:return: Instance of :class:`~endpoints.teams.Teams`
		"""
		...
	
	@property
	def channels(self): # -> Channels:
		"""
		Api endpoint for channels

		:return: Instance of :class:`~endpoints.channels.Channels`
		"""
		...
	
	@property
	def posts(self): # -> Posts:
		"""
		Api endpoint for posts

		:return: Instance of :class:`~endpoints.posts.Posts`
		"""
		...
	
	@property
	def files(self): # -> Files:
		"""
		Api endpoint for files

		:return: Instance of :class:`~endpoints.files.Files`
		"""
		...
	
	@property
	def preferences(self): # -> Preferences:
		"""
		Api endpoint for preferences

		:return: Instance of :class:`~endpoints.preferences.Preferences`
		"""
		...
	
	@property
	def emoji(self): # -> Emoji:
		"""
		Api endpoint for emoji

		:return: Instance of :class:`~endpoints.emoji.Emoji`
		"""
		...
	
	@property
	def reactions(self): # -> Reactions:
		"""
		Api endpoint for posts' reactions

		:return: Instance of :class:`~endpoints.reactions.Reactions`
		"""
		...
	
	@property
	def system(self): # -> System:
		"""
		Api endpoint for system

		:return: Instance of :class:`~endpoints.system.System`
		"""
		...
	
	@property
	def webhooks(self): # -> Webhooks:
		"""
		Api endpoint for webhooks

		:return: Instance of :class:`~endpoints.webhooks.Webhooks`
		"""
		...
	
	@property
	def compliance(self): # -> Compliance:
		"""
		Api endpoint for compliance

		:return: Instance of :class:`~endpoints.compliance.Compliance`
		"""
		...
	
	@property
	def cluster(self): # -> Cluster:
		"""
		Api endpoint for cluster

		:return: Instance of :class:`~endpoints.cluster.Cluster`
		"""
		...
	
	@property
	def brand(self): # -> Brand:
		"""
		Api endpoint for brand

		:return: Instance of :class:`~endpoints.brand.Brand`
		"""
		...
	
	@property
	def oauth(self): # -> OAuth:
		"""
		Api endpoint for oauth

		:return: Instance of :class:`~endpoints.oauth.OAuth`
		"""
		...
	
	@property
	def saml(self): # -> SAML:
		"""
		Api endpoint for saml

		:return: Instance of :class:`~endpoints.saml.SAML`
		"""
		...
	
	@property
	def ldap(self): # -> LDAP:
		"""
		Api endpoint for ldap

		:return: Instance of :class:`~endpoints.ldap.LDAP`
		"""
		...
	
	@property
	def elasticsearch(self): # -> Elasticsearch:
		"""
		Api endpoint for elasticsearch

		:return: Instance of :class:`~endpoints.elasticsearch.Elasticsearch`
		"""
		...
	
	@property
	def data_retention(self): # -> DataRetention:
		"""
		Api endpoint for data_retention

		:return: Instance of :class:`~endpoints.data_retention.DataRetention`
		"""
		...
	
	@property
	def status(self): # -> Status:
		"""
		Api endpoint for status

		:return: Instance of :class:`~endpoints.status.Status`
		"""
		...
	
	@property
	def commands(self): # -> Commands:
		"""
		Api endpoint for commands

		:return: Instance of :class:`~endpoints.commands.Commands`
		"""
		...
	
	@property
	def roles(self): # -> Roles:
		"""
		Api endpoint for roles

		:return: Instance of :class:`~endpoints.roles.Roles`
		"""
		...
	
	@property
	def opengraph(self): # -> Opengraph:
		"""
		Api endpoint for opengraph

		:return: Instance of :class:`~endpoints.opengraph.Opengraph`
		"""
		...
	
	@property
	def integration_actions(self): # -> IntegrationActions:
		"""
		Api endpoint for integration actions

		:return: Instance of :class:`~endpoints.integration_actions.IntegrationActions`
		"""
		...
	


