Exemplo n.º 1
0
    def __init__(self, token: str, sleep_for=0, log_to_file=False, slacker: Optional[Slacker] = None, session=None):
        """
        :param token: the slack token, see README.md for details
        :type token: str
        :param sleep_for: sleep for x (float) seconds between delete calls
        :type sleep_for: float
        :param log_to_file: enable logging to file
        :type log_to_file: bool
        :param slacker: optional slacker instance for better customization
        :type slacker: Slacker
        :param session: optional session instance for better customization
        :type session: Session
        """

        self.log = SlackLogger(log_to_file, sleep_for)
        self.token = token

        self.log.debug("start")

        if slacker:
            self.api = slacker
        else:
            slack = Slacker(token, session=session if session else Session())
            slack.rate_limit_retries = 2
            self.api = slack

        self.users = ByKeyLookup[SlackUser]([SlackUser(m, self) for m in _safe_list(slack.users.list(), "members")], lambda v: [v.name, v.id])
        self.log.debug("collected users %s", self.users)

        # determine one self
        profile = _safe_attr(slack.users.profile.get(), "profile")
        myself = next((u for u in self.users if u.matches_profile(profile)), None)
        if not myself:
            self.log.error("cannot determine my own user, using the first one or a dummy one")
            self.myself = self.users[0] or self._add_dummy_user("?????")
        else:
            self.myself = myself

        self.channels = [SlackChannel(m, self._resolve_users(m["members"]), slack.channels, self) for m in _safe_list(slack.channels.list(), "channels")]
        self.log.debug("collected channels %s", self.channels)

        self.groups = [
            SlackChannel(m, self._resolve_users(_safe_list(slack.conversations.members(m["id"]), "members")), slack.conversations, self)
            for m in _safe_list(slack.conversations.list(types="private_channel"), "channels")
        ]
        self.log.debug("collected groups %s", self.groups)

        self.mpim = [SlackChannel(m, self._resolve_users(m["members"]), slack.mpim, self) for m in _safe_list(slack.mpim.list(), "groups")]
        self.log.debug("collected mpim %s", self.mpim)

        self.ims = [SlackDirectMessage(m, self.resolve_user(m["user"]), slack.im, self) for m in _safe_list(slack.im.list(), "ims")]
        self.log.debug("collected ims %s", self.ims)

        # all different types with a similar interface
        self.conversations = self.channels + self.groups + self.mpim
        self.conversations.extend(self.ims)

        # pylint: disable=invalid-name
        self.c = ByKeyLookup[Union[SlackChannel, SlackDirectMessage]](self.conversations, lambda v: [v.name, v.id])
Exemplo n.º 2
0
# Get and parse command line arguments
args = Args()
time_range = TimeRange(args.start_time, args.end_time)

# Nice slack API wrapper
with Session() as session:
    if args.proxy:
        slack = Slacker(args.token,
                        http_proxy=args.proxy,
                        https_proxy=args.proxy,
                        session=session)
    else:
        slack = Slacker(args.token, session=session)
    if hasattr(slack, 'rate_limit_retries'):
        slack.rate_limit_retries = 2

# So we can print slack's object beautifully
pp = pprint.PrettyPrinter(indent=4)

# Count how many items we deleted
counter = Counter()

# Initial logger
logger = logging.getLogger('slack-cleaner')
logger.setLevel(10)

# Log deleted messages/files if we're gonna actually log the task
if args.log:
    ts = datetime.now().strftime('%Y%m%d-%H%M%S')
    file_log_handler = logging.FileHandler('slack-cleaner.' + ts + '.log')