mirror of
https://github.com/gryf/slack-backup.git
synced 2025-12-17 11:30:25 +01:00
Currently, if message contain shared file, slack-backup will try to download it. If it fail, than empty file will remain, which will be at least confusing. This will mostly happen for shares which are not uploaded to the slack servers. New option will be used to indicate if slack-backup should convert such share as an attachment, or to save the list of URL and their destination in local file system to be download manually by the user.
142 lines
5.8 KiB
Python
142 lines
5.8 KiB
Python
"""
|
|
Create backup for certain date for specified channel in slack
|
|
"""
|
|
import argparse
|
|
import logging
|
|
import platform
|
|
|
|
from slack_backup import client
|
|
from slack_backup import config
|
|
|
|
|
|
def setup_logger(args):
|
|
"""Setup logger format and level"""
|
|
|
|
if platform.system() != "Windows":
|
|
# hack to have colors in terminal
|
|
logging.addLevelName(logging.DEBUG,
|
|
"\033[1;30m%s\033[1;0m" %
|
|
logging.getLevelName(logging.DEBUG))
|
|
|
|
logging.addLevelName(logging.INFO,
|
|
"\033[1;32m%s\033[1;0m" %
|
|
logging.getLevelName(logging.INFO))
|
|
|
|
logging.addLevelName(logging.WARNING,
|
|
"\033[1;33m%s\033[1;0m" %
|
|
logging.getLevelName(logging.WARNING))
|
|
|
|
logging.addLevelName(logging.ERROR,
|
|
"\033[1;31m%s\033[1;0m" %
|
|
logging.getLevelName(logging.ERROR))
|
|
|
|
logging.addLevelName(logging.CRITICAL,
|
|
"\033[7;31m%s\033[1;0m" %
|
|
logging.getLevelName(logging.CRITICAL))
|
|
|
|
level = logging.WARNING
|
|
|
|
if args.quiet:
|
|
level = logging.ERROR
|
|
if args.quiet > 1:
|
|
level = logging.CRITICAL
|
|
|
|
if args.verbose:
|
|
level = logging.INFO
|
|
if args.verbose > 1:
|
|
level = logging.DEBUG
|
|
|
|
logging.basicConfig(level=level,
|
|
format="%(asctime)s %(levelname)s: %(message)s")
|
|
|
|
|
|
def generate_raport(args):
|
|
"""Generate logs"""
|
|
slack = client.Client(args)
|
|
slack.generate_history()
|
|
|
|
|
|
def fetch_data(args):
|
|
"""Fetch and store data"""
|
|
slack = client.Client(args)
|
|
slack.update()
|
|
|
|
|
|
def main():
|
|
"""Main function"""
|
|
parser = argparse.ArgumentParser()
|
|
|
|
subparser = parser.add_subparsers(dest='parser')
|
|
subparser.required = True
|
|
|
|
fetch = subparser.add_parser('fetch', help='Update local db with Slack'
|
|
' data')
|
|
fetch.add_argument('-t', '--token', default=None, help='Slack token - '
|
|
'a string, which can be generated/obtained via '
|
|
'https://api.slack.com/docs/oauth-test-tokens page.')
|
|
fetch.add_argument('-u', '--user', default=None, help='Username for your '
|
|
'Slack account')
|
|
fetch.add_argument('-p', '--password', default=None, help='Password for '
|
|
'your Slack account.')
|
|
fetch.add_argument('-e', '--team', default=None, help='Team name, which '
|
|
'is part of slack url, for example: if url is '
|
|
'"https://team.slack.com" than "team" is a name of '
|
|
'the team.')
|
|
fetch.add_argument('-v', '--verbose', help='Be verbose. Adding more "v" '
|
|
'will increase verbosity', action="count",
|
|
default=None)
|
|
fetch.add_argument('-q', '--quiet', help='Be quiet. Adding more "q" will'
|
|
' decrease verbosity', action="count", default=None)
|
|
fetch.add_argument('-c', '--channels', default=None, nargs='+',
|
|
help='List of channels to perform actions on. '
|
|
'Default is all channels.')
|
|
fetch.add_argument('-d', '--database', default=None,
|
|
help='Path to the database file.')
|
|
fetch.add_argument('-i', '--config', default=None,
|
|
help='Use specific config file.')
|
|
fetch.add_argument('-f', '--url_file_to_attachement', default=False,
|
|
action='store_true',
|
|
help='Treat shared files (but not uploaded to the '
|
|
'Slack servers) as attachement. By default there will '
|
|
'be file created in current directory with url and '
|
|
'path to the filename under which it would be '
|
|
'registered in the DB.')
|
|
fetch.set_defaults(func=fetch_data)
|
|
|
|
generate = subparser.add_parser('generate', help='Generate logs out of '
|
|
'data in provided database')
|
|
generate.add_argument('-o', '--output', default=None, help="Output "
|
|
"directory for store logs. All logs are organised "
|
|
"per channel. By default it's `logs' directory")
|
|
generate.add_argument('-f', '--format', default=None,
|
|
choices=('text', 'html', 'none'),
|
|
help='Output format. Default is none; only database '
|
|
'is updated by latest messages for all/selected '
|
|
'channels.')
|
|
generate.add_argument('-t', '--theme', default=None,
|
|
choices=('plain', 'unicode'),
|
|
help='Choose theme for text output. It doesn\'t '
|
|
'affect other output formats.')
|
|
generate.add_argument('-v', '--verbose', help='Be verbose. Adding more '
|
|
'"v" will increase verbosity', action="count",
|
|
default=None)
|
|
generate.add_argument('-q', '--quiet', help='Be quiet. Adding more "q" '
|
|
'will decrease verbosity', action="count",
|
|
default=None)
|
|
generate.add_argument('-c', '--channels', default=[], nargs='+',
|
|
help='List of channels to perform actions on. '
|
|
'Default is all channels.')
|
|
generate.add_argument('-d', '--database', default=None,
|
|
help='Path to the database file.')
|
|
generate.add_argument('-i', '--config', default=None,
|
|
help='Use specific config file.')
|
|
generate.set_defaults(func=generate_raport)
|
|
|
|
args = parser.parse_args()
|
|
cfg = config.Config()
|
|
msg = cfg.update(args)
|
|
setup_logger(args)
|
|
logging.info(msg)
|
|
|
|
args.func(args)
|