mirror of
https://github.com/simon987/Discord-Channel-scraper.git
synced 2025-04-19 18:16:41 +00:00
JSON output format option
This commit is contained in:
parent
2074ee8d92
commit
740fcd1d6d
@ -1 +1,2 @@
|
|||||||
discord.py
|
discord.py
|
||||||
|
argparse
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
#!/usr/bin/python
|
#!/usr/bin/python
|
||||||
|
import json
|
||||||
import discord
|
import discord
|
||||||
import getpass
|
import getpass
|
||||||
import argparse
|
import argparse
|
||||||
@ -42,6 +43,7 @@ parser.add_argument('--output', '-o', action='store', help="Outputs all messages
|
|||||||
" <channel name>.txt.")
|
" <channel name>.txt.")
|
||||||
parser.add_argument('--logging', action='store', choices=[10, 20, 30, 40, 50], default=20, help='Change the logging '
|
parser.add_argument('--logging', action='store', choices=[10, 20, 30, 40, 50], default=20, help='Change the logging '
|
||||||
'level. Defaults to 20, info.')
|
'level. Defaults to 20, info.')
|
||||||
|
parser.add_argument('--format', '-F', action='store', default="plain", type=str, help='Message format (plain|json)')
|
||||||
|
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|
||||||
@ -56,6 +58,34 @@ password = getpass.getpass("Password for user {0}: ".format(args.username))
|
|||||||
client = discord.Client()
|
client = discord.Client()
|
||||||
|
|
||||||
|
|
||||||
|
def save_line(out, message):
|
||||||
|
|
||||||
|
lines = []
|
||||||
|
|
||||||
|
if args.format == "plain":
|
||||||
|
for i in message.attachments:
|
||||||
|
lines.append('{0}::file:{1}'.format(message.author.name, i['url']))
|
||||||
|
|
||||||
|
lines.append('{0}: {1}'.format(message.author.name, message.content))
|
||||||
|
|
||||||
|
elif args.format == "json":
|
||||||
|
|
||||||
|
msg_obj = dict()
|
||||||
|
|
||||||
|
msg_obj["author"] = {
|
||||||
|
"name": message.author.name,
|
||||||
|
"id": message.author.id,
|
||||||
|
}
|
||||||
|
msg_obj["content"] = message.content
|
||||||
|
msg_obj["timestamp"] = message.timestamp.timestamp()
|
||||||
|
msg_obj["attachments"] = [{"url": a["url"], "id": a["id"], "filename": a["filename"]}
|
||||||
|
for a in message.attachments]
|
||||||
|
lines.append(json.dumps(msg_obj))
|
||||||
|
|
||||||
|
for line in lines:
|
||||||
|
out.write(line + "\n")
|
||||||
|
|
||||||
|
|
||||||
async def get_logs(channel):
|
async def get_logs(channel):
|
||||||
try:
|
try:
|
||||||
if not args.quiet:
|
if not args.quiet:
|
||||||
@ -63,15 +93,7 @@ async def get_logs(channel):
|
|||||||
log.info("Getting the logs for channel {0}".format(channel.name))
|
log.info("Getting the logs for channel {0}".format(channel.name))
|
||||||
with open("{0}.txt".format(channel.name), 'w') as f:
|
with open("{0}.txt".format(channel.name), 'w') as f:
|
||||||
async for line in client.logs_from(channel, limit=args.limit):
|
async for line in client.logs_from(channel, limit=args.limit):
|
||||||
for i in line.attachments:
|
save_line(f, line)
|
||||||
try:
|
|
||||||
f.write('{0}::file:{1}\n'.format(line.author.name, i['url']))
|
|
||||||
except:
|
|
||||||
continue
|
|
||||||
try:
|
|
||||||
f.write('{0}: {1}\n'.format(line.author.name, line.content)) # line is of the message type
|
|
||||||
except:
|
|
||||||
continue
|
|
||||||
if not args.quiet:
|
if not args.quiet:
|
||||||
await client.send_message(channel, 'The messages for this channel have been saved.')
|
await client.send_message(channel, 'The messages for this channel have been saved.')
|
||||||
log.info("Messages for channel {0} finished downloading".format(channel.name))
|
log.info("Messages for channel {0} finished downloading".format(channel.name))
|
||||||
@ -127,4 +149,4 @@ try:
|
|||||||
except KeyboardInterrupt:
|
except KeyboardInterrupt:
|
||||||
log.info("Logging out...")
|
log.info("Logging out...")
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
log.error(e.message)
|
log.error(str(e))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user