import * as pulumi from "@pulumi/pulumi";
/**
 * Manages a Slack channel
 *
 * ## Required scopes
 *
 * This resource requires the following scopes:
 *
 * If using `bot` tokens:
 *
 * - [channels:read](https://api.slack.com/scopes/channels:read)
 *   (public channels)
 * - [channels:manage](https://api.slack.com/scopes/channels:manage)
 *   (public channels)
 * - [channels:join](https://api.slack.com/scopes/channels:join)
 *   (adopting existing public channels)
 * - [groups:read](https://api.slack.com/scopes/groups:read)
 *   (private channels)
 * - [groups:write](https://api.slack.com/scopes/groups:write)
 *   (private channels)
 *
 * If using `user` tokens:
 *
 * - [channels:read](https://api.slack.com/scopes/channels:read) (public channels)
 * - [channels:write](https://api.slack.com/scopes/channels:manage) (public channels)
 * - [groups:read](https://api.slack.com/scopes/groups:read) (private channels)
 * - [groups:write](https://api.slack.com/scopes/groups:write) (private channels)
 *
 * The Slack API methods used by the resource are:
 *
 * - [conversations.create](https://api.slack.com/methods/conversations.create)
 * - [conversations.join](https://api.slack.com/methods/conversations.join)
 * - [conversations.setTopic](https://api.slack.com/methods/conversations.setTopic)
 * - [conversations.setPurpose](https://api.slack.com/methods/conversations.setPurpose)
 * - [conversations.info](https://api.slack.com/methods/conversations.info)
 * - [conversations.members](https://api.slack.com/methods/conversations.members)
 * - [conversations.kick](https://api.slack.com/methods/conversations.kick)
 * - [conversations.invite](https://api.slack.com/methods/conversations.invite)
 * - [conversations.rename](https://api.slack.com/methods/conversations.rename)
 * - [conversations.archive](https://api.slack.com/methods/conversations.archive)
 * - [conversations.unarchive](https://api.slack.com/methods/conversations.unarchive)
 *
 * If you get `missingScope` errors while using this resource check the scopes against
 * the documentation for the methods above.
 *
 * ## Example Usage
 *
 * ```typescript
 * import * as pulumi from "@pulumi/pulumi";
 * import * as slack from "@pulumi/slack";
 *
 * const test = new slack.Conversation("test", {
 *     name: "my-channel",
 *     topic: "The topic for my channel",
 *     permanentMembers: [],
 *     isPrivate: true,
 * });
 * ```
 *
 * ```typescript
 * import * as pulumi from "@pulumi/pulumi";
 * import * as slack from "@pulumi/slack";
 *
 * const nonadmin = new slack.Conversation("nonadmin", {
 *     name: "my-channel01",
 *     topic: "The channel won't be archived on destroy",
 *     permanentMembers: [],
 *     isPrivate: true,
 *     actionOnDestroy: "none",
 * });
 * ```
 *
 * ```typescript
 * import * as pulumi from "@pulumi/pulumi";
 * import * as slack from "@pulumi/slack";
 *
 * const adopted = new slack.Conversation("adopted", {
 *     name: "my-channel02",
 *     topic: "Adopt existing, don't kick members",
 *     permanentMembers: [],
 *     adoptExistingChannel: true,
 *     actionOnUpdatePermanentMembers: "none",
 * });
 * ```
 *
 * ## Import
 *
 * `slack_conversation` can be imported using the ID of the conversation/channel, e.g.
 *
 * ```sh
 * $ pulumi import slack:index/conversation:Conversation my_conversation C023X7QTFHQ
 * ```
 */
