Adding a nsfw flag to get_from_reddit, fixes #33

This commit is contained in:
Luke Robles 2018-03-13 13:04:09 -07:00
parent 62038bc9bd
commit 0edc87d44b
2 changed files with 20 additions and 10 deletions

View File

@ -1,9 +1,9 @@
import random import random
import requests import requests
def get_image(boards): def get_image(boards, nsfw=False):
""" """
get_image(boards) get_image(boards, nsfw=False)
Returns a URL to an image on reddit from a random board in the boards list Returns a URL to an image on reddit from a random board in the boards list
as long as it is hosted on one of the domains in the domains list as long as it is hosted on one of the domains in the domains list
@ -18,15 +18,25 @@ def get_image(boards):
'i.imgur.com', 'i.imgur.com',
'i.redd.it', 'i.redd.it',
'i.reddituploads.com', 'i.reddituploads.com',
'i3.kym-cdn.com',
'imgur.com', 'imgur.com',
'media.giphy.com', 'media.giphy.com',
'my.mixtape.moe', 'my.mixtape.moe',
] ]
response = requests.get( request_string = "https://reddit.com/r/{}/random.json".format(boards)
"https://reddit.com/r/{}.json?limit=500".format(boards),
headers = {'User-agent':'discord dragon-bot'}
).json()['data']['children']
image_urls = list(filter(lambda x: x['data']['domain'] in domains, response)) if not nsfw:
return random.choice(image_urls)['data']['url'].replace('http://', 'https://') # Append this header to the request. Tells the API to only return SFW results
request_string += '?obey_over18=true'
response = requests.get(
request_string,
headers = {'User-agent':'discord dragon-bot'}
).json()[0]['data']['children'][0]
if response['data']['domain'] not in domains:
# If we dont find an approved domain, re-try the request
return get_image(boards, nsfw=nsfw)
return response['data']['url'].replace('http://', 'https://')

View File

@ -4,7 +4,7 @@ import requests
import get_from_reddit import get_from_reddit
def get_from_danbooru(boards): def get_from_danbooru(boards, nsfw=True):
""" """
get_from_danbooru(boards) get_from_danbooru(boards)
@ -61,5 +61,5 @@ def get_lewd(channel_name):
] ]
# This is really bad practice but pass boards to get_from_reddit AND danbooru so it doesnt error # This is really bad practice but pass boards to get_from_reddit AND danbooru so it doesnt error
return random.choice([get_from_reddit.get_image, get_from_danbooru])(boards=boards) return random.choice([get_from_reddit.get_image, get_from_danbooru])(boards=boards, nsfw=True)
return 'You can only use this command in NSFW channels' return 'You can only use this command in NSFW channels'