diff --git a/docs/api-docs/slack_sdk/models/blocks/block_elements.html b/docs/api-docs/slack_sdk/models/blocks/block_elements.html index 40e19469c..c2e3dcbf1 100644 --- a/docs/api-docs/slack_sdk/models/blocks/block_elements.html +++ b/docs/api-docs/slack_sdk/models/blocks/block_elements.html @@ -31,7 +31,7 @@
slack_sdk.models.blocks.block_elements
slack_sdk.models.blocks.block_elements
Module slack_sdk.models.blocks.block_elements
Module slack_sdk.models.blocks.block_elements
Module slack_sdk.models.blocks.block_elements
Module slack_sdk.models.blocks.block_elements
Classes
if "type" in block_element:
d = copy.copy(block_element)
t = d.pop("type")
+ for subclass in cls._get_sub_block_elements():
+ if t == subclass.type: # type: ignore
+ return subclass(**d)
if t == PlainTextObject.type: # skipcq: PYL-R1705
return PlainTextObject(**d)
elif t == MarkdownTextObject.type:
return MarkdownTextObject(**d)
- elif t == ImageElement.type:
- return ImageElement(**d)
- elif t == ButtonElement.type:
- return ButtonElement(**d)
- elif t == StaticSelectElement.type:
- return StaticSelectElement(**d)
- elif t == StaticMultiSelectElement.type:
- return StaticMultiSelectElement(**d)
- elif t == ExternalDataSelectElement.type:
- return ExternalDataSelectElement(**d)
- elif t == ExternalDataMultiSelectElement.type:
- return ExternalDataMultiSelectElement(**d)
- elif t == UserSelectElement.type:
- return UserSelectElement(**d)
- elif t == UserMultiSelectElement.type:
- return UserMultiSelectElement(**d)
- elif t == ConversationSelectElement.type:
- return ConversationSelectElement(**d)
- elif t == ConversationMultiSelectElement.type:
- return ConversationMultiSelectElement(**d)
- elif t == ChannelSelectElement.type:
- return ChannelSelectElement(**d)
- elif t == ChannelMultiSelectElement.type:
- return ChannelMultiSelectElement(**d)
- elif t == PlainTextInputElement.type:
- return PlainTextInputElement(**d)
- elif t == RadioButtonsElement.type:
- return RadioButtonsElement(**d)
- elif t == CheckboxesElement.type:
- return CheckboxesElement(**d)
- elif t == OverflowMenuElement.type:
- return OverflowMenuElement(**d)
- elif t == DatePickerElement.type:
- return DatePickerElement(**d)
- elif t == TimePickerElement.type:
- return TimePickerElement(**d)
- else:
- cls.logger.warning(f"Unknown element detected and skipped ({block_element})")
- return None
- else:
- cls.logger.warning(f"Unknown element detected and skipped ({block_element})")
- return None
elif isinstance(block_element, (TextObject, BlockElement)):
return block_element
- else:
- cls.logger.warning(f"Unknown element detected and skipped ({block_element})")
- return None
+ cls.logger.warning(f"Unknown element detected and skipped ({block_element})")
+ return None
@classmethod
def parse_all(
cls, block_elements: Sequence[Union[dict, "BlockElement", TextObject]]
) -> List[Union["BlockElement", TextObject]]:
- return [cls.parse(e) for e in block_elements or []]
+ return [cls.parse(e) for e in block_elements or []]
+
+ @classmethod
+ def _get_sub_block_elements(cls: Type["BlockElement"]) -> Iterator[Type["BlockElement"]]:
+ for subclass in cls.__subclasses__():
+ if hasattr(subclass, "type"):
+ yield subclass
+ yield from subclass._get_sub_block_elements()
@@ -2800,41 +2931,33 @@ Inherited members
-class ExternalDataMultiSelectElement
-(*, placeholder: Union[str, dict, TextObject, ForwardRef(None)] = None, action_id: Optional[str] = None, min_query_length: Optional[int] = None, initial_options: Optional[Sequence[Union[dict, Option]]] = None, confirm: Union[dict, ConfirmObject, ForwardRef(None)] = None, max_selected_items: Optional[int] = None, focus_on_load: Optional[bool] = None, **others: dict)
+
+class DateTimePickerElement
+(*, action_id: Optional[str] = None, initial_date_time: Optional[int] = None, confirm: Union[dict, ConfirmObject, ForwardRef(None)] = None, focus_on_load: Optional[bool] = None, **others: dict)
Block Elements are things that exists inside of your Blocks.
https://api.slack.com/reference/block-kit/block-elements
-This select menu will load its options from an external data source, allowing
-for a dynamic list of options.
-https://api.slack.com/reference/block-kit/block-elements#external_multi_select
+An element that allows the selection of a time of day formatted as a UNIX timestamp.
+On desktop clients, this time picker will take the form of a dropdown list and the
+date picker will take the form of a dropdown calendar. Both options will have free-text
+entry for precise choices. On mobile clients, the time picker and date
+picker will use native UIs.
+https://api.slack.com/reference/block-kit/block-elements#datetimepicker
Args
-placeholder
: required
-- A plain_text only text object that defines the placeholder text shown on the menu.
-Maximum length for the text in this field is 150 characters.
action_id
: required
-- An identifier for the action triggered when a menu option is selected.
-You can use this when you receive an interaction payload to identify the source of the action.
-Should be unique among all other action_ids in the containing block.
-Maximum length for this field is 255 characters.
-min_query_length
-- When the typeahead field is used, a request will be sent on every character change.
-If you prefer fewer requests or more fully ideated queries,
-use the min_query_length attribute to tell Slack
-the fewest number of typed characters required before dispatch.
-The default value is 3
-initial_options
-- An array of option objects that exactly match one or more of the options
-within options or option_groups. These options will be selected when the menu initially loads.
+- An identifier for the action triggered when a time is selected. You can use this
+when you receive an interaction payload to identify the source of the action. Should be unique among
+all other action_ids in the containing block. Maximum length for this field is 255 characters.
+initial_date_time
+- The initial date and time that is selected when the element is loaded, represented as
+a UNIX timestamp in seconds. This should be in the format of 10 digits, for example 1628633820
+represents the date and time August 10th, 2021 at 03:17pm PST.
+and mm is minutes with leading zeros (00 to 59), for example 22:25 for 10:25pm.
confirm
-- A confirm object that defines an optional confirmation dialog that appears
-before the multi-select choices are submitted.
-max_selected_items
-- Specifies the maximum number of items that can be selected in the menu.
-Minimum number is 1.
+- A confirm object that defines an optional confirmation dialog
+that appears after a time is selected.
focus_on_load
- Indicates whether the element will be set to auto focus within the view object.
Only one element can be set to true. Defaults to false.
@@ -2843,55 +2966,291 @@ Args
Expand source code
-class ExternalDataMultiSelectElement(InputInteractiveElement):
- type = "multi_external_select"
+class DateTimePickerElement(InputInteractiveElement):
+ type = "datetimepicker"
@property
def attributes(self) -> Set[str]:
- return super().attributes.union({"min_query_length", "initial_options", "max_selected_items"})
+ return super().attributes.union({"initial_date_time"})
def __init__(
self,
*,
- placeholder: Optional[Union[str, dict, TextObject]] = None,
action_id: Optional[str] = None,
- min_query_length: Optional[int] = None,
- initial_options: Optional[Sequence[Union[dict, Option]]] = None,
+ initial_date_time: Optional[int] = None,
confirm: Optional[Union[dict, ConfirmObject]] = None,
- max_selected_items: Optional[int] = None,
focus_on_load: Optional[bool] = None,
**others: dict,
):
"""
- This select menu will load its options from an external data source, allowing
- for a dynamic list of options.
- https://api.slack.com/reference/block-kit/block-elements#external_multi_select
+ An element that allows the selection of a time of day formatted as a UNIX timestamp.
+ On desktop clients, this time picker will take the form of a dropdown list and the
+ date picker will take the form of a dropdown calendar. Both options will have free-text
+ entry for precise choices. On mobile clients, the time picker and date
+ picker will use native UIs.
+ https://api.slack.com/reference/block-kit/block-elements#datetimepicker
Args:
- placeholder (required): A plain_text only text object that defines the placeholder text shown on the menu.
- Maximum length for the text in this field is 150 characters.
- action_id (required): An identifier for the action triggered when a menu option is selected.
- You can use this when you receive an interaction payload to identify the source of the action.
- Should be unique among all other action_ids in the containing block.
- Maximum length for this field is 255 characters.
- min_query_length: When the typeahead field is used, a request will be sent on every character change.
- If you prefer fewer requests or more fully ideated queries,
- use the min_query_length attribute to tell Slack
- the fewest number of typed characters required before dispatch.
- The default value is 3
- initial_options: An array of option objects that exactly match one or more of the options
- within options or option_groups. These options will be selected when the menu initially loads.
- confirm: A confirm object that defines an optional confirmation dialog that appears
- before the multi-select choices are submitted.
- max_selected_items: Specifies the maximum number of items that can be selected in the menu.
- Minimum number is 1.
+ action_id (required): An identifier for the action triggered when a time is selected. You can use this
+ when you receive an interaction payload to identify the source of the action. Should be unique among
+ all other action_ids in the containing block. Maximum length for this field is 255 characters.
+ initial_date_time: The initial date and time that is selected when the element is loaded, represented as
+ a UNIX timestamp in seconds. This should be in the format of 10 digits, for example 1628633820
+ represents the date and time August 10th, 2021 at 03:17pm PST.
+ and mm is minutes with leading zeros (00 to 59), for example 22:25 for 10:25pm.
+ confirm: A confirm object that defines an optional confirmation dialog
+ that appears after a time is selected.
focus_on_load: Indicates whether the element will be set to auto focus within the view object.
Only one element can be set to true. Defaults to false.
"""
super().__init__(
type=self.type,
action_id=action_id,
- placeholder=TextObject.parse(placeholder, PlainTextObject.type),
+ confirm=ConfirmObject.parse(confirm),
+ focus_on_load=focus_on_load,
+ )
+ show_unknown_key_warning(self, others)
+
+ self.initial_date_time = initial_date_time
+
+ @JsonValidator("initial_date_time attribute must be between 0 and 99999999 seconds")
+ def _validate_initial_date_time_valid(self) -> bool:
+ return self.initial_date_time is None or (0 <= self.initial_date_time <= 9999999999)
+
+Ancestors
+
+Class variables
+
+var type
+-
+
+
+
+Inherited members
+
+InputInteractiveElement
:
+
+
+InteractiveElement
:
+
+attributes
+
+
+
+
+
+class EmailInputElement
+(*, action_id: Optional[str] = None, initial_value: Optional[str] = None, dispatch_action_config: Union[dict, DispatchActionConfig, ForwardRef(None)] = None, focus_on_load: Optional[bool] = None, placeholder: Union[str, dict, TextObject, ForwardRef(None)] = None, **others: dict)
+
+-
+
Block Elements are things that exists inside of your Blocks.
+https://api.slack.com/reference/block-kit/block-elements
+https://api.slack.com/reference/block-kit/block-elements#email
+Args
+
+action_id
: required
+- An identifier for the input value when the parent modal is submitted.
+You can use this when you receive a view_submission payload to identify the value of the input element.
+Should be unique among all other action_ids in the containing block.
+Maximum length for this field is 255 characters.
+initial_value
+- The initial value in the email input when it is loaded.
+dispatch_action_config
+- dispatch configuration object that determines when during
+text input the element returns a block_actions payload.
+focus_on_load
+- Indicates whether the element will be set to auto focus within the view object.
+Only one element can be set to true. Defaults to false.
+placeholder
+- A plain_text only text object that defines the placeholder text shown in the
+email input. Maximum length for the text in this field is 150 characters.
+
+
+
+Expand source code
+
+class EmailInputElement(InputInteractiveElement):
+ type = "email_text_input"
+
+ @property
+ def attributes(self) -> Set[str]:
+ return super().attributes.union(
+ {
+ "initial_value",
+ "dispatch_action_config",
+ }
+ )
+
+ def __init__(
+ self,
+ *,
+ action_id: Optional[str] = None,
+ initial_value: Optional[str] = None,
+ dispatch_action_config: Optional[Union[dict, DispatchActionConfig]] = None,
+ focus_on_load: Optional[bool] = None,
+ placeholder: Optional[Union[str, dict, TextObject]] = None,
+ **others: dict,
+ ):
+ """
+ https://api.slack.com/reference/block-kit/block-elements#email
+
+ Args:
+ action_id (required): An identifier for the input value when the parent modal is submitted.
+ You can use this when you receive a view_submission payload to identify the value of the input element.
+ Should be unique among all other action_ids in the containing block.
+ Maximum length for this field is 255 characters.
+ initial_value: The initial value in the email input when it is loaded.
+ dispatch_action_config: dispatch configuration object that determines when during
+ text input the element returns a block_actions payload.
+ focus_on_load: Indicates whether the element will be set to auto focus within the view object.
+ Only one element can be set to true. Defaults to false.
+ placeholder: A plain_text only text object that defines the placeholder text shown in the
+ email input. Maximum length for the text in this field is 150 characters.
+ """
+ super().__init__(
+ type=self.type,
+ action_id=action_id,
+ placeholder=TextObject.parse(placeholder, PlainTextObject.type),
+ focus_on_load=focus_on_load,
+ )
+ show_unknown_key_warning(self, others)
+
+ self.initial_value = initial_value
+ self.dispatch_action_config = dispatch_action_config
+
+Ancestors
+
+Class variables
+
+var type
+-
+
+
+
+Inherited members
+
+InputInteractiveElement
:
+
+
+InteractiveElement
:
+
+attributes
+
+
+
+
+
+class ExternalDataMultiSelectElement
+(*, placeholder: Union[str, dict, TextObject, ForwardRef(None)] = None, action_id: Optional[str] = None, min_query_length: Optional[int] = None, initial_options: Optional[Sequence[Union[dict, Option]]] = None, confirm: Union[dict, ConfirmObject, ForwardRef(None)] = None, max_selected_items: Optional[int] = None, focus_on_load: Optional[bool] = None, **others: dict)
+
+-
+
Block Elements are things that exists inside of your Blocks.
+https://api.slack.com/reference/block-kit/block-elements
+This select menu will load its options from an external data source, allowing
+for a dynamic list of options.
+https://api.slack.com/reference/block-kit/block-elements#external_multi_select
+Args
+
+placeholder
: required
+- A plain_text only text object that defines the placeholder text shown on the menu.
+Maximum length for the text in this field is 150 characters.
+action_id
: required
+- An identifier for the action triggered when a menu option is selected.
+You can use this when you receive an interaction payload to identify the source of the action.
+Should be unique among all other action_ids in the containing block.
+Maximum length for this field is 255 characters.
+min_query_length
+- When the typeahead field is used, a request will be sent on every character change.
+If you prefer fewer requests or more fully ideated queries,
+use the min_query_length attribute to tell Slack
+the fewest number of typed characters required before dispatch.
+The default value is 3
+initial_options
+- An array of option objects that exactly match one or more of the options
+within options or option_groups. These options will be selected when the menu initially loads.
+confirm
+- A confirm object that defines an optional confirmation dialog that appears
+before the multi-select choices are submitted.
+max_selected_items
+- Specifies the maximum number of items that can be selected in the menu.
+Minimum number is 1.
+focus_on_load
+- Indicates whether the element will be set to auto focus within the view object.
+Only one element can be set to true. Defaults to false.
+
+
+
+Expand source code
+
+class ExternalDataMultiSelectElement(InputInteractiveElement):
+ type = "multi_external_select"
+
+ @property
+ def attributes(self) -> Set[str]:
+ return super().attributes.union({"min_query_length", "initial_options", "max_selected_items"})
+
+ def __init__(
+ self,
+ *,
+ placeholder: Optional[Union[str, dict, TextObject]] = None,
+ action_id: Optional[str] = None,
+ min_query_length: Optional[int] = None,
+ initial_options: Optional[Sequence[Union[dict, Option]]] = None,
+ confirm: Optional[Union[dict, ConfirmObject]] = None,
+ max_selected_items: Optional[int] = None,
+ focus_on_load: Optional[bool] = None,
+ **others: dict,
+ ):
+ """
+ This select menu will load its options from an external data source, allowing
+ for a dynamic list of options.
+ https://api.slack.com/reference/block-kit/block-elements#external_multi_select
+
+ Args:
+ placeholder (required): A plain_text only text object that defines the placeholder text shown on the menu.
+ Maximum length for the text in this field is 150 characters.
+ action_id (required): An identifier for the action triggered when a menu option is selected.
+ You can use this when you receive an interaction payload to identify the source of the action.
+ Should be unique among all other action_ids in the containing block.
+ Maximum length for this field is 255 characters.
+ min_query_length: When the typeahead field is used, a request will be sent on every character change.
+ If you prefer fewer requests or more fully ideated queries,
+ use the min_query_length attribute to tell Slack
+ the fewest number of typed characters required before dispatch.
+ The default value is 3
+ initial_options: An array of option objects that exactly match one or more of the options
+ within options or option_groups. These options will be selected when the menu initially loads.
+ confirm: A confirm object that defines an optional confirmation dialog that appears
+ before the multi-select choices are submitted.
+ max_selected_items: Specifies the maximum number of items that can be selected in the menu.
+ Minimum number is 1.
+ focus_on_load: Indicates whether the element will be set to auto focus within the view object.
+ Only one element can be set to true. Defaults to false.
+ """
+ super().__init__(
+ type=self.type,
+ action_id=action_id,
+ placeholder=TextObject.parse(placeholder, PlainTextObject.type),
confirm=ConfirmObject.parse(confirm),
focus_on_load=focus_on_load,
)
@@ -3241,14 +3600,18 @@ Subclasses
- ConversationMultiSelectElement
- ConversationSelectElement
- DatePickerElement
+- DateTimePickerElement
+- EmailInputElement
- ExternalDataMultiSelectElement
- ExternalDataSelectElement
+- NumberInputElement
- PlainTextInputElement
- RadioButtonsElement
- SelectElement
- StaticMultiSelectElement
- StaticSelectElement
- TimePickerElement
+- UrlInputElement
- UserMultiSelectElement
- UserSelectElement
@@ -3482,6 +3845,137 @@ Inherited members
+
+class NumberInputElement
+(*, action_id: Optional[str] = None, is_decimal_allowed: Optional[bool] = False, initial_value: Union[int, float, str, ForwardRef(None)] = None, min_value: Union[int, float, str, ForwardRef(None)] = None, max_value: Union[int, float, str, ForwardRef(None)] = None, dispatch_action_config: Union[dict, DispatchActionConfig, ForwardRef(None)] = None, focus_on_load: Optional[bool] = None, placeholder: Union[str, dict, TextObject, ForwardRef(None)] = None, **others: dict)
+
+-
+
Block Elements are things that exists inside of your Blocks.
+https://api.slack.com/reference/block-kit/block-elements
+https://api.slack.com/reference/block-kit/block-elements#number
+Args
+
+action_id
: required
+- An identifier for the input value when the parent modal is submitted.
+You can use this when you receive a view_submission payload to identify the value of the input element.
+Should be unique among all other action_ids in the containing block.
+Maximum length for this field is 255 characters.
+is_decimal_allowed
: required
+- Decimal numbers are allowed if is_decimal_allowed= true, set the value to
+false otherwise.
+initial_value
+- The initial value in the number input when it is loaded.
+min_value
+- The minimum value, cannot be greater than max_value.
+max_value
+- The maximum value, cannot be less than min_value.
+dispatch_action_config
+- A dispatch configuration object that determines when
+during text input the element returns a block_actions payload.
+focus_on_load
+- Indicates whether the element will be set to auto focus within the view object.
+Only one element can be set to true. Defaults to false.
+placeholder
+- A plain_text only text object that defines the placeholder text shown
+in the plain-text input. Maximum length for the text in this field is 150 characters.
+
+
+
+Expand source code
+
+class NumberInputElement(InputInteractiveElement):
+ type = "number_input"
+
+ @property
+ def attributes(self) -> Set[str]:
+ return super().attributes.union(
+ {
+ "initial_value",
+ "is_decimal_allowed",
+ "min_value",
+ "max_value",
+ "dispatch_action_config",
+ }
+ )
+
+ def __init__(
+ self,
+ *,
+ action_id: Optional[str] = None,
+ is_decimal_allowed: Optional[bool] = False,
+ initial_value: Optional[Union[int, float, str]] = None,
+ min_value: Optional[Union[int, float, str]] = None,
+ max_value: Optional[Union[int, float, str]] = None,
+ dispatch_action_config: Optional[Union[dict, DispatchActionConfig]] = None,
+ focus_on_load: Optional[bool] = None,
+ placeholder: Optional[Union[str, dict, TextObject]] = None,
+ **others: dict,
+ ):
+ """
+ https://api.slack.com/reference/block-kit/block-elements#number
+
+ Args:
+ action_id (required): An identifier for the input value when the parent modal is submitted.
+ You can use this when you receive a view_submission payload to identify the value of the input element.
+ Should be unique among all other action_ids in the containing block.
+ Maximum length for this field is 255 characters.
+ is_decimal_allowed (required): Decimal numbers are allowed if is_decimal_allowed= true, set the value to
+ false otherwise.
+ initial_value: The initial value in the number input when it is loaded.
+ min_value: The minimum value, cannot be greater than max_value.
+ max_value: The maximum value, cannot be less than min_value.
+ dispatch_action_config: A dispatch configuration object that determines when
+ during text input the element returns a block_actions payload.
+ focus_on_load: Indicates whether the element will be set to auto focus within the view object.
+ Only one element can be set to true. Defaults to false.
+ placeholder: A plain_text only text object that defines the placeholder text shown
+ in the plain-text input. Maximum length for the text in this field is 150 characters.
+ """
+ super().__init__(
+ type=self.type,
+ action_id=action_id,
+ placeholder=TextObject.parse(placeholder, PlainTextObject.type),
+ focus_on_load=focus_on_load,
+ )
+ show_unknown_key_warning(self, others)
+
+ self.initial_value = str(initial_value) if initial_value is not None else None
+ self.is_decimal_allowed = is_decimal_allowed
+ self.min_value = str(min_value) if min_value is not None else None
+ self.max_value = str(max_value) if max_value is not None else None
+ self.dispatch_action_config = dispatch_action_config
+
+Ancestors
+
+Class variables
+
+var type
+-
+
+
+
+Inherited members
+
+InputInteractiveElement
:
+
+
+InteractiveElement
:
+
+attributes
+
+
+
+
class OverflowMenuElement
(*, action_id: Optional[str] = None, options: Sequence[Option], confirm: Union[dict, ConfirmObject, ForwardRef(None)] = None, **others: dict)
@@ -4444,6 +4938,121 @@ Inherited members
+
+class UrlInputElement
+(*, action_id: Optional[str] = None, initial_value: Optional[str] = None, dispatch_action_config: Union[dict, DispatchActionConfig, ForwardRef(None)] = None, focus_on_load: Optional[bool] = None, placeholder: Union[str, dict, TextObject, ForwardRef(None)] = None, **others: dict)
+
+-
+
Block Elements are things that exists inside of your Blocks.
+https://api.slack.com/reference/block-kit/block-elements
+A URL input element, similar to the Plain-text input element,
+creates a single line field where a user can enter URL-encoded data.
+https://api.slack.com/reference/block-kit/block-elements#url
+Args
+
+action_id
: required
+- An identifier for the input value when the parent modal is submitted.
+You can use this when you receive a view_submission payload to identify the value of the input element.
+Should be unique among all other action_ids in the containing block.
+Maximum length for this field is 255 characters.
+initial_value
+- The initial value in the URL input when it is loaded.
+dispatch_action_config
+- A dispatch configuration object that determines when during text input
+the element returns a block_actions payload.
+focus_on_load
+- Indicates whether the element will be set to auto focus within the view object.
+Only one element can be set to true. Defaults to false.
+placeholder
+- A plain_text only text object that defines the placeholder text shown in the URL input.
+Maximum length for the text in this field is 150 characters.
+
+
+
+Expand source code
+
+class UrlInputElement(InputInteractiveElement):
+ type = "url_text_input"
+
+ @property
+ def attributes(self) -> Set[str]:
+ return super().attributes.union(
+ {
+ "initial_value",
+ "dispatch_action_config",
+ }
+ )
+
+ def __init__(
+ self,
+ *,
+ action_id: Optional[str] = None,
+ initial_value: Optional[str] = None,
+ dispatch_action_config: Optional[Union[dict, DispatchActionConfig]] = None,
+ focus_on_load: Optional[bool] = None,
+ placeholder: Optional[Union[str, dict, TextObject]] = None,
+ **others: dict,
+ ):
+ """
+ A URL input element, similar to the Plain-text input element,
+ creates a single line field where a user can enter URL-encoded data.
+ https://api.slack.com/reference/block-kit/block-elements#url
+
+ Args:
+ action_id (required): An identifier for the input value when the parent modal is submitted.
+ You can use this when you receive a view_submission payload to identify the value of the input element.
+ Should be unique among all other action_ids in the containing block.
+ Maximum length for this field is 255 characters.
+ initial_value: The initial value in the URL input when it is loaded.
+ dispatch_action_config: A dispatch configuration object that determines when during text input
+ the element returns a block_actions payload.
+ focus_on_load: Indicates whether the element will be set to auto focus within the view object.
+ Only one element can be set to true. Defaults to false.
+ placeholder: A plain_text only text object that defines the placeholder text shown in the URL input.
+ Maximum length for the text in this field is 150 characters.
+ """
+ super().__init__(
+ type=self.type,
+ action_id=action_id,
+ placeholder=TextObject.parse(placeholder, PlainTextObject.type),
+ focus_on_load=focus_on_load,
+ )
+ show_unknown_key_warning(self, others)
+
+ self.initial_value = initial_value
+ self.dispatch_action_config = dispatch_action_config
+
+Ancestors
+
+Class variables
+
+var type
+-
+
+
+
+Inherited members
+
+InputInteractiveElement
:
+
+
+InteractiveElement
:
+
+attributes
+
+
+
+
class UserMultiSelectElement
(*, action_id: Optional[str] = None, placeholder: Union[str, dict, TextObject, ForwardRef(None)] = None, initial_users: Optional[Sequence[str]] = None, confirm: Union[dict, ConfirmObject, ForwardRef(None)] = None, max_selected_items: Optional[int] = None, focus_on_load: Optional[bool] = None, **others: dict)
@@ -4749,6 +5358,18 @@
-
+
DateTimePickerElement
+
+type
+
+
+-
+
EmailInputElement
+
+type
+
+
+-
ExternalDataMultiSelectElement
-
+
NumberInputElement
+
+type
+
+
+-
OverflowMenuElement
options_max_length
@@ -4837,6 +5464,12 @@
-
+
UrlInputElement
+
+type
+
+
+-
UserMultiSelectElement
type
diff --git a/docs/api-docs/slack_sdk/models/blocks/index.html b/docs/api-docs/slack_sdk/models/blocks/index.html
index 9c7e7b7c5..1aa0a7a89 100644
--- a/docs/api-docs/slack_sdk/models/blocks/index.html
+++ b/docs/api-docs/slack_sdk/models/blocks/index.html
@@ -59,6 +59,7 @@ Module slack_sdk.models.blocks
from .block_elements import ConversationSelectElement
from .block_elements import DatePickerElement
from .block_elements import TimePickerElement
+from .block_elements import DateTimePickerElement
from .block_elements import ExternalDataMultiSelectElement
from .block_elements import ExternalDataSelectElement
from .block_elements import ImageElement
@@ -67,6 +68,9 @@ Module slack_sdk.models.blocks
from .block_elements import LinkButtonElement
from .block_elements import OverflowMenuElement
from .block_elements import PlainTextInputElement
+from .block_elements import EmailInputElement
+from .block_elements import UrlInputElement
+from .block_elements import NumberInputElement
from .block_elements import RadioButtonsElement
from .block_elements import SelectElement
from .block_elements import StaticMultiSelectElement
@@ -104,6 +108,7 @@ Module slack_sdk.models.blocks
"ConversationSelectElement",
"DatePickerElement",
"TimePickerElement",
+ "DateTimePickerElement",
"ExternalDataMultiSelectElement",
"ExternalDataSelectElement",
"ImageElement",
@@ -112,6 +117,9 @@ Module slack_sdk.models.blocks
"LinkButtonElement",
"OverflowMenuElement",
"PlainTextInputElement",
+ "EmailInputElement",
+ "UrlInputElement",
+ "NumberInputElement",
"RadioButtonsElement",
"SelectElement",
"StaticMultiSelectElement",
@@ -522,63 +530,30 @@ Inherited members
if "type" in block_element:
d = copy.copy(block_element)
t = d.pop("type")
+ for subclass in cls._get_sub_block_elements():
+ if t == subclass.type: # type: ignore
+ return subclass(**d)
if t == PlainTextObject.type: # skipcq: PYL-R1705
return PlainTextObject(**d)
elif t == MarkdownTextObject.type:
return MarkdownTextObject(**d)
- elif t == ImageElement.type:
- return ImageElement(**d)
- elif t == ButtonElement.type:
- return ButtonElement(**d)
- elif t == StaticSelectElement.type:
- return StaticSelectElement(**d)
- elif t == StaticMultiSelectElement.type:
- return StaticMultiSelectElement(**d)
- elif t == ExternalDataSelectElement.type:
- return ExternalDataSelectElement(**d)
- elif t == ExternalDataMultiSelectElement.type:
- return ExternalDataMultiSelectElement(**d)
- elif t == UserSelectElement.type:
- return UserSelectElement(**d)
- elif t == UserMultiSelectElement.type:
- return UserMultiSelectElement(**d)
- elif t == ConversationSelectElement.type:
- return ConversationSelectElement(**d)
- elif t == ConversationMultiSelectElement.type:
- return ConversationMultiSelectElement(**d)
- elif t == ChannelSelectElement.type:
- return ChannelSelectElement(**d)
- elif t == ChannelMultiSelectElement.type:
- return ChannelMultiSelectElement(**d)
- elif t == PlainTextInputElement.type:
- return PlainTextInputElement(**d)
- elif t == RadioButtonsElement.type:
- return RadioButtonsElement(**d)
- elif t == CheckboxesElement.type:
- return CheckboxesElement(**d)
- elif t == OverflowMenuElement.type:
- return OverflowMenuElement(**d)
- elif t == DatePickerElement.type:
- return DatePickerElement(**d)
- elif t == TimePickerElement.type:
- return TimePickerElement(**d)
- else:
- cls.logger.warning(f"Unknown element detected and skipped ({block_element})")
- return None
- else:
- cls.logger.warning(f"Unknown element detected and skipped ({block_element})")
- return None
elif isinstance(block_element, (TextObject, BlockElement)):
return block_element
- else:
- cls.logger.warning(f"Unknown element detected and skipped ({block_element})")
- return None
+ cls.logger.warning(f"Unknown element detected and skipped ({block_element})")
+ return None
@classmethod
def parse_all(
cls, block_elements: Sequence[Union[dict, "BlockElement", TextObject]]
) -> List[Union["BlockElement", TextObject]]:
- return [cls.parse(e) for e in block_elements or []]
+ return [cls.parse(e) for e in block_elements or []]
+
+ @classmethod
+ def _get_sub_block_elements(cls: Type["BlockElement"]) -> Iterator[Type["BlockElement"]]:
+ for subclass in cls.__subclasses__():
+ if hasattr(subclass, "type"):
+ yield subclass
+ yield from subclass._get_sub_block_elements()
Ancestors
@@ -616,57 +591,17 @@ Static methods
if "type" in block_element:
d = copy.copy(block_element)
t = d.pop("type")
+ for subclass in cls._get_sub_block_elements():
+ if t == subclass.type: # type: ignore
+ return subclass(**d)
if t == PlainTextObject.type: # skipcq: PYL-R1705
return PlainTextObject(**d)
elif t == MarkdownTextObject.type:
return MarkdownTextObject(**d)
- elif t == ImageElement.type:
- return ImageElement(**d)
- elif t == ButtonElement.type:
- return ButtonElement(**d)
- elif t == StaticSelectElement.type:
- return StaticSelectElement(**d)
- elif t == StaticMultiSelectElement.type:
- return StaticMultiSelectElement(**d)
- elif t == ExternalDataSelectElement.type:
- return ExternalDataSelectElement(**d)
- elif t == ExternalDataMultiSelectElement.type:
- return ExternalDataMultiSelectElement(**d)
- elif t == UserSelectElement.type:
- return UserSelectElement(**d)
- elif t == UserMultiSelectElement.type:
- return UserMultiSelectElement(**d)
- elif t == ConversationSelectElement.type:
- return ConversationSelectElement(**d)
- elif t == ConversationMultiSelectElement.type:
- return ConversationMultiSelectElement(**d)
- elif t == ChannelSelectElement.type:
- return ChannelSelectElement(**d)
- elif t == ChannelMultiSelectElement.type:
- return ChannelMultiSelectElement(**d)
- elif t == PlainTextInputElement.type:
- return PlainTextInputElement(**d)
- elif t == RadioButtonsElement.type:
- return RadioButtonsElement(**d)
- elif t == CheckboxesElement.type:
- return CheckboxesElement(**d)
- elif t == OverflowMenuElement.type:
- return OverflowMenuElement(**d)
- elif t == DatePickerElement.type:
- return DatePickerElement(**d)
- elif t == TimePickerElement.type:
- return TimePickerElement(**d)
- else:
- cls.logger.warning(f"Unknown element detected and skipped ({block_element})")
- return None
- else:
- cls.logger.warning(f"Unknown element detected and skipped ({block_element})")
- return None
elif isinstance(block_element, (TextObject, BlockElement)):
return block_element
- else:
- cls.logger.warning(f"Unknown element detected and skipped ({block_element})")
- return None
+ cls.logger.warning(f"Unknown element detected and skipped ({block_element})")
+ return None
@@ -2164,6 +2099,123 @@ Inherited members
+
+class DateTimePickerElement
+(*, action_id: Optional[str] = None, initial_date_time: Optional[int] = None, confirm: Union[dict, ConfirmObject, ForwardRef(None)] = None, focus_on_load: Optional[bool] = None, **others: dict)
+
+-
+
Block Elements are things that exists inside of your Blocks.
+https://api.slack.com/reference/block-kit/block-elements
+An element that allows the selection of a time of day formatted as a UNIX timestamp.
+On desktop clients, this time picker will take the form of a dropdown list and the
+date picker will take the form of a dropdown calendar. Both options will have free-text
+entry for precise choices. On mobile clients, the time picker and date
+picker will use native UIs.
+https://api.slack.com/reference/block-kit/block-elements#datetimepicker
+Args
+
+action_id
: required
+- An identifier for the action triggered when a time is selected. You can use this
+when you receive an interaction payload to identify the source of the action. Should be unique among
+all other action_ids in the containing block. Maximum length for this field is 255 characters.
+initial_date_time
+- The initial date and time that is selected when the element is loaded, represented as
+a UNIX timestamp in seconds. This should be in the format of 10 digits, for example 1628633820
+represents the date and time August 10th, 2021 at 03:17pm PST.
+and mm is minutes with leading zeros (00 to 59), for example 22:25 for 10:25pm.
+confirm
+- A confirm object that defines an optional confirmation dialog
+that appears after a time is selected.
+focus_on_load
+- Indicates whether the element will be set to auto focus within the view object.
+Only one element can be set to true. Defaults to false.
+
+
+
+Expand source code
+
+class DateTimePickerElement(InputInteractiveElement):
+ type = "datetimepicker"
+
+ @property
+ def attributes(self) -> Set[str]:
+ return super().attributes.union({"initial_date_time"})
+
+ def __init__(
+ self,
+ *,
+ action_id: Optional[str] = None,
+ initial_date_time: Optional[int] = None,
+ confirm: Optional[Union[dict, ConfirmObject]] = None,
+ focus_on_load: Optional[bool] = None,
+ **others: dict,
+ ):
+ """
+ An element that allows the selection of a time of day formatted as a UNIX timestamp.
+ On desktop clients, this time picker will take the form of a dropdown list and the
+ date picker will take the form of a dropdown calendar. Both options will have free-text
+ entry for precise choices. On mobile clients, the time picker and date
+ picker will use native UIs.
+ https://api.slack.com/reference/block-kit/block-elements#datetimepicker
+
+ Args:
+ action_id (required): An identifier for the action triggered when a time is selected. You can use this
+ when you receive an interaction payload to identify the source of the action. Should be unique among
+ all other action_ids in the containing block. Maximum length for this field is 255 characters.
+ initial_date_time: The initial date and time that is selected when the element is loaded, represented as
+ a UNIX timestamp in seconds. This should be in the format of 10 digits, for example 1628633820
+ represents the date and time August 10th, 2021 at 03:17pm PST.
+ and mm is minutes with leading zeros (00 to 59), for example 22:25 for 10:25pm.
+ confirm: A confirm object that defines an optional confirmation dialog
+ that appears after a time is selected.
+ focus_on_load: Indicates whether the element will be set to auto focus within the view object.
+ Only one element can be set to true. Defaults to false.
+ """
+ super().__init__(
+ type=self.type,
+ action_id=action_id,
+ confirm=ConfirmObject.parse(confirm),
+ focus_on_load=focus_on_load,
+ )
+ show_unknown_key_warning(self, others)
+
+ self.initial_date_time = initial_date_time
+
+ @JsonValidator("initial_date_time attribute must be between 0 and 99999999 seconds")
+ def _validate_initial_date_time_valid(self) -> bool:
+ return self.initial_date_time is None or (0 <= self.initial_date_time <= 9999999999)
+
+Ancestors
+
+Class variables
+
+var type
+-
+
+
+
+Inherited members
+
+InputInteractiveElement
:
+
+
+InteractiveElement
:
+
+attributes
+
+
+
+
class DividerBlock
(*, block_id: Optional[str] = None, **others: dict)
@@ -2238,6 +2290,117 @@ Inherited members
+
+class EmailInputElement
+(*, action_id: Optional[str] = None, initial_value: Optional[str] = None, dispatch_action_config: Union[dict, DispatchActionConfig, ForwardRef(None)] = None, focus_on_load: Optional[bool] = None, placeholder: Union[str, dict, TextObject, ForwardRef(None)] = None, **others: dict)
+
+-
+
Block Elements are things that exists inside of your Blocks.
+https://api.slack.com/reference/block-kit/block-elements
+https://api.slack.com/reference/block-kit/block-elements#email
+Args
+
+action_id
: required
+- An identifier for the input value when the parent modal is submitted.
+You can use this when you receive a view_submission payload to identify the value of the input element.
+Should be unique among all other action_ids in the containing block.
+Maximum length for this field is 255 characters.
+initial_value
+- The initial value in the email input when it is loaded.
+dispatch_action_config
+- dispatch configuration object that determines when during
+text input the element returns a block_actions payload.
+focus_on_load
+- Indicates whether the element will be set to auto focus within the view object.
+Only one element can be set to true. Defaults to false.
+placeholder
+- A plain_text only text object that defines the placeholder text shown in the
+email input. Maximum length for the text in this field is 150 characters.
+
+
+
+Expand source code
+
+class EmailInputElement(InputInteractiveElement):
+ type = "email_text_input"
+
+ @property
+ def attributes(self) -> Set[str]:
+ return super().attributes.union(
+ {
+ "initial_value",
+ "dispatch_action_config",
+ }
+ )
+
+ def __init__(
+ self,
+ *,
+ action_id: Optional[str] = None,
+ initial_value: Optional[str] = None,
+ dispatch_action_config: Optional[Union[dict, DispatchActionConfig]] = None,
+ focus_on_load: Optional[bool] = None,
+ placeholder: Optional[Union[str, dict, TextObject]] = None,
+ **others: dict,
+ ):
+ """
+ https://api.slack.com/reference/block-kit/block-elements#email
+
+ Args:
+ action_id (required): An identifier for the input value when the parent modal is submitted.
+ You can use this when you receive a view_submission payload to identify the value of the input element.
+ Should be unique among all other action_ids in the containing block.
+ Maximum length for this field is 255 characters.
+ initial_value: The initial value in the email input when it is loaded.
+ dispatch_action_config: dispatch configuration object that determines when during
+ text input the element returns a block_actions payload.
+ focus_on_load: Indicates whether the element will be set to auto focus within the view object.
+ Only one element can be set to true. Defaults to false.
+ placeholder: A plain_text only text object that defines the placeholder text shown in the
+ email input. Maximum length for the text in this field is 150 characters.
+ """
+ super().__init__(
+ type=self.type,
+ action_id=action_id,
+ placeholder=TextObject.parse(placeholder, PlainTextObject.type),
+ focus_on_load=focus_on_load,
+ )
+ show_unknown_key_warning(self, others)
+
+ self.initial_value = initial_value
+ self.dispatch_action_config = dispatch_action_config
+
+Ancestors
+
+Class variables
+
+var type
+-
+
+
+
+Inherited members
+
+InputInteractiveElement
:
+
+
+InteractiveElement
:
+
+attributes
+
+
+
+
class ExternalDataMultiSelectElement
(*, placeholder: Union[str, dict, TextObject, ForwardRef(None)] = None, action_id: Optional[str] = None, min_query_length: Optional[int] = None, initial_options: Optional[Sequence[Union[dict, Option]]] = None, confirm: Union[dict, ConfirmObject, ForwardRef(None)] = None, max_selected_items: Optional[int] = None, focus_on_load: Optional[bool] = None, **others: dict)
@@ -3180,14 +3343,18 @@ Subclasses
- ConversationMultiSelectElement
- ConversationSelectElement
- DatePickerElement
+- DateTimePickerElement
+- EmailInputElement
- ExternalDataMultiSelectElement
- ExternalDataSelectElement
+- NumberInputElement
- PlainTextInputElement
- RadioButtonsElement
- SelectElement
- StaticMultiSelectElement
- StaticSelectElement
- TimePickerElement
+- UrlInputElement
- UserMultiSelectElement
- UserSelectElement
@@ -3612,6 +3779,137 @@ Inherited members
+
+class NumberInputElement
+(*, action_id: Optional[str] = None, is_decimal_allowed: Optional[bool] = False, initial_value: Union[int, float, str, ForwardRef(None)] = None, min_value: Union[int, float, str, ForwardRef(None)] = None, max_value: Union[int, float, str, ForwardRef(None)] = None, dispatch_action_config: Union[dict, DispatchActionConfig, ForwardRef(None)] = None, focus_on_load: Optional[bool] = None, placeholder: Union[str, dict, TextObject, ForwardRef(None)] = None, **others: dict)
+
+-
+
Block Elements are things that exists inside of your Blocks.
+https://api.slack.com/reference/block-kit/block-elements
+https://api.slack.com/reference/block-kit/block-elements#number
+Args
+
+action_id
: required
+- An identifier for the input value when the parent modal is submitted.
+You can use this when you receive a view_submission payload to identify the value of the input element.
+Should be unique among all other action_ids in the containing block.
+Maximum length for this field is 255 characters.
+is_decimal_allowed
: required
+- Decimal numbers are allowed if is_decimal_allowed= true, set the value to
+false otherwise.
+initial_value
+- The initial value in the number input when it is loaded.
+min_value
+- The minimum value, cannot be greater than max_value.
+max_value
+- The maximum value, cannot be less than min_value.
+dispatch_action_config
+- A dispatch configuration object that determines when
+during text input the element returns a block_actions payload.
+focus_on_load
+- Indicates whether the element will be set to auto focus within the view object.
+Only one element can be set to true. Defaults to false.
+placeholder
+- A plain_text only text object that defines the placeholder text shown
+in the plain-text input. Maximum length for the text in this field is 150 characters.
+
+
+
+Expand source code
+
+class NumberInputElement(InputInteractiveElement):
+ type = "number_input"
+
+ @property
+ def attributes(self) -> Set[str]:
+ return super().attributes.union(
+ {
+ "initial_value",
+ "is_decimal_allowed",
+ "min_value",
+ "max_value",
+ "dispatch_action_config",
+ }
+ )
+
+ def __init__(
+ self,
+ *,
+ action_id: Optional[str] = None,
+ is_decimal_allowed: Optional[bool] = False,
+ initial_value: Optional[Union[int, float, str]] = None,
+ min_value: Optional[Union[int, float, str]] = None,
+ max_value: Optional[Union[int, float, str]] = None,
+ dispatch_action_config: Optional[Union[dict, DispatchActionConfig]] = None,
+ focus_on_load: Optional[bool] = None,
+ placeholder: Optional[Union[str, dict, TextObject]] = None,
+ **others: dict,
+ ):
+ """
+ https://api.slack.com/reference/block-kit/block-elements#number
+
+ Args:
+ action_id (required): An identifier for the input value when the parent modal is submitted.
+ You can use this when you receive a view_submission payload to identify the value of the input element.
+ Should be unique among all other action_ids in the containing block.
+ Maximum length for this field is 255 characters.
+ is_decimal_allowed (required): Decimal numbers are allowed if is_decimal_allowed= true, set the value to
+ false otherwise.
+ initial_value: The initial value in the number input when it is loaded.
+ min_value: The minimum value, cannot be greater than max_value.
+ max_value: The maximum value, cannot be less than min_value.
+ dispatch_action_config: A dispatch configuration object that determines when
+ during text input the element returns a block_actions payload.
+ focus_on_load: Indicates whether the element will be set to auto focus within the view object.
+ Only one element can be set to true. Defaults to false.
+ placeholder: A plain_text only text object that defines the placeholder text shown
+ in the plain-text input. Maximum length for the text in this field is 150 characters.
+ """
+ super().__init__(
+ type=self.type,
+ action_id=action_id,
+ placeholder=TextObject.parse(placeholder, PlainTextObject.type),
+ focus_on_load=focus_on_load,
+ )
+ show_unknown_key_warning(self, others)
+
+ self.initial_value = str(initial_value) if initial_value is not None else None
+ self.is_decimal_allowed = is_decimal_allowed
+ self.min_value = str(min_value) if min_value is not None else None
+ self.max_value = str(max_value) if max_value is not None else None
+ self.dispatch_action_config = dispatch_action_config
+
+Ancestors
+
+Class variables
+
+var type
+-
+
+
+
+Inherited members
+
+InputInteractiveElement
:
+
+
+InteractiveElement
:
+
+attributes
+
+
+
+
class Option
(*, value: str, label: Optional[str] = None, text: Union[str, Dict[str, Any], TextObject, ForwardRef(None)] = None, description: Union[str, Dict[str, Any], TextObject, ForwardRef(None)] = None, url: Optional[str] = None, **others: Dict[str, Any])
@@ -5480,6 +5778,121 @@ Inherited members
+
+class UrlInputElement
+(*, action_id: Optional[str] = None, initial_value: Optional[str] = None, dispatch_action_config: Union[dict, DispatchActionConfig, ForwardRef(None)] = None, focus_on_load: Optional[bool] = None, placeholder: Union[str, dict, TextObject, ForwardRef(None)] = None, **others: dict)
+
+-
+
Block Elements are things that exists inside of your Blocks.
+https://api.slack.com/reference/block-kit/block-elements
+A URL input element, similar to the Plain-text input element,
+creates a single line field where a user can enter URL-encoded data.
+https://api.slack.com/reference/block-kit/block-elements#url
+Args
+
+action_id
: required
+- An identifier for the input value when the parent modal is submitted.
+You can use this when you receive a view_submission payload to identify the value of the input element.
+Should be unique among all other action_ids in the containing block.
+Maximum length for this field is 255 characters.
+initial_value
+- The initial value in the URL input when it is loaded.
+dispatch_action_config
+- A dispatch configuration object that determines when during text input
+the element returns a block_actions payload.
+focus_on_load
+- Indicates whether the element will be set to auto focus within the view object.
+Only one element can be set to true. Defaults to false.
+placeholder
+- A plain_text only text object that defines the placeholder text shown in the URL input.
+Maximum length for the text in this field is 150 characters.
+
+
+
+Expand source code
+
+class UrlInputElement(InputInteractiveElement):
+ type = "url_text_input"
+
+ @property
+ def attributes(self) -> Set[str]:
+ return super().attributes.union(
+ {
+ "initial_value",
+ "dispatch_action_config",
+ }
+ )
+
+ def __init__(
+ self,
+ *,
+ action_id: Optional[str] = None,
+ initial_value: Optional[str] = None,
+ dispatch_action_config: Optional[Union[dict, DispatchActionConfig]] = None,
+ focus_on_load: Optional[bool] = None,
+ placeholder: Optional[Union[str, dict, TextObject]] = None,
+ **others: dict,
+ ):
+ """
+ A URL input element, similar to the Plain-text input element,
+ creates a single line field where a user can enter URL-encoded data.
+ https://api.slack.com/reference/block-kit/block-elements#url
+
+ Args:
+ action_id (required): An identifier for the input value when the parent modal is submitted.
+ You can use this when you receive a view_submission payload to identify the value of the input element.
+ Should be unique among all other action_ids in the containing block.
+ Maximum length for this field is 255 characters.
+ initial_value: The initial value in the URL input when it is loaded.
+ dispatch_action_config: A dispatch configuration object that determines when during text input
+ the element returns a block_actions payload.
+ focus_on_load: Indicates whether the element will be set to auto focus within the view object.
+ Only one element can be set to true. Defaults to false.
+ placeholder: A plain_text only text object that defines the placeholder text shown in the URL input.
+ Maximum length for the text in this field is 150 characters.
+ """
+ super().__init__(
+ type=self.type,
+ action_id=action_id,
+ placeholder=TextObject.parse(placeholder, PlainTextObject.type),
+ focus_on_load=focus_on_load,
+ )
+ show_unknown_key_warning(self, others)
+
+ self.initial_value = initial_value
+ self.dispatch_action_config = dispatch_action_config
+
+Ancestors
+
+Class variables
+
+var type
+-
+
+
+
+Inherited members
+
+InputInteractiveElement
:
+
+
+InteractiveElement
:
+
+attributes
+
+
+
+
class UserMultiSelectElement
(*, action_id: Optional[str] = None, placeholder: Union[str, dict, TextObject, ForwardRef(None)] = None, initial_users: Optional[Sequence[str]] = None, confirm: Union[dict, ConfirmObject, ForwardRef(None)] = None, max_selected_items: Optional[int] = None, focus_on_load: Optional[bool] = None, **others: dict)
@@ -6041,12 +6454,24 @@ DateTimePickerElement
+
+type
+
+
+-
DividerBlock
-
+
EmailInputElement
+
+type
+
+
+-
ExternalDataMultiSelectElement
type
@@ -6130,6 +6555,12 @@ NumberInputElement
+
+type
+
+
+-
Option
from_single_value
@@ -6226,6 +6657,12 @@ UrlInputElement
+
+type
+
+
+-
UserMultiSelectElement
type
diff --git a/docs/api-docs/slack_sdk/version.html b/docs/api-docs/slack_sdk/version.html
index 893750693..258b0bbd5 100644
--- a/docs/api-docs/slack_sdk/version.html
+++ b/docs/api-docs/slack_sdk/version.html
@@ -28,7 +28,7 @@ Module slack_sdk.version
Expand source code
"""Check the latest version at https://pypi.org/project/slack-sdk/"""
-__version__ = "3.19.2"
+__version__ = "3.19.3"
diff --git a/docs/api-docs/slack_sdk/web/internal_utils.html b/docs/api-docs/slack_sdk/web/internal_utils.html
index e86f64fb0..f1f70a0e2 100644
--- a/docs/api-docs/slack_sdk/web/internal_utils.html
+++ b/docs/api-docs/slack_sdk/web/internal_utils.html
@@ -35,6 +35,7 @@ Module slack_sdk.web.internal_utils
import warnings
from asyncio import Future
from http.client import HTTPResponse
+from io import IOBase
from ssl import SSLContext
from typing import Any, Dict, Optional, Sequence, Union
from urllib.parse import urljoin
@@ -342,8 +343,14 @@ Module slack_sdk.web.internal_utils
if isinstance(file, str): # filepath
with open(file.encode("utf-8", "ignore"), "rb") as readable:
data = readable.read()
- else:
+ elif isinstance(file, bytes):
data = file
+ elif isinstance(file, IOBase):
+ data = file.read()
+ if isinstance(data, str):
+ data = data.encode()
+ else:
+ raise SlackRequestError("file parameter must be any of filepath, bytes, and io.IOBase")
elif content is not None:
if isinstance(content, str):
data = content.encode("utf-8")
diff --git a/docs/real_time_messaging.html b/docs/real_time_messaging.html
index d5e8fa67e..326568049 100644
--- a/docs/real_time_messaging.html
+++ b/docs/real_time_messaging.html
@@ -215,7 +215,7 @@
RTM Client¶
Real Time Messaging (RTM)¶
-rtm.start method deprecation after Nov 30th, 2021. see details here
+rtm.start method has been deprecated for apps created after Nov 30th, 2021. See details here
The Real Time Messaging (RTM) API is a WebSocket-based API that allows you to receive events from Slack in real time and send messages as users.
If you prefer events to be pushed to your app, we recommend using the HTTP-based Events API along with Socket Mode instead. The Events API contains some events that aren’t supported in the RTM API (like app_home_opened event), and it supports most of the event types in the RTM API. If you’d like to use the Events API, you can use the Python Slack Events Adaptor.
The RTMClient allows apps to communicate with the Slack Platform’s RTM API.
@@ -275,7 +275,7 @@ Real Time Messaging (RTM)rtm.start method deprecation after Nov 30th, 2021. see details here
+rtm.start method has been deprecated for apps created after Nov 30th, 2021. See details here
By default, the RTM client uses rtm.connect
to establish a WebSocket connection with Slack. The response contains basic information about the team and WebSocket url.
Read the rtm.connect docs and the rtm.start docs for more details. Also, note that slack.rtm_v2.RTMClient
does not support rtm.start
.
RTM Events
diff --git a/docs/searchindex.js b/docs/searchindex.js
index ae8f6cca1..9c83a2095 100644
--- a/docs/searchindex.js
+++ b/docs/searchindex.js
@@ -1 +1 @@
-Search.setIndex({"docnames": ["about", "audit-logs/index", "faq", "index", "installation/index", "metadata", "oauth/index", "real_time_messaging", "scim/index", "socket-mode/index", "v3-migration/index", "web/index", "webhook/index"], "filenames": ["about.rst", "audit-logs/index.rst", "faq.rst", "index.rst", "installation/index.rst", "metadata.rst", "oauth/index.rst", "real_time_messaging.rst", "scim/index.rst", "socket-mode/index.rst", "v3-migration/index.rst", "web/index.rst", "webhook/index.rst"], "titles": ["About", "Audit Logs API Client", "FAQ", "Python Slack SDK", "Installation", "<no title>", "OAuth Modules", "RTM Client", "SCIM API Client", "Socket Mode Client", "Migration Guide", "Web Client", "Webhook Client"], "terms": {"access": [0, 1, 6, 8, 11], "platform": [0, 3, 6, 7], "from": [0, 1, 2, 3, 4, 6, 7, 8, 9, 11, 12], "your": [0, 1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 12], "app": [0, 1, 3, 4, 7, 8, 9, 11, 12], "let": [0, 2, 4, 6, 9, 11], "you": [0, 1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 12], "build": [0, 3, 4, 6, 11], "web": [0, 3, 6, 7, 9, 10], "api": [0, 2, 3, 4, 6, 7, 9, 10, 12], "i": [0, 1, 2, 4, 6, 7, 8, 9, 10, 11, 12], "proudli": 0, "maintain": 0, "develop": [0, 3, 7, 11], "tool": [0, 1, 8], "team": [0, 4, 6, 7, 11], "licens": 0, "code": [0, 1, 2, 3, 4, 6, 7, 8, 10, 11, 12], "conduct": 0, "contribut": 0, "contributor": [0, 2], "agreement": 0, "opensourc": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], "com": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], "slackapi": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], "set": [1, 2, 3, 4, 6, 8, 9, 11, 12], "monitor": 1, "what": [1, 2, 3, 6], "": [1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 12], "happen": [1, 3, 6], "enterpris": [1, 6], "grid": [1, 6], "organ": 1, "The": [1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 12], "can": [1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 12], "us": [1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 12], "secur": 1, "inform": [1, 4, 7, 9, 11], "event": [1, 3, 6, 7, 9, 11, 12], "manag": [1, 3, 6, 8, 9], "siem": 1, "provid": [1, 4, 6, 8, 10, 11], "an": [1, 2, 4, 6, 7, 8, 9, 11, 12], "analysi": 1, "how": [1, 4, 6, 8, 11, 12], "slack": [1, 2, 4, 5, 7, 8, 9, 10, 11, 12], "being": [1, 2, 11], "also": [1, 3, 7, 8, 10, 11, 12], "thi": [1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 12], "write": [1, 2, 4, 6, 9, 11], "own": [1, 6, 8, 9, 11, 12], "applic": [1, 4, 11], "see": [1, 4, 6, 7, 11], "member": [1, 11], "ar": [1, 2, 3, 4, 8, 9, 10, 11, 12], "follow": [1, 2, 3, 6, 9, 11], "instruct": 1, "document": [1, 3, 4, 6, 7, 8, 9, 11, 12], "get": [1, 4, 6, 9, 11, 12], "valid": [1, 4, 6, 11], "token": [1, 2, 7, 8, 9, 11], "need": [1, 2, 3, 4, 6, 7, 9, 10, 11], "instal": [1, 9, 11, 12], "individu": 1, "workspac": [1, 6, 9, 11], "within": 1, "python": [1, 4, 5, 6, 7, 8, 9, 10, 11, 12], "modul": [1, 2, 3, 8, 9, 10, 11, 12], "avail": [1, 2, 3, 4, 6, 8, 9, 11, 12], "http": [1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 12], "dev": [1, 2, 3, 6, 8, 9, 10, 11, 12], "sdk": [1, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12], "doc": [1, 2, 3, 6, 7, 8, 9, 11, 12], "slack_sdk": [1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 12], "oauth": [1, 3, 4, 8, 9, 10, 11], "admin": [1, 8], "scope": [1, 4, 6, 7, 8, 9, 11], "requir": [1, 4, 6, 8, 9, 10, 11, 12], "like": [1, 7, 9, 10, 11], "endpoint": [1, 4, 6, 11], "essenti": 1, "part": [1, 3], "To": [1, 4, 6, 8, 9, 11, 12], "learn": [1, 6, 7, 8, 11, 12], "about": [1, 2, 4, 6, 7, 8, 11], "paramet": [1, 4, 6, 11], "check": [1, 4, 6, 8, 11, 12], "out": [1, 4, 8, 9, 10, 11], "guid": 1, "more": [1, 2, 4, 7, 8, 9, 10, 11, 12], "data": [1, 3, 4, 6, 7, 8, 11], "structur": [1, 8], "api_respons": [1, 3, 11], "typed_bodi": 1, "class": [1, 8, 10, 11, 12], "sourc": [1, 2, 3, 4, 8, 9, 10, 11, 12], "import": [1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 12], "o": [1, 2, 4, 6, 7, 8, 9, 11, 12], "audit_log": [1, 3], "environ": [1, 2, 4, 6, 7, 8, 9, 11, 12], "slack_org_admin_user_token": [1, 8], "action": [1, 10, 12], "user_login": 1, "limit": [1, 3, 8, 12], "1": [1, 8, 9, 11, 12], "v1": [1, 7, 8], "logsrespons": 1, "If": [1, 2, 3, 4, 6, 7, 9, 10, 11], "would": [1, 4, 7], "scheme": 1, "method": [1, 3, 4, 6, 7, 8, 9, 12], "schema": 1, "keen": [1, 8], "asyncio": [1, 6, 8, 10, 11, 12], "scim": [1, 3], "call": [1, 4, 6, 7, 8, 9, 10, 12], "we": [1, 2, 3, 4, 7, 8, 10, 11], "offer": [1, 3, 8, 9], "asyncscimcli": 1, "reli": [1, 8, 10, 11, 12], "aiohttp": [1, 8, 9, 10, 11, 12], "librari": [1, 8, 10, 11, 12], "async_cli": [1, 3, 8, 9, 11, 12], "await": [1, 8, 9, 10, 11, 12], "With": [1, 6, 8, 11, 12], "default": [1, 6, 7, 8, 11, 12], "onli": [1, 8, 9, 10, 11, 12], "connectionerrorretryhandl": [1, 8, 11, 12], "its": [1, 2, 3, 6, 7, 8, 9, 11, 12], "configur": [1, 4, 7, 8, 9, 11, 12], "one": [1, 2, 4, 7, 8, 9, 10, 11, 12], "retri": [1, 8, 11, 12], "manner": [1, 8, 11, 12], "exponenti": [1, 8, 11, 12], "backoff": [1, 8, 11, 12], "jitter": [1, 8, 11, 12], "enabl": [1, 3, 8, 9, 11, 12], "handler": [1, 6, 8, 11, 12], "encount": [1, 2, 8, 11, 12], "connect": [1, 3, 6, 7, 8, 9, 11, 12], "relat": [1, 3, 8, 11, 12], "failur": [1, 8, 11, 12], "e": [1, 3, 6, 8, 11, 12], "g": [1, 8, 10, 11, 12], "reset": [1, 8, 11, 12], "peer": [1, 8, 11, 12], "other": [1, 4, 8, 9, 10, 11, 12], "pass": [1, 4, 7, 8, 9, 11, 12], "list": [1, 2, 4, 7, 8, 11, 12], "constructor": [1, 8, 11, 12], "For": [1, 4, 7, 8, 10, 11, 12], "instanc": [1, 8, 11, 12], "add": [1, 2, 4, 6, 8, 9, 10, 11, 12], "built": [1, 4, 8, 9, 11, 12], "ratelimiterrorretryhandl": [1, 8, 11, 12], "wai": [1, 3, 6, 8, 9, 10, 11, 12], "doe": [1, 6, 7, 8, 11, 12], "when": [1, 3, 6, 7, 8, 11, 12], "statu": [1, 8, 11, 12], "429": [1, 8, 11, 12], "return": [1, 4, 6, 8, 11, 12], "http_retri": [1, 8, 11, 12], "builtin_handl": [1, 8, 11, 12], "rate_limit_handl": [1, 8, 11, 12], "max_retry_count": [1, 8, 11, 12], "rate": [1, 8, 12], "error": [1, 2, 6, 8, 11, 12], "well": [1, 6, 8, 11, 12], "retry_handl": [1, 8, 11, 12], "append": [1, 8, 9, 11, 12], "creat": [1, 2, 6, 7, 8, 9, 11, 12], "ones": [1, 8, 9, 11, 12], "quit": [1, 8, 11, 12], "simpl": [1, 4, 8, 9, 10, 11, 12], "defin": [1, 4, 8, 11, 12], "new": [1, 2, 4, 6, 7, 8, 9, 10, 11, 12], "inherit": [1, 8, 11, 12], "asyncretryhandl": [1, 8, 11, 12], "implement": [1, 6, 8, 9, 11, 12], "intern": [1, 8, 10, 11, 12], "can_retri": [1, 8, 11, 12], "prepare_for_next_retri": [1, 8, 11, 12], "properli": [1, 8, 10, 11, 12], "socket": [1, 3, 7, 8, 11, 12], "type": [1, 6, 7, 8, 9, 11, 12], "option": [1, 6, 8, 10, 11, 12], "retryst": [1, 8, 11, 12], "httprequest": [1, 8, 11, 12], "httprespons": [1, 8, 11, 12], "builtin_interval_calcul": [1, 8, 11, 12], "backoffretryintervalcalcul": [1, 8, 11, 12], "randomjitt": [1, 8, 11, 12], "myretryhandl": [1, 8, 11, 12], "def": [1, 4, 6, 7, 8, 9, 11, 12], "_can_retri": [1, 8, 11, 12], "self": [1, 8, 11, 12], "state": [1, 4, 6, 8, 11, 12], "request": [1, 3, 4, 6, 8, 9, 11, 12], "respons": [1, 4, 6, 7, 8, 9, 11, 12], "none": [1, 6, 8, 9, 11, 12], "except": [1, 6, 8, 11, 12], "bool": [1, 8, 11, 12], "errno": [1, 8, 11, 12], "104": [1, 8, 11, 12], "isinst": [1, 8, 11, 12], "interval_calcul": [1, 8, 11, 12], "backoff_factor": [1, 8, 11, 12], "0": [1, 2, 8, 10, 11, 12], "5": [1, 8, 11, 12], "async": [1, 8, 9, 10, 11, 12], "prefix": [1, 8, 9, 11, 12], "correspond": [1, 3, 4, 7, 8, 11, 12], "all": [1, 2, 4, 6, 8, 9, 10, 11, 12], "those": [1, 3, 7, 8, 10, 11, 12], "compat": [1, 6, 8, 9, 10, 11, 12], "test": [1, 2, 3, 8, 11, 12], "detail": [1, 6, 7, 8, 9, 11, 12], "recommend": [2, 3, 4, 7, 10], "virtualenv": 2, "venv": [2, 3], "up": 2, "runtim": [2, 4], "dedic": 2, "virtual": [2, 3], "env": [2, 3], "run": [2, 3, 4, 8, 9, 11, 12], "script": 2, "m": [2, 3], "activ": [2, 3], "window": 2, "bin": [2, 3], "pypi": [2, 3, 9, 10], "packag": [2, 3, 10], "pip": [2, 3, 11, 12], "3": [2, 3], "variabl": [2, 4], "command": [2, 6, 9, 12], "export": [2, 11], "slack_bot_token": [2, 4, 7, 9, 11], "xoxb": [2, 4, 9, 11], "Then": [2, 4], "verifi": [2, 3, 4, 6, 12], "work": [2, 3, 4, 9, 10, 11, 12], "repl": [2, 3], "start": [2, 4, 6, 7, 9, 10, 11], "just": [2, 3, 4, 9, 10, 11, 12], "log": [2, 3, 6, 11], "webclient": [2, 3, 4, 6, 9, 10, 11], "basicconfig": [2, 3, 11], "level": [2, 3, 9, 11], "debug": [2, 3, 11], "client": [2, 3, 4, 6, 10], "re": [2, 3, 4, 6, 9, 10, 11], "api_test": [2, 3], "As": [2, 10], "deprec": [2, 7, 10], "switch": [2, 10], "That": [2, 10, 11], "said": [2, 10, 11, 12], "mai": [2, 6, 8, 11], "still": [2, 6, 10], "old": 2, "sai": [2, 7, 10, 11], "attributeerror": 2, "ha": [2, 4, 10, 11], "attribut": [2, 8, 11], "find": [2, 10], "both": 2, "output": 2, "try": [2, 3, 6, 9, 11], "remov": [2, 10, 11], "uninstal": [2, 6], "reinstal": [2, 4], "great": 2, "thank": [2, 6, 11], "u": [2, 3, 7, 8], "know": [2, 4, 6], "tracker": [2, 3], "feel": [2, 11], "particularli": 2, "ambiti": 2, "why": 2, "submit": [2, 6, 9, 11], "pull": [2, 3], "fix": 2, "There": [2, 9, 10], "alwai": [2, 3], "someth": [2, 6, 10], "could": 2, "ad": [2, 7, 11], "discuss": [2, 3], "around": 2, "propos": 2, "good": [2, 3, 9], "yourself": 2, "love": 2, "feedback": 2, "help": [2, 6], "don": [2, 4, 6, 7, 9, 10, 11], "t": [2, 4, 6, 7, 9, 10, 11], "bite": 2, "much": [2, 6], "excel": 2, "question": [2, 3], "first": [2, 6, 9, 10], "pleas": [2, 4, 6, 7, 10], "have": [2, 7, 9, 10, 11, 12], "look": [2, 6, 9, 11], "our": [2, 4, 7, 11], "gener": [2, 3, 4, 6, 11, 12], "guidelin": 2, "done": 2, "while": [2, 7, 10, 11], "super": 2, "excit": [2, 11], "incorpor": 2, "coupl": 2, "thing": [2, 9, 11], "want": [2, 6, 11], "make": [2, 10, 11], "sure": [2, 11], "ve": [2, 4], "given": [2, 6, 11], "thought": 2, "unit": 2, "But": 2, "aim": 2, "increas": 2, "coverag": [2, 10], "rather": 2, "expect": [2, 10], "written": 2, "ensur": 2, "continu": [2, 11], "futur": 2, "thei": [2, 3, 11], "break": [2, 10], "think": 2, "concret": 2, "case": [2, 6], "section": [2, 4, 6, 7, 9, 11, 12], "appropri": [2, 8], "includ": [2, 4, 6, 8, 11, 12], "complet": [2, 4, 6, 7], "sampl": 2, "program": [2, 9, 11, 12], "demonstr": [2, 6], "forget": [2, 4, 9, 11], "updat": [2, 8, 11], "changelog": 2, "rst": 2, "two": 2, "item": [2, 11], "total": 2, "dai": 2, "importantli": 2, "user": [2, 3, 4, 6, 7, 8, 9, 11, 12], "On": [2, 8, 9], "note": [2, 6, 7, 9, 11], "project": [2, 3, 9, 10], "sphinx": 2, "edit": 2, "mani": [2, 11], "restructuredtext": 2, "file": 2, "src": [2, 6], "folder": 2, "ll": [2, 4, 11], "rebuild": 2, "It": [2, 3, 6, 8, 12], "step": [2, 6, 10], "insid": [2, 7], "v3": [2, 6, 10, 11], "sh": 2, "do": [2, 4, 6, 7, 9, 11], "content": 2, "sever": 3, "each": [3, 11], "deliv": 3, "capabl": 3, "so": [3, 10, 11, 12], "pick": 3, "fit": 3, "small": 3, "power": 3, "independ": 3, "seamlessli": 3, "togeth": [3, 11], "too": [3, 6, 11, 12], "featur": [3, 4, 6, 9, 10], "send": [3, 7, 9, 11, 12], "queri": [3, 4, 6], "ani": [3, 4, 6, 7, 9, 10, 12], "over": [3, 9, 11], "200": [3, 6, 11, 12], "webhook": [3, 10], "response_url": 3, "messag": [3, 9, 12], "incom": [3, 6], "mode": [3, 7, 10], "receiv": [3, 7, 9, 11], "socket_mod": [3, 9], "setup": [3, 4], "authent": [3, 6, 11, 12], "flow": [3, 4, 10], "v2": [3, 4, 6, 7, 10], "openid": [3, 6], "audit": 3, "util": 3, "provis": [3, 8], "account": [3, 8], "group": [3, 8, 11], "rtm": [3, 10], "listen": [3, 9], "websocket": [3, 7, 9], "rtm_v2": [3, 7], "signatur": [3, 6, 11, 12], "verif": 3, "server": [3, 6, 9], "ui": [3, 6], "builder": [3, 11], "construct": 3, "compon": 3, "easi": [3, 9], "model": [3, 7, 9, 11], "support": [3, 7, 8, 10], "6": 3, "higher": 3, "Of": 3, "cours": 3, "directli": [3, 11], "git": 3, "clone": 3, "github": 3, "cd": 3, "python3": [3, 11], "And": 3, "save": [3, 4, 6, 11], "few": [3, 9, 10], "line": 3, "py": [3, 4, 10, 11], "sy": 3, "stuck": [3, 11], "here": [3, 6, 7, 8, 9, 10, 11], "best": [3, 11], "assist": 3, "through": [3, 6], "issu": [3, 6, 7], "bug": 3, "report": 3, "visit": [3, 9], "commun": [3, 7], "bond": 3, "fellow": 3, "keep": [4, 7], "safe": 4, "where": [4, 6], "depend": [4, 9, 10, 11, 12], "grant": 4, "potenti": 4, "abil": [4, 7], "read": [4, 6, 7], "treat": 4, "password": 4, "publish": 4, "them": [4, 11], "share": [4, 6, 11], "avoid": 4, "111": [4, 9], "222": [4, 9], "xxxxx": 4, "persist": [4, 6], "databas": 4, "myapp": 4, "retriev": [4, 6, 11], "kei": 4, "addit": [4, 9, 11], "store": [4, 6, 11], "credenti": [4, 7], "page": [4, 7, 9, 11], "singl": [4, 8, 11], "entir": 4, "onc": 4, "click": [4, 6, 9], "button": [4, 6, 11], "found": [4, 8], "permiss": [4, 7, 9], "after": [4, 6, 7, 11], "been": [4, 7, 11], "must": [4, 7, 8, 11], "chang": [4, 9, 10, 11], "take": [4, 6, 11], "effect": 4, "multipl": 4, "intend": 4, "handl": [4, 6, 7, 11, 12], "via": [4, 12], "industri": 4, "standard": [4, 6, 10, 11, 12], "protocol": 4, "exchang": [4, 6, 11], "facilit": 4, "webserv": 4, "exampl": [4, 6, 7, 8, 11], "flask": [4, 6, 11, 12], "id": [4, 6, 7, 8, 9, 11], "secret": 4, "appli": 4, "determin": 4, "function": [4, 7, 9], "everi": 4, "wish": [4, 11], "order": 4, "abl": 4, "review": [4, 11], "full": [4, 6, 11], "client_id": [4, 6], "slack_client_id": [4, 6], "client_secret": [4, 6], "slack_client_secret": [4, 6], "oauth_scop": 4, "slack_scop": 4, "__name__": [4, 6, 11, 12], "initi": [4, 9], "link": [4, 7], "begin": [4, 8], "author": [4, 6], "pre": 4, "direct": [4, 9, 11], "accept": [4, 11], "refus": 4, "rout": [4, 6, 11, 12], "pre_instal": 4, "randomli": 4, "time": [4, 10, 11], "valu": [4, 6, 8, 11], "href": [4, 6], "f": [4, 6, 7, 11, 12], "agre": 4, "redirect": [4, 6], "auth": [4, 6], "which": [4, 6, 11], "string": [4, 6, 11], "param": [4, 6, 11], "final": 4, "oauth_redirect": [4, 6], "post_instal": 4, "code_param": 4, "arg": [4, 6], "empti": [4, 8, 11], "oauth_v2_access": [4, 6], "A": [4, 11], "success": 4, "yield": 4, "json": [4, 6, 11], "payload": [4, 6, 7, 9, 11, 12], "least": [4, 8], "bot": [4, 6, 7, 9, 11], "print": [4, 6, 8, 11], "environment": 4, "later": 4, "access_token": [4, 6], "succeed": 4, "__main__": [4, 11], "localhost": [4, 11], "3000": [4, 11], "basic": [4, 7, 9, 11], "usag": 4, "explain": 6, "easier": [6, 11], "same": [6, 9, 11], "bolt": 6, "stack": 6, "framework": 6, "most": [6, 7, 10, 11], "At": 6, "end": 6, "gain": 6, "refer": [6, 7, 8, 10, 11], "necessari": 6, "valida": 6, "process": [6, 9], "installationstor": 6, "fileinstallationstor": 6, "oauthstatestor": 6, "consum": 6, "side": 6, "fileoauthstatestor": 6, "authorizeurlgener": 6, "suffici": 6, "snippet": [6, 7], "below": [6, 7, 9, 11], "installation_stor": 6, "state_stor": 6, "expiration_second": 6, "300": 6, "base_dir": 6, "authorize_url_gener": 6, "app_ment": 6, "chat": [6, 11], "user_scop": 6, "search": 6, "make_respons": [6, 11, 12], "oauth_start": 6, "random": [6, 11], "url": [6, 7, 11, 12], "img": 6, "alt": 6, "height": 6, "40": 6, "width": 6, "139": 6, "edg": 6, "add_to_slack": 6, "png": [6, 11], "srcset": 6, "1x": 6, "2x": 6, "domain": [6, 8, 11], "webpag": 6, "callback": [6, 7, 9, 11], "goe": 6, "okai": 6, "back": [6, 7], "specifi": [6, 8, 11], "give": [6, 7], "oauth_callback": 6, "prepar": 6, "oauth_respons": 6, "redirect_uri": 6, "installed_enterpris": 6, "is_enterprise_instal": 6, "installed_team": 6, "authed_us": 6, "incoming_webhook": 6, "bot_token": 6, "doesn": [6, 10], "bot_id": 6, "enterprise_url": 6, "auth_test": 6, "true": [6, 10, 11], "app_id": 6, "enterprise_id": 6, "enterprise_nam": 6, "name": [6, 8, 9, 10, 11], "team_id": 6, "team_nam": 6, "bot_user_id": 6, "bot_scop": 6, "comma": [6, 11], "separ": [6, 11], "user_id": [6, 8, 11], "user_token": 6, "incoming_webhook_url": 6, "incoming_webhook_channel": 6, "channel": [6, 7, 9, 11, 12], "incoming_webhook_channel_id": 6, "channel_id": [6, 7, 11], "incoming_webhook_configuration_url": 6, "configuration_url": 6, "token_typ": 6, "els": [6, 11], "again": 6, "alreadi": [6, 7, 11], "expir": 6, "400": 6, "wrong": 6, "now": [6, 10], "choos": [6, 9], "right": 6, "slackapierror": [6, 11], "signatureverifi": [6, 11, 12], "signing_secret": [6, 12], "slack_signing_secret": [6, 11, 12], "signature_verifi": [6, 11, 12], "post": [6, 7, 8, 11, 12], "slack_app": [6, 11, 12], "is_valid": [6, 12], "bodi": [6, 11, 12], "get_data": [6, 11, 12], "timestamp": [6, 9, 11, 12], "header": [6, 11, 12], "x": [6, 12], "invalid": [6, 11, 12], "403": [6, 11, 12], "slash": [6, 9, 12], "invoc": [6, 12], "form": [6, 11, 12], "open": [6, 9, 11], "modal": [6, 9], "find_bot": 6, "trigger_id": [6, 9, 11], "views_open": [6, 9, 11], "view": [6, 9, 11], "callback_id": [6, 9, 11], "titl": [6, 9, 11], "plain_text": [6, 9, 11], "text": [6, 7, 9, 11, 12], "awesom": [6, 11], "block": [6, 9, 11, 12], "input": [6, 11], "block_id": [6, 11], "b": [6, 11], "label": [6, 11], "element": [6, 11], "action_id": [6, 11], "plain_text_input": [6, 11], "fail": [6, 11], "due": [6, 11], "elif": 6, "submiss": [6, 11], "load": [6, 11], "view_submiss": [6, 9, 11], "submitted_data": [6, 11], "indic": [6, 11], "unsupport": 6, "pattern": 6, "404": [6, 11, 12], "solut": 6, "abov": [6, 11], "servic": [6, 8, 12], "profil": 6, "wa": [6, 11], "recent": 6, "upgrad": [6, 7], "specif": [6, 9, 10], "9": [6, 11], "oauth_config": 6, "redirect_url": 6, "email": [6, 8], "openidconnectauthorizeurlgener": 6, "easili": 6, "nonc": 6, "perform": [6, 9], "sanic": 6, "directori": 6, "base": 7, "allow": [7, 9, 11], "prefer": [7, 9], "push": [7, 11], "along": 7, "instead": [7, 9, 10, 11, 12], "contain": [7, 11], "some": [7, 10, 11], "aren": 7, "app_home_open": 7, "d": 7, "adaptor": 7, "rtmclient": 7, "driven": 7, "architectur": 7, "simpli": [7, 10, 11], "occur": 7, "execut": 7, "In": [7, 9, 11], "watch": 7, "hello": [7, 9, 11, 12], "say_hello": 7, "hi": 7, "classic": 7, "plain": 7, "even": [7, 8], "encourag": 7, "newer": [7, 10], "_v2": 7, "latter": 7, "legaci": 7, "version": [7, 9], "go": [7, 9, 10, 11, 12], "next": 7, "dict": [7, 11], "thread_t": [7, 11], "usernam": [7, 8], "format": [7, 11], "either": [7, 8, 9, 11], "w": [7, 8], "web_client": [7, 9], "chat_postmessag": [7, 11], "resolv": [7, 10], "run_on": 7, "slack_token": [7, 11], "rtm_client": 7, "v": 7, "By": [7, 11], "establish": [7, 9], "convers": 10, "connect_method": [], "instanti": [], "larger": [], "slow": [], "unreli": [], "1358878749": 7, "000002": [7, 11], "u023becgf": 7, "sign": 8, "sso": 8, "ident": 8, "peopl": [8, 11], "across": 8, "varieti": 8, "system": 8, "cross": 8, "myriad": 8, "behav": 8, "slightli": [8, 11], "differ": [8, 9, 11], "fetch": 8, "search_us": 8, "start_index": 8, "count": 8, "100": 8, "filter": 8, "eq": 8, "carli": 8, "similarli": 8, "search_group": 8, "shape": 8, "object": [8, 11], "10": 8, "delet": [8, 11], "useremail": 8, "user_nam": 8, "argument": [8, 9, 11], "address": [8, 10], "automat": [8, 10], "convert": 8, "cal": 8, "given_nam": 8, "c": 8, "family_nam": 8, "henderson": 8, "uniqu": 8, "creation_result": 8, "create_us": 8, "patch": 8, "exist": [8, 10, 11], "resourc": 8, "overwrit": 8, "patch_result": 8, "patch_us": 8, "partial_us": 8, "chenderson": 8, "put": 8, "user_to_upd": 8, "update_result": 8, "update_us": 8, "deactiv": 8, "should": [8, 11], "delete_result": 8, "delete_us": 8, "lastli": 8, "main": [8, 9], "2": 8, "interact": [9, 11], "off": [9, 11], "left": [9, 11], "pane": 9, "turn": 9, "home": 9, "under": 9, "show": [9, 11], "tab": 9, "subscript": 9, "expand": 9, "subscrib": 9, "select": 9, "im": [9, 11], "sent": 9, "itself": [9, 11], "shortcut": [9, 11], "global": [9, 11], "short": [9, 10, 11], "descript": 9, "greet": 9, "reaction": [9, 11], "emoji": [9, 11], "reacji": 9, "xapp": 9, "xoxp": 9, "app_token": 9, "slack_app_token": 9, "a111": 9, "xyz": 9, "socketmoderespons": 9, "socketmoderequest": 9, "req": 9, "events_api": 9, "acknowledg": [9, 12], "anywai": 9, "envelope_id": 9, "send_socket_mode_respons": 9, "subtyp": 9, "reactions_add": [9, 11], "ey": 9, "welcom": 9, "bye": 9, "mrkdwn": [9, 11, 12], "close": [9, 11], "socket_mode_request_listen": 9, "stop": 9, "thread": [9, 11], "wait": [9, 11], "cover": [9, 11], "3rd": 9, "parti": [9, 11], "websocket_cli": 9, "pockag": 9, "apart": [9, 10], "asyncwebcli": [9, 10], "sleep": [9, 11], "float": 9, "inf": 9, "websit": 10, "live": 10, "befor": [10, 11], "howev": [10, 11], "mainten": 10, "successor": 10, "introduc": 10, "renam": 10, "warn": 10, "mean": 10, "longer": [10, 11], "run_async": 10, "legacywebcli": 10, "sorri": 10, "inconveni": 10, "txt": 10, "sinc": [10, 11], "technic": 10, "biggest": 10, "reason": 10, "box": [10, 11], "secondari": 10, "consist": 10, "long": [10, 11], "confus": 10, "between": [10, 11], "replac": 10, "your_app": 10, "xarg": 10, "sed": 10, "similar": 10, "manual": 10, "without": [10, 11], "userwarn": 10, "info": [10, 11], "won": [10, 11], "term": 10, "asyncwebhookcli": 10, "explicitli": 10, "unlik": 10, "synchron": 10, "highli": 10, "straight": 10, "forward": 10, "natur": 10, "complex": 11, "than": 11, "integr": 11, "practic": 11, "fulli": 11, "site": 11, "One": 11, "primari": 11, "dm": 11, "anoth": 11, "person": 11, "otherwis": 11, "not_in_channel": 11, "channel_not_found": 11, "public": 11, "join": 11, "postmessag": 11, "c0xxxxxx": 11, "tada": 11, "ok": [11, 12], "fals": 11, "assert": [11, 12], "str": [11, 12], "invalid_auth": 11, "ephemer": 11, "visibl": 11, "assign": 11, "nearli": 11, "regular": 11, "chat_postephemer": 11, "silent": 11, "u0xxxxxxx": 11, "postephemer": 11, "kit": [11, 12], "though": 11, "interfac": 11, "compos": 11, "custom": 11, "layout": 11, "arrai": 11, "danni": 11, "torrenc": 11, "properti": 11, "overlook": 11, "hotel": 11, "n": [11, 12], "star": 11, "door": 11, "had": 11, "ax": 11, "hole": 11, "guest": 11, "room": 11, "237": 11, "far": 11, "rowdi": 11, "whole": 11, "place": 11, "felt": 11, "1920": 11, "accessori": 11, "imag": 11, "image_url": 11, "pexel": 11, "photo": 11, "750319": 11, "jpeg": 11, "alt_text": 11, "haunt": 11, "field": 11, "averag": 11, "n1": 11, "prototyp": 11, "greater": 11, "context": 11, "repli": [11, 12], "origin": 11, "linear": 11, "timelin": 11, "becom": 11, "parent": 11, "appear": 11, "releg": 11, "kind": 11, "fork": 11, "descend": 11, "1476746830": 11, "000003": 11, "reply_broadcast": 11, "german": 11, "therefor": 11, "notif": 11, "attach": 11, "broadcast": 11, "actual": 11, "articl": 11, "reflect": 11, "chat_upd": 11, "special": 11, "consider": 11, "sometim": 11, "chat_delet": 11, "1476745373": 11, "quickli": 11, "respond": 11, "purpos": 11, "vote": 11, "fun": 11, "comment": 11, "file_com": 11, "combin": 11, "c0xxxxxxx": 11, "thumbsup": 11, "1234567890": 11, "123456": 11, "reactions_remov": 11, "upload": 11, "onto": 11, "files_upload": 11, "c3ukjtqac": 11, "pdf": 11, "remot": 11, "extern": 11, "storag": 11, "files_remote_add": 11, "external_id": 11, "hand": 11, "deck": 11, "12345": 11, "external_url": 11, "preview_imag": 11, "preview": 11, "displai": 11, "unifi": 11, "privat": 11, "newest": 11, "conversations_open": 11, "multi": 11, "number": 11, "suppli": 11, "conversations_cr": 11, "8": 11, "resum": 11, "subsequ": 11, "w123456789": 11, "u987654321": 11, "letter": 11, "hyphen": 11, "underscor": 11, "fewer": 11, "80": 11, "charact": 11, "is_priv": 11, "channel_nam": 11, "my": 11, "round": 11, "conversations_arch": 11, "conversations_list": 11, "interest": 11, "public_channel": 11, "private_channel": 11, "mpim": 11, "archiv": 11, "exclud": 11, "exclude_archiv": 11, "metadata": 11, "conversations_info": 11, "include_local": 11, "boolean": 11, "local": 11, "include_num_memb": 11, "c031415926": 11, "conversations_memb": 11, "c16180339": 11, "social": 11, "hub": 11, "hop": 11, "conversations_join": 11, "c0xxxxxxy": 11, "already_in_channel": 11, "cannot": 11, "invit": 11, "leav": 11, "conversations_leav": 11, "c27182818": 11, "collect": 11, "dynam": 11, "focus": 11, "surfac": 11, "jsonifi": 11, "is_valid_request": 11, "flask_env": 11, "tell": 11, "current": 11, "response_act": 11, "modifi": 11, "block_act": 11, "private_metadata": 11, "views_upd": 11, "view_id": 11, "hash": 11, "cancel": 11, "per": 11, "second": 11, "burst": 11, "period": 11, "exce": 11, "grace": 11, "fallback": [11, 12], "hit": 11, "until": 11, "veri": 11, "might": 11, "deal": 11, "wrapper": 11, "send_slack_messag": 11, "result": 11, "status_cod": [11, 12], "delai": 11, "int": 11, "rais": 11, "bit": 11, "releas": 11, "hurri": 11, "api_cal": 11, "api_method": 11, "world": 11, "asynchron": [11, 12], "beforehand": [11, 12], "slack_api_token": 11, "post_messag": 11, "keyword": 11, "got": 11, "simplest": [11, 12], "webhookcli": 12, "associ": 12, "hook": 12, "t00000000": 12, "b00000000": 12, "xxxxxxxxxxxxxxxxxxxxxxxx": 12, "possibl": 12, "richer": 12, "fakelink": 12, "toemployeeprofil": 12, "fred": 12, "enriquez": 12, "devic": 12, "send_message_via_webhook": 12, "nov": 7, "30th": 7, "2021": 7, "_": []}, "objects": {}, "objtypes": {}, "objnames": {}, "titleterms": {"about": 0, "python": [0, 2, 3], "slack": [0, 3, 6], "sdk": [0, 3], "audit": 1, "log": 1, "api": [1, 8, 11], "client": [1, 7, 8, 9, 11, 12], "auditlogscli": 1, "asyncauditlogscli": 1, "retryhandl": [1, 8, 11, 12], "faq": 2, "document": 2, "instal": [2, 3, 4, 6], "issu": 2, "bug": 2, "report": 2, "featur": 2, "request": 2, "contribut": 2, "get": 3, "help": 3, "access": 4, "token": [4, 6], "workspac": 4, "oauth": 6, "modul": 6, "app": 6, "flow": 6, "lookup": 6, "sign": 6, "rtm": 7, "real": 7, "time": 7, "messag": [7, 11], "scim": 8, "scimclient": 8, "asyncscimcli": 8, "socket": 9, "mode": 9, "socketmodecli": 9, "support": 9, "librari": 9, "asyncio": 9, "base": 9, "migrat": 10, "guid": 10, "from": 10, "slackclient": 10, "2": 10, "x": 10, "1": 10, "web": 11, "file": 11, "convers": 11, "modal": 11, "rate": 11, "limit": 11, "call": 11, "ani": 11, "method": 11, "asyncwebcli": 11, "webhook": 12, "incom": 12, "response_url": 12, "asyncwebhookcli": 12}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 8, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx": 57}, "alltitles": {"About": [[0, "about"]], "Python Slack SDK": [[0, "product-name"], [3, "product-name"]], "Audit Logs API Client": [[1, "audit-logs-api-client"]], "AuditLogsClient": [[1, "auditlogsclient"]], "AsyncAuditLogsClient": [[1, "asyncauditlogsclient"]], "RetryHandler": [[1, "retryhandler"], [8, "retryhandler"], [11, "retryhandler"], [12, "retryhandler"]], "FAQ": [[2, "faq"]], "Python Documents": [[2, "python-documents"]], "Installation Issues": [[2, "installation-issues"]], "Bug Report": [[2, "bug-report"]], "Feature Requests": [[2, "feature-requests"]], "Contributions": [[2, "contributions"]], "Documentation": [[2, "documentation"]], "Installation": [[3, "installation"], [4, "installation"]], "Getting Help": [[3, "getting-help"]], "Access Tokens": [[4, "access-tokens"]], "Workspace Installations": [[4, "workspace-installations"]], "OAuth Modules": [[6, "oauth-modules"]], "App Installation Flow": [[6, "app-installation-flow"]], "Token Lookup": [[6, "token-lookup"]], "Sign in with Slack": [[6, "sign-in-with-slack"]], "RTM Client": [[7, "rtm-client"]], "Real Time Messaging (RTM)": [[7, "real-time-messaging-rtm"]], "SCIM API Client": [[8, "scim-api-client"]], "SCIMClient": [[8, "scimclient"]], "AsyncSCIMClient": [[8, "asyncscimclient"]], "Socket Mode Client": [[9, "socket-mode-client"]], "SocketModeClient": [[9, "socketmodeclient"]], "Supported Libraries": [[9, "supported-libraries"]], "Asyncio Based Libraries": [[9, "asyncio-based-libraries"]], "Migration Guide": [[10, "migration-guide"]], "From slackclient 2.x": [[10, "from-slackclient-2-x"]], "From slackclient 1.x": [[10, "from-slackclient-1-x"]], "Web Client": [[11, "web-client"]], "Messaging": [[11, "messaging"]], "Files": [[11, "files"]], "Conversations": [[11, "conversations"]], "Modals": [[11, "modals"]], "Rate Limits": [[11, "rate-limits"]], "Calling any API methods": [[11, "calling-any-api-methods"]], "AsyncWebClient": [[11, "asyncwebclient"]], "Webhook Client": [[12, "webhook-client"]], "Incoming Webhooks": [[12, "id1"]], "response_url": [[12, "response-url"]], "AsyncWebhookClient": [[12, "asyncwebhookclient"]]}, "indexentries": {}})
\ No newline at end of file
+Search.setIndex({"docnames": ["about", "audit-logs/index", "faq", "index", "installation/index", "metadata", "oauth/index", "real_time_messaging", "scim/index", "socket-mode/index", "v3-migration/index", "web/index", "webhook/index"], "filenames": ["about.rst", "audit-logs/index.rst", "faq.rst", "index.rst", "installation/index.rst", "metadata.rst", "oauth/index.rst", "real_time_messaging.rst", "scim/index.rst", "socket-mode/index.rst", "v3-migration/index.rst", "web/index.rst", "webhook/index.rst"], "titles": ["About", "Audit Logs API Client", "FAQ", "Python Slack SDK", "Installation", "<no title>", "OAuth Modules", "RTM Client", "SCIM API Client", "Socket Mode Client", "Migration Guide", "Web Client", "Webhook Client"], "terms": {"access": [0, 1, 6, 8, 11], "platform": [0, 3, 6, 7], "from": [0, 1, 2, 3, 4, 6, 7, 8, 9, 11, 12], "your": [0, 1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 12], "app": [0, 1, 3, 4, 7, 8, 9, 11, 12], "let": [0, 2, 4, 6, 9, 11], "you": [0, 1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 12], "build": [0, 3, 4, 6, 11], "web": [0, 3, 6, 7, 9, 10], "api": [0, 2, 3, 4, 6, 7, 9, 10, 12], "i": [0, 1, 2, 4, 6, 7, 8, 9, 10, 11, 12], "proudli": 0, "maintain": 0, "develop": [0, 3, 7, 11], "tool": [0, 1, 8], "team": [0, 4, 6, 7, 11], "licens": 0, "code": [0, 1, 2, 3, 4, 6, 7, 8, 10, 11, 12], "conduct": 0, "contribut": 0, "contributor": [0, 2], "agreement": 0, "opensourc": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], "com": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], "slackapi": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], "set": [1, 2, 3, 4, 6, 8, 9, 11, 12], "monitor": 1, "what": [1, 2, 3, 6], "": [1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 12], "happen": [1, 3, 6], "enterpris": [1, 6], "grid": [1, 6], "organ": 1, "The": [1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 12], "can": [1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 12], "us": [1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 12], "secur": 1, "inform": [1, 4, 7, 9, 11], "event": [1, 3, 6, 7, 9, 11, 12], "manag": [1, 3, 6, 8, 9], "siem": 1, "provid": [1, 4, 6, 8, 10, 11], "an": [1, 2, 4, 6, 7, 8, 9, 11, 12], "analysi": 1, "how": [1, 4, 6, 8, 11, 12], "slack": [1, 2, 4, 5, 7, 8, 9, 10, 11, 12], "being": [1, 2, 11], "also": [1, 3, 7, 8, 10, 11, 12], "thi": [1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 12], "write": [1, 2, 4, 6, 9, 11], "own": [1, 6, 8, 9, 11, 12], "applic": [1, 4, 11], "see": [1, 4, 6, 7, 11], "member": [1, 11], "ar": [1, 2, 3, 4, 8, 9, 10, 11, 12], "follow": [1, 2, 3, 6, 9, 11], "instruct": 1, "document": [1, 3, 4, 6, 7, 8, 9, 11, 12], "get": [1, 4, 6, 9, 11, 12], "valid": [1, 4, 6, 11], "token": [1, 2, 7, 8, 9, 11], "need": [1, 2, 3, 4, 6, 7, 9, 10, 11], "instal": [1, 9, 11, 12], "individu": 1, "workspac": [1, 6, 9, 11], "within": 1, "python": [1, 4, 5, 6, 7, 8, 9, 10, 11, 12], "modul": [1, 2, 3, 8, 9, 10, 11, 12], "avail": [1, 2, 3, 4, 6, 8, 9, 11, 12], "http": [1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 12], "dev": [1, 2, 3, 6, 8, 9, 10, 11, 12], "sdk": [1, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12], "doc": [1, 2, 3, 6, 7, 8, 9, 11, 12], "slack_sdk": [1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 12], "oauth": [1, 3, 4, 8, 9, 10, 11], "admin": [1, 8], "scope": [1, 4, 6, 7, 8, 9, 11], "requir": [1, 4, 6, 8, 9, 10, 11, 12], "like": [1, 7, 9, 10, 11], "endpoint": [1, 4, 6, 11], "essenti": 1, "part": [1, 3], "To": [1, 4, 6, 8, 9, 11, 12], "learn": [1, 6, 7, 8, 11, 12], "about": [1, 2, 4, 6, 7, 8, 11], "paramet": [1, 4, 6, 11], "check": [1, 4, 6, 8, 11, 12], "out": [1, 4, 8, 9, 10, 11], "guid": 1, "more": [1, 2, 4, 7, 8, 9, 10, 11, 12], "data": [1, 3, 4, 6, 7, 8, 11], "structur": [1, 8], "api_respons": [1, 3, 11], "typed_bodi": 1, "class": [1, 8, 10, 11, 12], "sourc": [1, 2, 3, 4, 8, 9, 10, 11, 12], "import": [1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 12], "o": [1, 2, 4, 6, 7, 8, 9, 11, 12], "audit_log": [1, 3], "environ": [1, 2, 4, 6, 7, 8, 9, 11, 12], "slack_org_admin_user_token": [1, 8], "action": [1, 10, 12], "user_login": 1, "limit": [1, 3, 8, 12], "1": [1, 8, 9, 11, 12], "v1": [1, 7, 8], "logsrespons": 1, "If": [1, 2, 3, 4, 6, 7, 9, 10, 11], "would": [1, 4, 7], "scheme": 1, "method": [1, 3, 4, 6, 7, 8, 9, 12], "schema": 1, "keen": [1, 8], "asyncio": [1, 6, 8, 10, 11, 12], "scim": [1, 3], "call": [1, 4, 6, 7, 8, 9, 10, 12], "we": [1, 2, 3, 4, 7, 8, 10, 11], "offer": [1, 3, 8, 9], "asyncscimcli": 1, "reli": [1, 8, 10, 11, 12], "aiohttp": [1, 8, 9, 10, 11, 12], "librari": [1, 8, 10, 11, 12], "async_cli": [1, 3, 8, 9, 11, 12], "await": [1, 8, 9, 10, 11, 12], "With": [1, 6, 8, 11, 12], "default": [1, 6, 7, 8, 11, 12], "onli": [1, 8, 9, 10, 11, 12], "connectionerrorretryhandl": [1, 8, 11, 12], "its": [1, 2, 3, 6, 7, 8, 9, 11, 12], "configur": [1, 4, 7, 8, 9, 11, 12], "one": [1, 2, 4, 7, 8, 9, 10, 11, 12], "retri": [1, 8, 11, 12], "manner": [1, 8, 11, 12], "exponenti": [1, 8, 11, 12], "backoff": [1, 8, 11, 12], "jitter": [1, 8, 11, 12], "enabl": [1, 3, 8, 9, 11, 12], "handler": [1, 6, 8, 11, 12], "encount": [1, 2, 8, 11, 12], "connect": [1, 3, 6, 7, 8, 9, 11, 12], "relat": [1, 3, 8, 11, 12], "failur": [1, 8, 11, 12], "e": [1, 3, 6, 8, 11, 12], "g": [1, 8, 10, 11, 12], "reset": [1, 8, 11, 12], "peer": [1, 8, 11, 12], "other": [1, 4, 8, 9, 10, 11, 12], "pass": [1, 4, 7, 8, 9, 11, 12], "list": [1, 2, 4, 7, 8, 11, 12], "constructor": [1, 8, 11, 12], "For": [1, 4, 7, 8, 10, 11, 12], "instanc": [1, 8, 11, 12], "add": [1, 2, 4, 6, 8, 9, 10, 11, 12], "built": [1, 4, 8, 9, 11, 12], "ratelimiterrorretryhandl": [1, 8, 11, 12], "wai": [1, 3, 6, 8, 9, 10, 11, 12], "doe": [1, 6, 7, 8, 11, 12], "when": [1, 3, 6, 7, 8, 11, 12], "statu": [1, 8, 11, 12], "429": [1, 8, 11, 12], "return": [1, 4, 6, 8, 11, 12], "http_retri": [1, 8, 11, 12], "builtin_handl": [1, 8, 11, 12], "rate_limit_handl": [1, 8, 11, 12], "max_retry_count": [1, 8, 11, 12], "rate": [1, 8, 12], "error": [1, 2, 6, 8, 11, 12], "well": [1, 6, 8, 11, 12], "retry_handl": [1, 8, 11, 12], "append": [1, 8, 9, 11, 12], "creat": [1, 2, 6, 7, 8, 9, 11, 12], "ones": [1, 8, 9, 11, 12], "quit": [1, 8, 11, 12], "simpl": [1, 4, 8, 9, 10, 11, 12], "defin": [1, 4, 8, 11, 12], "new": [1, 2, 4, 6, 7, 8, 9, 10, 11, 12], "inherit": [1, 8, 11, 12], "asyncretryhandl": [1, 8, 11, 12], "implement": [1, 6, 8, 9, 11, 12], "intern": [1, 8, 10, 11, 12], "can_retri": [1, 8, 11, 12], "prepare_for_next_retri": [1, 8, 11, 12], "properli": [1, 8, 10, 11, 12], "socket": [1, 3, 7, 8, 11, 12], "type": [1, 6, 7, 8, 9, 11, 12], "option": [1, 6, 8, 10, 11, 12], "retryst": [1, 8, 11, 12], "httprequest": [1, 8, 11, 12], "httprespons": [1, 8, 11, 12], "builtin_interval_calcul": [1, 8, 11, 12], "backoffretryintervalcalcul": [1, 8, 11, 12], "randomjitt": [1, 8, 11, 12], "myretryhandl": [1, 8, 11, 12], "def": [1, 4, 6, 7, 8, 9, 11, 12], "_can_retri": [1, 8, 11, 12], "self": [1, 8, 11, 12], "state": [1, 4, 6, 8, 11, 12], "request": [1, 3, 4, 6, 8, 9, 11, 12], "respons": [1, 4, 6, 7, 8, 9, 11, 12], "none": [1, 6, 8, 9, 11, 12], "except": [1, 6, 8, 11, 12], "bool": [1, 8, 11, 12], "errno": [1, 8, 11, 12], "104": [1, 8, 11, 12], "isinst": [1, 8, 11, 12], "interval_calcul": [1, 8, 11, 12], "backoff_factor": [1, 8, 11, 12], "0": [1, 2, 8, 10, 11, 12], "5": [1, 8, 11, 12], "async": [1, 8, 9, 10, 11, 12], "prefix": [1, 8, 9, 11, 12], "correspond": [1, 3, 4, 7, 8, 11, 12], "all": [1, 2, 4, 6, 8, 9, 10, 11, 12], "those": [1, 3, 7, 8, 10, 11, 12], "compat": [1, 6, 8, 9, 10, 11, 12], "test": [1, 2, 3, 8, 11, 12], "detail": [1, 6, 7, 8, 9, 11, 12], "recommend": [2, 3, 4, 7, 10], "virtualenv": 2, "venv": [2, 3], "up": 2, "runtim": [2, 4], "dedic": 2, "virtual": [2, 3], "env": [2, 3], "run": [2, 3, 4, 8, 9, 11, 12], "script": 2, "m": [2, 3], "activ": [2, 3], "window": 2, "bin": [2, 3], "pypi": [2, 3, 9, 10], "packag": [2, 3, 10], "pip": [2, 3, 11, 12], "3": [2, 3], "variabl": [2, 4], "command": [2, 6, 9, 12], "export": [2, 11], "slack_bot_token": [2, 4, 7, 9, 11], "xoxb": [2, 4, 9, 11], "Then": [2, 4], "verifi": [2, 3, 4, 6, 12], "work": [2, 3, 4, 9, 10, 11, 12], "repl": [2, 3], "start": [2, 4, 6, 7, 9, 10, 11], "just": [2, 3, 4, 9, 10, 11, 12], "log": [2, 3, 6, 11], "webclient": [2, 3, 4, 6, 9, 10, 11], "basicconfig": [2, 3, 11], "level": [2, 3, 9, 11], "debug": [2, 3, 11], "client": [2, 3, 4, 6, 10], "re": [2, 3, 4, 6, 9, 10, 11], "api_test": [2, 3], "As": [2, 10], "deprec": [2, 7, 10], "switch": [2, 10], "That": [2, 10, 11], "said": [2, 10, 11, 12], "mai": [2, 6, 8, 11], "still": [2, 6, 10], "old": 2, "sai": [2, 7, 10, 11], "attributeerror": 2, "ha": [2, 4, 7, 10, 11], "attribut": [2, 8, 11], "find": [2, 10], "both": 2, "output": 2, "try": [2, 3, 6, 9, 11], "remov": [2, 10, 11], "uninstal": [2, 6], "reinstal": [2, 4], "great": 2, "thank": [2, 6, 11], "u": [2, 3, 7, 8], "know": [2, 4, 6], "tracker": [2, 3], "feel": [2, 11], "particularli": 2, "ambiti": 2, "why": 2, "submit": [2, 6, 9, 11], "pull": [2, 3], "fix": 2, "There": [2, 9, 10], "alwai": [2, 3], "someth": [2, 6, 10], "could": 2, "ad": [2, 7, 11], "discuss": [2, 3], "around": 2, "propos": 2, "good": [2, 3, 9], "yourself": 2, "love": 2, "feedback": 2, "help": [2, 6], "don": [2, 4, 6, 7, 9, 10, 11], "t": [2, 4, 6, 7, 9, 10, 11], "bite": 2, "much": [2, 6], "excel": 2, "question": [2, 3], "first": [2, 6, 9, 10], "pleas": [2, 4, 6, 7, 10], "have": [2, 7, 9, 10, 11, 12], "look": [2, 6, 9, 11], "our": [2, 4, 7, 11], "gener": [2, 3, 4, 6, 11, 12], "guidelin": 2, "done": 2, "while": [2, 7, 10, 11], "super": 2, "excit": [2, 11], "incorpor": 2, "coupl": 2, "thing": [2, 9, 11], "want": [2, 6, 11], "make": [2, 10, 11], "sure": [2, 11], "ve": [2, 4], "given": [2, 6, 11], "thought": 2, "unit": 2, "But": 2, "aim": 2, "increas": 2, "coverag": [2, 10], "rather": 2, "expect": [2, 10], "written": 2, "ensur": 2, "continu": [2, 11], "futur": 2, "thei": [2, 3, 11], "break": [2, 10], "think": 2, "concret": 2, "case": [2, 6], "section": [2, 4, 6, 7, 9, 11, 12], "appropri": [2, 8], "includ": [2, 4, 6, 8, 11, 12], "complet": [2, 4, 6, 7], "sampl": 2, "program": [2, 9, 11, 12], "demonstr": [2, 6], "forget": [2, 4, 9, 11], "updat": [2, 8, 11], "changelog": 2, "rst": 2, "two": 2, "item": [2, 11], "total": 2, "dai": 2, "importantli": 2, "user": [2, 3, 4, 6, 7, 8, 9, 11, 12], "On": [2, 8, 9], "note": [2, 6, 7, 9, 11], "project": [2, 3, 9, 10], "sphinx": 2, "edit": 2, "mani": [2, 11], "restructuredtext": 2, "file": 2, "src": [2, 6], "folder": 2, "ll": [2, 4, 11], "rebuild": 2, "It": [2, 3, 6, 8, 12], "step": [2, 6, 10], "insid": [2, 7], "v3": [2, 6, 10, 11], "sh": 2, "do": [2, 4, 6, 7, 9, 11], "content": 2, "sever": 3, "each": [3, 11], "deliv": 3, "capabl": 3, "so": [3, 10, 11, 12], "pick": 3, "fit": 3, "small": 3, "power": 3, "independ": 3, "seamlessli": 3, "togeth": [3, 11], "too": [3, 6, 11, 12], "featur": [3, 4, 6, 9, 10], "send": [3, 7, 9, 11, 12], "queri": [3, 4, 6], "ani": [3, 4, 6, 7, 9, 10, 12], "over": [3, 9, 11], "200": [3, 6, 11, 12], "webhook": [3, 10], "response_url": 3, "messag": [3, 9, 12], "incom": [3, 6], "mode": [3, 7, 10], "receiv": [3, 7, 9, 11], "socket_mod": [3, 9], "setup": [3, 4], "authent": [3, 6, 11, 12], "flow": [3, 4, 10], "v2": [3, 4, 6, 7, 10], "openid": [3, 6], "audit": 3, "util": 3, "provis": [3, 8], "account": [3, 8], "group": [3, 8, 11], "rtm": [3, 10], "listen": [3, 9], "websocket": [3, 7, 9], "rtm_v2": [3, 7], "signatur": [3, 6, 11, 12], "verif": 3, "server": [3, 6, 9], "ui": [3, 6], "builder": [3, 11], "construct": 3, "compon": 3, "easi": [3, 9], "model": [3, 7, 9, 11], "support": [3, 7, 8, 10], "6": 3, "higher": 3, "Of": 3, "cours": 3, "directli": [3, 11], "git": 3, "clone": 3, "github": 3, "cd": 3, "python3": [3, 11], "And": 3, "save": [3, 4, 6, 11], "few": [3, 9, 10], "line": 3, "py": [3, 4, 10, 11], "sy": 3, "stuck": [3, 11], "here": [3, 6, 7, 8, 9, 10, 11], "best": [3, 11], "assist": 3, "through": [3, 6], "issu": [3, 6, 7], "bug": 3, "report": 3, "visit": [3, 9], "commun": [3, 7], "bond": 3, "fellow": 3, "keep": [4, 7], "safe": 4, "where": [4, 6], "depend": [4, 9, 10, 11, 12], "grant": 4, "potenti": 4, "abil": [4, 7], "read": [4, 6, 7], "treat": 4, "password": 4, "publish": 4, "them": [4, 11], "share": [4, 6, 11], "avoid": 4, "111": [4, 9], "222": [4, 9], "xxxxx": 4, "persist": [4, 6], "databas": 4, "myapp": 4, "retriev": [4, 6, 11], "kei": 4, "addit": [4, 9, 11], "store": [4, 6, 11], "credenti": [4, 7], "page": [4, 7, 9, 11], "singl": [4, 8, 11], "entir": 4, "onc": 4, "click": [4, 6, 9], "button": [4, 6, 11], "found": [4, 8], "permiss": [4, 7, 9], "after": [4, 6, 7, 11], "been": [4, 7, 11], "must": [4, 7, 8, 11], "chang": [4, 9, 10, 11], "take": [4, 6, 11], "effect": 4, "multipl": 4, "intend": 4, "handl": [4, 6, 7, 11, 12], "via": [4, 12], "industri": 4, "standard": [4, 6, 10, 11, 12], "protocol": 4, "exchang": [4, 6, 11], "facilit": 4, "webserv": 4, "exampl": [4, 6, 7, 8, 11], "flask": [4, 6, 11, 12], "id": [4, 6, 7, 8, 9, 11], "secret": 4, "appli": 4, "determin": 4, "function": [4, 7, 9], "everi": 4, "wish": [4, 11], "order": 4, "abl": 4, "review": [4, 11], "full": [4, 6, 11], "client_id": [4, 6], "slack_client_id": [4, 6], "client_secret": [4, 6], "slack_client_secret": [4, 6], "oauth_scop": 4, "slack_scop": 4, "__name__": [4, 6, 11, 12], "initi": [4, 9], "link": [4, 7], "begin": [4, 8], "author": [4, 6], "pre": 4, "direct": [4, 9, 11], "accept": [4, 11], "refus": 4, "rout": [4, 6, 11, 12], "pre_instal": 4, "randomli": 4, "time": [4, 10, 11], "valu": [4, 6, 8, 11], "href": [4, 6], "f": [4, 6, 7, 11, 12], "agre": 4, "redirect": [4, 6], "auth": [4, 6], "which": [4, 6, 11], "string": [4, 6, 11], "param": [4, 6, 11], "final": 4, "oauth_redirect": [4, 6], "post_instal": 4, "code_param": 4, "arg": [4, 6], "empti": [4, 8, 11], "oauth_v2_access": [4, 6], "A": [4, 11], "success": 4, "yield": 4, "json": [4, 6, 11], "payload": [4, 6, 7, 9, 11, 12], "least": [4, 8], "bot": [4, 6, 7, 9, 11], "print": [4, 6, 8, 11], "environment": 4, "later": 4, "access_token": [4, 6], "succeed": 4, "__main__": [4, 11], "localhost": [4, 11], "3000": [4, 11], "basic": [4, 7, 9, 11], "usag": 4, "explain": 6, "easier": [6, 11], "same": [6, 9, 11], "bolt": 6, "stack": 6, "framework": 6, "most": [6, 7, 10, 11], "At": 6, "end": 6, "gain": 6, "refer": [6, 7, 8, 10, 11], "necessari": 6, "valida": 6, "process": [6, 9], "installationstor": 6, "fileinstallationstor": 6, "oauthstatestor": 6, "consum": 6, "side": 6, "fileoauthstatestor": 6, "authorizeurlgener": 6, "suffici": 6, "snippet": [6, 7], "below": [6, 7, 9, 11], "installation_stor": 6, "state_stor": 6, "expiration_second": 6, "300": 6, "base_dir": 6, "authorize_url_gener": 6, "app_ment": 6, "chat": [6, 11], "user_scop": 6, "search": 6, "make_respons": [6, 11, 12], "oauth_start": 6, "random": [6, 11], "url": [6, 7, 11, 12], "img": 6, "alt": 6, "height": 6, "40": 6, "width": 6, "139": 6, "edg": 6, "add_to_slack": 6, "png": [6, 11], "srcset": 6, "1x": 6, "2x": 6, "domain": [6, 8, 11], "webpag": 6, "callback": [6, 7, 9, 11], "goe": 6, "okai": 6, "back": [6, 7], "specifi": [6, 8, 11], "give": [6, 7], "oauth_callback": 6, "prepar": 6, "oauth_respons": 6, "redirect_uri": 6, "installed_enterpris": 6, "is_enterprise_instal": 6, "installed_team": 6, "authed_us": 6, "incoming_webhook": 6, "bot_token": 6, "doesn": [6, 10], "bot_id": 6, "enterprise_url": 6, "auth_test": 6, "true": [6, 10, 11], "app_id": 6, "enterprise_id": 6, "enterprise_nam": 6, "name": [6, 8, 9, 10, 11], "team_id": 6, "team_nam": 6, "bot_user_id": 6, "bot_scop": 6, "comma": [6, 11], "separ": [6, 11], "user_id": [6, 8, 11], "user_token": 6, "incoming_webhook_url": 6, "incoming_webhook_channel": 6, "channel": [6, 7, 9, 11, 12], "incoming_webhook_channel_id": 6, "channel_id": [6, 7, 11], "incoming_webhook_configuration_url": 6, "configuration_url": 6, "token_typ": 6, "els": [6, 11], "again": 6, "alreadi": [6, 7, 11], "expir": 6, "400": 6, "wrong": 6, "now": [6, 10], "choos": [6, 9], "right": 6, "slackapierror": [6, 11], "signatureverifi": [6, 11, 12], "signing_secret": [6, 12], "slack_signing_secret": [6, 11, 12], "signature_verifi": [6, 11, 12], "post": [6, 7, 8, 11, 12], "slack_app": [6, 11, 12], "is_valid": [6, 12], "bodi": [6, 11, 12], "get_data": [6, 11, 12], "timestamp": [6, 9, 11, 12], "header": [6, 11, 12], "x": [6, 12], "invalid": [6, 11, 12], "403": [6, 11, 12], "slash": [6, 9, 12], "invoc": [6, 12], "form": [6, 11, 12], "open": [6, 9, 11], "modal": [6, 9], "find_bot": 6, "trigger_id": [6, 9, 11], "views_open": [6, 9, 11], "view": [6, 9, 11], "callback_id": [6, 9, 11], "titl": [6, 9, 11], "plain_text": [6, 9, 11], "text": [6, 7, 9, 11, 12], "awesom": [6, 11], "block": [6, 9, 11, 12], "input": [6, 11], "block_id": [6, 11], "b": [6, 11], "label": [6, 11], "element": [6, 11], "action_id": [6, 11], "plain_text_input": [6, 11], "fail": [6, 11], "due": [6, 11], "elif": 6, "submiss": [6, 11], "load": [6, 11], "view_submiss": [6, 9, 11], "submitted_data": [6, 11], "indic": [6, 11], "unsupport": 6, "pattern": 6, "404": [6, 11, 12], "solut": 6, "abov": [6, 11], "servic": [6, 8, 12], "profil": 6, "wa": [6, 11], "recent": 6, "upgrad": [6, 7], "specif": [6, 9, 10], "9": [6, 11], "oauth_config": 6, "redirect_url": 6, "email": [6, 8], "openidconnectauthorizeurlgener": 6, "easili": 6, "nonc": 6, "perform": [6, 9], "sanic": 6, "directori": 6, "base": 7, "allow": [7, 9, 11], "prefer": [7, 9], "push": [7, 11], "along": 7, "instead": [7, 9, 10, 11, 12], "contain": [7, 11], "some": [7, 10, 11], "aren": 7, "app_home_open": 7, "d": 7, "adaptor": 7, "rtmclient": 7, "driven": 7, "architectur": 7, "simpli": [7, 10, 11], "occur": 7, "execut": 7, "In": [7, 9, 11], "watch": 7, "hello": [7, 9, 11, 12], "say_hello": 7, "hi": 7, "classic": 7, "plain": 7, "even": [7, 8], "encourag": 7, "newer": [7, 10], "_v2": 7, "latter": 7, "legaci": 7, "version": [7, 9], "go": [7, 9, 10, 11, 12], "next": 7, "dict": [7, 11], "thread_t": [7, 11], "usernam": [7, 8], "format": [7, 11], "either": [7, 8, 9, 11], "w": [7, 8], "web_client": [7, 9], "chat_postmessag": [7, 11], "resolv": [7, 10], "run_on": 7, "slack_token": [7, 11], "rtm_client": 7, "v": 7, "By": [7, 11], "establish": [7, 9], "convers": 10, "connect_method": [], "instanti": [], "larger": [], "slow": [], "unreli": [], "1358878749": 7, "000002": [7, 11], "u023becgf": 7, "sign": 8, "sso": 8, "ident": 8, "peopl": [8, 11], "across": 8, "varieti": 8, "system": 8, "cross": 8, "myriad": 8, "behav": 8, "slightli": [8, 11], "differ": [8, 9, 11], "fetch": 8, "search_us": 8, "start_index": 8, "count": 8, "100": 8, "filter": 8, "eq": 8, "carli": 8, "similarli": 8, "search_group": 8, "shape": 8, "object": [8, 11], "10": 8, "delet": [8, 11], "useremail": 8, "user_nam": 8, "argument": [8, 9, 11], "address": [8, 10], "automat": [8, 10], "convert": 8, "cal": 8, "given_nam": 8, "c": 8, "family_nam": 8, "henderson": 8, "uniqu": 8, "creation_result": 8, "create_us": 8, "patch": 8, "exist": [8, 10, 11], "resourc": 8, "overwrit": 8, "patch_result": 8, "patch_us": 8, "partial_us": 8, "chenderson": 8, "put": 8, "user_to_upd": 8, "update_result": 8, "update_us": 8, "deactiv": 8, "should": [8, 11], "delete_result": 8, "delete_us": 8, "lastli": 8, "main": [8, 9], "2": 8, "interact": [9, 11], "off": [9, 11], "left": [9, 11], "pane": 9, "turn": 9, "home": 9, "under": 9, "show": [9, 11], "tab": 9, "subscript": 9, "expand": 9, "subscrib": 9, "select": 9, "im": [9, 11], "sent": 9, "itself": [9, 11], "shortcut": [9, 11], "global": [9, 11], "short": [9, 10, 11], "descript": 9, "greet": 9, "reaction": [9, 11], "emoji": [9, 11], "reacji": 9, "xapp": 9, "xoxp": 9, "app_token": 9, "slack_app_token": 9, "a111": 9, "xyz": 9, "socketmoderespons": 9, "socketmoderequest": 9, "req": 9, "events_api": 9, "acknowledg": [9, 12], "anywai": 9, "envelope_id": 9, "send_socket_mode_respons": 9, "subtyp": 9, "reactions_add": [9, 11], "ey": 9, "welcom": 9, "bye": 9, "mrkdwn": [9, 11, 12], "close": [9, 11], "socket_mode_request_listen": 9, "stop": 9, "thread": [9, 11], "wait": [9, 11], "cover": [9, 11], "3rd": 9, "parti": [9, 11], "websocket_cli": 9, "pockag": 9, "apart": [9, 10], "asyncwebcli": [9, 10], "sleep": [9, 11], "float": 9, "inf": 9, "websit": 10, "live": 10, "befor": [10, 11], "howev": [10, 11], "mainten": 10, "successor": 10, "introduc": 10, "renam": 10, "warn": 10, "mean": 10, "longer": [10, 11], "run_async": 10, "legacywebcli": 10, "sorri": 10, "inconveni": 10, "txt": 10, "sinc": [10, 11], "technic": 10, "biggest": 10, "reason": 10, "box": [10, 11], "secondari": 10, "consist": 10, "long": [10, 11], "confus": 10, "between": [10, 11], "replac": 10, "your_app": 10, "xarg": 10, "sed": 10, "similar": 10, "manual": 10, "without": [10, 11], "userwarn": 10, "info": [10, 11], "won": [10, 11], "term": 10, "asyncwebhookcli": 10, "explicitli": 10, "unlik": 10, "synchron": 10, "highli": 10, "straight": 10, "forward": 10, "natur": 10, "complex": 11, "than": 11, "integr": 11, "practic": 11, "fulli": 11, "site": 11, "One": 11, "primari": 11, "dm": 11, "anoth": 11, "person": 11, "otherwis": 11, "not_in_channel": 11, "channel_not_found": 11, "public": 11, "join": 11, "postmessag": 11, "c0xxxxxx": 11, "tada": 11, "ok": [11, 12], "fals": 11, "assert": [11, 12], "str": [11, 12], "invalid_auth": 11, "ephemer": 11, "visibl": 11, "assign": 11, "nearli": 11, "regular": 11, "chat_postephemer": 11, "silent": 11, "u0xxxxxxx": 11, "postephemer": 11, "kit": [11, 12], "though": 11, "interfac": 11, "compos": 11, "custom": 11, "layout": 11, "arrai": 11, "danni": 11, "torrenc": 11, "properti": 11, "overlook": 11, "hotel": 11, "n": [11, 12], "star": 11, "door": 11, "had": 11, "ax": 11, "hole": 11, "guest": 11, "room": 11, "237": 11, "far": 11, "rowdi": 11, "whole": 11, "place": 11, "felt": 11, "1920": 11, "accessori": 11, "imag": 11, "image_url": 11, "pexel": 11, "photo": 11, "750319": 11, "jpeg": 11, "alt_text": 11, "haunt": 11, "field": 11, "averag": 11, "n1": 11, "prototyp": 11, "greater": 11, "context": 11, "repli": [11, 12], "origin": 11, "linear": 11, "timelin": 11, "becom": 11, "parent": 11, "appear": 11, "releg": 11, "kind": 11, "fork": 11, "descend": 11, "1476746830": 11, "000003": 11, "reply_broadcast": 11, "german": 11, "therefor": 11, "notif": 11, "attach": 11, "broadcast": 11, "actual": 11, "articl": 11, "reflect": 11, "chat_upd": 11, "special": 11, "consider": 11, "sometim": 11, "chat_delet": 11, "1476745373": 11, "quickli": 11, "respond": 11, "purpos": 11, "vote": 11, "fun": 11, "comment": 11, "file_com": 11, "combin": 11, "c0xxxxxxx": 11, "thumbsup": 11, "1234567890": 11, "123456": 11, "reactions_remov": 11, "upload": 11, "onto": 11, "files_upload": 11, "c3ukjtqac": 11, "pdf": 11, "remot": 11, "extern": 11, "storag": 11, "files_remote_add": 11, "external_id": 11, "hand": 11, "deck": 11, "12345": 11, "external_url": 11, "preview_imag": 11, "preview": 11, "displai": 11, "unifi": 11, "privat": 11, "newest": 11, "conversations_open": 11, "multi": 11, "number": 11, "suppli": 11, "conversations_cr": 11, "8": 11, "resum": 11, "subsequ": 11, "w123456789": 11, "u987654321": 11, "letter": 11, "hyphen": 11, "underscor": 11, "fewer": 11, "80": 11, "charact": 11, "is_priv": 11, "channel_nam": 11, "my": 11, "round": 11, "conversations_arch": 11, "conversations_list": 11, "interest": 11, "public_channel": 11, "private_channel": 11, "mpim": 11, "archiv": 11, "exclud": 11, "exclude_archiv": 11, "metadata": 11, "conversations_info": 11, "include_local": 11, "boolean": 11, "local": 11, "include_num_memb": 11, "c031415926": 11, "conversations_memb": 11, "c16180339": 11, "social": 11, "hub": 11, "hop": 11, "conversations_join": 11, "c0xxxxxxy": 11, "already_in_channel": 11, "cannot": 11, "invit": 11, "leav": 11, "conversations_leav": 11, "c27182818": 11, "collect": 11, "dynam": 11, "focus": 11, "surfac": 11, "jsonifi": 11, "is_valid_request": 11, "flask_env": 11, "tell": 11, "current": 11, "response_act": 11, "modifi": 11, "block_act": 11, "private_metadata": 11, "views_upd": 11, "view_id": 11, "hash": 11, "cancel": 11, "per": 11, "second": 11, "burst": 11, "period": 11, "exce": 11, "grace": 11, "fallback": [11, 12], "hit": 11, "until": 11, "veri": 11, "might": 11, "deal": 11, "wrapper": 11, "send_slack_messag": 11, "result": 11, "status_cod": [11, 12], "delai": 11, "int": 11, "rais": 11, "bit": 11, "releas": 11, "hurri": 11, "api_cal": 11, "api_method": 11, "world": 11, "asynchron": [11, 12], "beforehand": [11, 12], "slack_api_token": 11, "post_messag": 11, "keyword": 11, "got": 11, "simplest": [11, 12], "webhookcli": 12, "associ": 12, "hook": 12, "t00000000": 12, "b00000000": 12, "xxxxxxxxxxxxxxxxxxxxxxxx": 12, "possibl": 12, "richer": 12, "fakelink": 12, "toemployeeprofil": 12, "fred": 12, "enriquez": 12, "devic": 12, "send_message_via_webhook": 12, "nov": 7, "30th": 7, "2021": 7, "_": []}, "objects": {}, "objtypes": {}, "objnames": {}, "titleterms": {"about": 0, "python": [0, 2, 3], "slack": [0, 3, 6], "sdk": [0, 3], "audit": 1, "log": 1, "api": [1, 8, 11], "client": [1, 7, 8, 9, 11, 12], "auditlogscli": 1, "asyncauditlogscli": 1, "retryhandl": [1, 8, 11, 12], "faq": 2, "document": 2, "instal": [2, 3, 4, 6], "issu": 2, "bug": 2, "report": 2, "featur": 2, "request": 2, "contribut": 2, "get": 3, "help": 3, "access": 4, "token": [4, 6], "workspac": 4, "oauth": 6, "modul": 6, "app": 6, "flow": 6, "lookup": 6, "sign": 6, "rtm": 7, "real": 7, "time": 7, "messag": [7, 11], "scim": 8, "scimclient": 8, "asyncscimcli": 8, "socket": 9, "mode": 9, "socketmodecli": 9, "support": 9, "librari": 9, "asyncio": 9, "base": 9, "migrat": 10, "guid": 10, "from": 10, "slackclient": 10, "2": 10, "x": 10, "1": 10, "web": 11, "file": 11, "convers": 11, "modal": 11, "rate": 11, "limit": 11, "call": 11, "ani": 11, "method": 11, "asyncwebcli": 11, "webhook": 12, "incom": 12, "response_url": 12, "asyncwebhookcli": 12}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 8, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx": 57}, "alltitles": {"About": [[0, "about"]], "Python Slack SDK": [[0, "product-name"], [3, "product-name"]], "Audit Logs API Client": [[1, "audit-logs-api-client"]], "AuditLogsClient": [[1, "auditlogsclient"]], "AsyncAuditLogsClient": [[1, "asyncauditlogsclient"]], "RetryHandler": [[1, "retryhandler"], [8, "retryhandler"], [11, "retryhandler"], [12, "retryhandler"]], "FAQ": [[2, "faq"]], "Python Documents": [[2, "python-documents"]], "Installation Issues": [[2, "installation-issues"]], "Bug Report": [[2, "bug-report"]], "Feature Requests": [[2, "feature-requests"]], "Contributions": [[2, "contributions"]], "Documentation": [[2, "documentation"]], "Installation": [[3, "installation"], [4, "installation"]], "Getting Help": [[3, "getting-help"]], "Access Tokens": [[4, "access-tokens"]], "Workspace Installations": [[4, "workspace-installations"]], "OAuth Modules": [[6, "oauth-modules"]], "App Installation Flow": [[6, "app-installation-flow"]], "Token Lookup": [[6, "token-lookup"]], "Sign in with Slack": [[6, "sign-in-with-slack"]], "RTM Client": [[7, "rtm-client"]], "Real Time Messaging (RTM)": [[7, "real-time-messaging-rtm"]], "SCIM API Client": [[8, "scim-api-client"]], "SCIMClient": [[8, "scimclient"]], "AsyncSCIMClient": [[8, "asyncscimclient"]], "Socket Mode Client": [[9, "socket-mode-client"]], "SocketModeClient": [[9, "socketmodeclient"]], "Supported Libraries": [[9, "supported-libraries"]], "Asyncio Based Libraries": [[9, "asyncio-based-libraries"]], "Migration Guide": [[10, "migration-guide"]], "From slackclient 2.x": [[10, "from-slackclient-2-x"]], "From slackclient 1.x": [[10, "from-slackclient-1-x"]], "Web Client": [[11, "web-client"]], "Messaging": [[11, "messaging"]], "Files": [[11, "files"]], "Conversations": [[11, "conversations"]], "Modals": [[11, "modals"]], "Rate Limits": [[11, "rate-limits"]], "Calling any API methods": [[11, "calling-any-api-methods"]], "AsyncWebClient": [[11, "asyncwebclient"]], "Webhook Client": [[12, "webhook-client"]], "Incoming Webhooks": [[12, "id1"]], "response_url": [[12, "response-url"]], "AsyncWebhookClient": [[12, "asyncwebhookclient"]]}, "indexentries": {}})
\ No newline at end of file
diff --git a/slack_sdk/version.py b/slack_sdk/version.py
index 781b0a44a..9359abfd0 100644
--- a/slack_sdk/version.py
+++ b/slack_sdk/version.py
@@ -1,2 +1,2 @@
"""Check the latest version at https://pypi.org/project/slack-sdk/"""
-__version__ = "3.19.2"
+__version__ = "3.19.3"