-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathscript.py
More file actions
70 lines (60 loc) · 2.39 KB
/
Copy pathscript.py
File metadata and controls
70 lines (60 loc) · 2.39 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
import praw
import requests
import time
# Account settings (private)
USERNAME = ''
PASSWORD = ''
# OAuth settings (private)
CLIENT_ID = ''
CLIENT_SECRET = ''
REDIRECT_URI = 'http://127.0.0.1:65010/authorize_callback'
# Configuration Settings
USER_AGENT = "Bot Banner | /u/YOUR_MAIN_USERNAME_HERE"
AUTH_TOKENS = ["identity", "read", "do_relationship", "modcontributors", "privatemessages", "modself", "mysubreddits"]
EXPIRY_BUFFER = 60
def get_session_data():
response = requests.post("https://www.reddit.com/api/v1/access_token",
auth = requests.auth.HTTPBasicAuth(CLIENT_ID, CLIENT_SECRET),
data = {"grant_type": "password", "username": USERNAME, "password": PASSWORD},
headers = {"User-Agent": USER_AGENT})
response_dict = dict(response.json())
response_dict['retrieved_at'] = time.time()
return response_dict
def get_praw():
r = praw.Reddit(USER_AGENT)
r.set_oauth_app_info(CLIENT_ID, CLIENT_SECRET, REDIRECT_URI)
session_data = get_session_data()
r.set_access_credentials(set(AUTH_TOKENS), session_data['access_token'])
return (r, session_data)
def accept_mod_invites(r):
for message in r.get_unread():
if message.body.startswith('**gadzooks!'):
sr = r.get_info(thing_id=message.subreddit.fullname)
try:
sr.accept_moderator_invite()
except praw.errors.InvalidInvite:
continue
message.mark_as_read()
def main(r, session_data):
EXPIRES_AT = session_data['retrieved_at'] + session_data['expires_in']
if time.time() >= EXPIRES_AT - EXPIRY_BUFFER:
raise praw.errors.OAuthInvalidToken
##### MAIN CODE #####
accept_mod_invites(r)
banlist_wiki = r.get_wiki_page("BansAllBots","bannedbots")
banlist = set([name.strip().lower()[3:] for name in banlist_wiki.content_md.split("\n") if name.strip() != ""])
for sub in r.get_my_moderation():
for user in list(banlist - set([user.name.lower() for user in sub.get_banned()])):
try:
sub.add_ban(user)
print("Banning", user, "from", sub)
except praw.errors.InvalidUser:
continue
if __name__ == "__main__":
try:
print("Retrieving new OAuth token...")
main(*get_praw())
except praw.errors.OAuthInvalidToken:
print("OAuth token expired.")
except praw.errors.HTTPException:
print("HTTP error.")