export declare class Conversation extends pulumi.CustomResource {
    /**
     * Get an existing Conversation resource's state with the given name, ID, and optional extra
     * properties used to qualify the lookup.
     *
     * @param name The _unique_ name of the resulting resource.
     * @param id The _unique_ provider ID of the resource to lookup.
     * @param state Any extra arguments used during the lookup.
     * @param opts Optional settings to control the behavior of the CustomResource.
     */
    static get(name: string, id: pulumi.Input<pulumi.ID>, state?: ConversationState, opts?: pulumi.CustomResourceOptions): Conversation;
    /**
     * Returns true if the given object is an instance of Conversation.  This is designed to work even
     * when multiple copies of the Pulumi SDK have been loaded into the same process.
     */
    static isInstance(obj: any): obj is Conversation;
    /**
     * indicates whether the
     * conversation should be archived or left behind on destroy. Valid values are
     * `archive | none`. Note that when set to `none` the conversation will be left
     * as it is  and as a result any subsequent runs of pulumi up with the same
     * name  will fail.
     */
    readonly actionOnDestroy: pulumi.Output<string | undefined>;
    /**
     * indicate
     * whether the members should be kick of the channel when removed from
     * `permanentMembers`. When set to `none` the user are never kicked, this prevent
     * a side effect on public channels where user that joined the channel are kicked.
     */
    readonly actionOnUpdatePermanentMembers: pulumi.Output<string | undefined>;
    readonly adoptExistingChannel: pulumi.Output<boolean | undefined>;
    /**
     * is a unix timestamp.
     */
    readonly created: pulumi.Output<number>;
    /**
     * is the user ID of the member that created this channel.
     */
    readonly creator: pulumi.Output<string>;
    /**
     * indicates a conversation is archived. Frozen in time.
     */
    readonly isArchived: pulumi.Output<boolean | undefined>;
    /**
     * represents this conversation as being part of a Shared Channel
     * with a remote organization.
     */
    readonly isExtShared: pulumi.Output<boolean>;
    /**
     * will be true if this channel is the "general" channel that includes
     * all regular team members.
     */
    readonly isGeneral: pulumi.Output<boolean>;
    /**
     * explains whether this shared channel is shared between Enterprise
     * Grid workspaces within the same organization.
     */
    readonly isOrgShared: pulumi.Output<boolean>;
    /**
     * create a private channel instead of a public one.
     */
    readonly isPrivate: pulumi.Output<boolean>;
    /**
     * means the conversation is in some way shared between multiple workspaces.
     */
    readonly isShared: pulumi.Output<boolean>;
    /**
     * name of the public or private channel.
     */
    readonly name: pulumi.Output<string>;
    /**
     * user IDs to add to the channel.
     */
    readonly permanentMembers: pulumi.Output<string[] | undefined>;
    /**
     * purpose of the channel.
     */
    readonly purpose: pulumi.Output<string | undefined>;
    /**
     * topic for the channel.
     */
    readonly topic: pulumi.Output<string | undefined>;
    /**
     * Create a Conversation resource with the given unique name, arguments, and options.
     *
     * @param name The _unique_ name of the resource.
     * @param args The arguments to use to populate this resource's properties.
     * @param opts A bag of options that control this resource's behavior.
     */
    constructor(name: string, args: ConversationArgs, opts?: pulumi.CustomResourceOptions);
}
/**
 * Input properties used for looking up and filtering Conversation resources.
 */
export interface ConversationState {
    /**
     * indicates whether the
     * conversation should be archived or left behind on destroy. Valid values are
     * `archive | none`. Note that when set to `none` the conversation will be left
     * as it is  and as a result any subsequent runs of pulumi up with the same
     * name  will fail.
     */
    actionOnDestroy?: pulumi.Input<string>;
    /**
     * indicate
     * whether the members should be kick of the channel when removed from
     * `permanentMembers`. When set to `none` the user are never kicked, this prevent
     * a side effect on public channels where user that joined the channel are kicked.
     */
    actionOnUpdatePermanentMembers?: pulumi.Input<string>;
    adoptExistingChannel?: pulumi.Input<boolean>;
    /**
     * is a unix timestamp.
     */
    created?: pulumi.Input<number>;
    /**
     * is the user ID of the member that created this channel.
     */
    creator?: pulumi.Input<string>;
    /**
     * indicates a conversation is archived. Frozen in time.
     */
    isArchived?: pulumi.Input<boolean>;
    /**
     * represents this conversation as being part of a Shared Channel
     * with a remote organization.
     */
    isExtShared?: pulumi.Input<boolean>;
    /**
     * will be true if this channel is the "general" channel that includes
     * all regular team members.
     */
    isGeneral?: pulumi.Input<boolean>;
    /**
     * explains whether this shared channel is shared between Enterprise
     * Grid workspaces within the same organization.
     */
    isOrgShared?: pulumi.Input<boolean>;
    /**
     * create a private channel instead of a public one.
     */
    isPrivate?: pulumi.Input<boolean>;
    /**
     * means the conversation is in some way shared between multiple workspaces.
     */
    isShared?: pulumi.Input<boolean>;
    /**
     * name of the public or private channel.
     */
    name?: pulumi.Input<string>;
    /**
     * user IDs to add to the channel.
     */
    permanentMembers?: pulumi.Input<pulumi.Input<string>[]>;
    /**
     * purpose of the channel.
     */
    purpose?: pulumi.Input<string>;
    /**
     * topic for the channel.
     */
    topic?: pulumi.Input<string>;
}
/**
 * The set of arguments for constructing a Conversation resource.
 */
export interface ConversationArgs {
    /**
     * indicates whether the
     * conversation should be archived or left behind on destroy. Valid values are
     * `archive | none`. Note that when set to `none` the conversation will be left
     * as it is  and as a result any subsequent runs of pulumi up with the same
     * name  will fail.
     */
    actionOnDestroy?: pulumi.Input<string>;
    /**
     * indicate
     * whether the members should be kick of the channel when removed from
     * `permanentMembers`. When set to `none` the user are never kicked, this prevent
     * a side effect on public channels where user that joined the channel are kicked.
     */
    actionOnUpdatePermanentMembers?: pulumi.Input<string>;
    adoptExistingChannel?: pulumi.Input<boolean>;
    /**
     * indicates a conversation is archived. Frozen in time.
     */
    isArchived?: pulumi.Input<boolean>;
    /**
     * create a private channel instead of a public one.
     */
    isPrivate: pulumi.Input<boolean>;
    /**
     * name of the public or private channel.
     */
    name?: pulumi.Input<string>;
    /**
     * user IDs to add to the channel.
     */
    permanentMembers?: pulumi.Input<pulumi.Input<string>[]>;
    /**
     * purpose of the channel.
     */
    purpose?: pulumi.Input<string>;
    /**
     * topic for the channel.
     */
    topic?: pulumi.Input<string>;
}
