Skip to content

Instantly share code, notes, and snippets.

@krets
Last active July 15, 2022 17:39
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save krets/3ddcd0ccc83b95ed401c0818f8a4734f to your computer and use it in GitHub Desktop.
Save krets/3ddcd0ccc83b95ed401c0818f8a4734f to your computer and use it in GitHub Desktop.
Quick script to leave a bunch of slack channels with the "bd-" prefix.
#!/usr/bin/env python
import argparse
import requests
import logging
LOG = logging.getLogger("slack_leaver")
class JSONRest(object):
def __init__(self, base_url):
self.base_url = base_url
def _fix_url(self, url):
if url.startswith(self.base_url):
return url
return self.base_url.rstrip("/") + "/" + url.lstrip("/")
def _request(self, method, url, **kwargs):
url = self._fix_url(url)
try:
return requests.request(method, url, **kwargs).json()
except ValueError as error:
LOG.error("Failed to parse response JSON: %s", error)
def get(self, url, **kwargs):
return self._request("GET", url, **kwargs)
def post(self, url, **kwargs):
return self._request("POST", url, **kwargs)
def put(self, url, **kwargs):
return self._request("PUT", url, **kwargs)
def delete(self, url, **kwargs):
return self._request("DELETE", url, **kwargs)
def SlackError(BaseException):
pass
class SlackClient(JSONRest):
""" https://api.slack.com/ """
def __init__(self, token, base_url="https://slack.com/api", ):
self.token = token
super(SlackClient, self).__init__(base_url)
def _request(self, method, url, **kwargs):
params = kwargs.get("params", None)
if params is None:
params = {}
params.update({"token": self.token})
kwargs['params'] = params
LOG.debug("Sending params: %s", params)
response = super(SlackClient, self)._request(method, url, **kwargs)
if not response.get("ok"):
path = url.replace(self.base_url, "")
LOG.error("failed to %s %s", method, path)
error_message = response.get("error")
LOG.info("Error Message: %s", error_message)
raise SlackError(error_message)
return response
def leave_bd_channels(token):
slack = SlackClient(token)
response = slack.get("channels.list", params={'exclude_archived': True})
member_channels = [x for x in response['channels'] if x['is_member']]
for channel in member_channels:
LOG.debug("Member of: '%s'", channel['name'])
if channel['name'].lower().startswith('bd-'):
LOG.debug("Leaving: %s (%s)", channel['name'], channel['id'])
response = slack.get("channels.leave", params={"channel": channel['id']})
LOG.info("Left channel: %s", channel['name'])
def main():
parser = argparse.ArgumentParser(description='Slack BD channel leaver')
parser.add_argument('-v', '--verbose', help='Show debug messages',
action="store_true")
parser.add_argument('-t', '--token', required=True, help="Slack API Token")
args = parser.parse_args()
level = logging.INFO
if args.verbose:
level = logging.DEBUG
logging.basicConfig(level=level)
leave_bd_channels(args.token)
if __name__ == '__main__':
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment