ventilaar
/
twitter_zuil
Archived
1
Fork 0
This repository has been archived on 2021-06-10. You can view files and clone it, but cannot push or open issues or pull requests.
twitter_zuil/moderator.py

198 lines
6.4 KiB
Python
Raw Normal View History

import hashlib
import getpass
import database_connector
2020-10-21 15:34:11 +02:00
from api_keys import *
import datetime
2020-10-21 15:34:11 +02:00
from TwitterAPI import TwitterAPI
conn = database_connector.conn
cur = database_connector.cur
def newaccount():
"""
Spreekt voorzich, dit was een test functie om sql een beetje onder de knie te krijgen
:returns True on success, False on error
"""
try:
username = input('Gebruikers naam: ')
if len(username) > 64 or len(username) < 3:
print('Gebruikersnaam lengte is ongeldig, gebruik minimaal 3 en maximaal 64 tekens!')
return False
except:
print('Ongeldige invoer')
return False
try:
password1 = getpass.getpass('Voer wachtwoord in: ')
password2 = getpass.getpass('Herhaal wachtwoord: ')
if len(password1) < 4:
print('Wachtwoord lengte is te weinig, gebruik minimaal 4 tekens!')
return False
elif password1 != password2:
print('Wachtwoorden zijn niet hetzelfde!')
except:
print('Ongeldige invoer')
return False
cur.execute("SELECT naam FROM moderators WHERE naam = (%s);", (username, ))
sqlreturn = cur.fetchone()
if sqlreturn == None:
"""
password1 appenden met 'saltedlol' an beide encoden als utf8(ja ik weet het, zo werkt salting niet)
daarna hashen met sha256(ja ik weet het er zijn betere manieren)
na al dat gedoe, in de database inserten met gebruikersnaam en hash
"""
hashedpass = hashlib.sha256(password1.encode('UTF-8') + 'saltandpepper'.encode('UTF-8')).hexdigest()
try:
cur.execute("INSERT INTO moderators(naam, hash) VALUES (%s, %s)", (username, hashedpass))
conn.commit()
print('Account aangemaakt!')
return True
except:
print('Fout bij het aanmaken van account!')
return False
else:
print('Gebruiker bestaat al!')
return False
def publishtwit(berichtid):
"""
ontvangt lokaal bericht id en published dat bericht naar twitter
na het publishen, de functie pakt dan de twitter uniek id en zet het in de twitter berichten table met alle
waarden die twitter mee heeft gegeven zoals: id, tijd, datum
na het successfol publishen gaat de bericht status naar published(5)
"""
2020-10-21 15:34:11 +02:00
twitter_API = TwitterAPI(TWITTER_APIKEY, TWITTER_APISECRET, TWITTER_ACCESSTOKEN, TWITTER_ACCESSSECRET)
cur.execute("SELECT * FROM berichten WHERE berichtid = (%s)", [berichtid])
bericht = cur.fetchone()
cur.execute("SELECT naam FROM locaties WHERE locatieid = (%s)", [bericht[9]])
locatie = cur.fetchone()
formatted = str(bericht[1] + ' | Door ' + bericht[4] + ' op ' + locatie[0])
if len(formatted) < 180:
response = twitter_API.request('statuses/update', {'status': formatted})
jsonresponse = response.json()
if response.status_code == 200:
# vul tabel twitterberichten eerst in
QUERY = 'INSERT INTO twitterberichten(twitterid, datumpublished) VALUES (%s, %s)'
DATA = (jsonresponse['id'], jsonresponse['created_at'])
cur.execute(QUERY, DATA)
# link twitterberichten met bericht in berichten tabel
QUERY = 'UPDATE berichten SET twitterid = (%s) WHERE berichtid = (%s)'
DATA = (jsonresponse['id'], berichtid)
cur.execute(QUERY, DATA)
conn.commit()
return True
else:
print('Probleem met het publishen naar twitter')
return False
else:
print('bericht is te lang')
return False
def getmessage(moderatorid):
"""
vraagt de outste bericht op en zet het bericht gelijk op moderator lock(2)
returnt een tuple met de oudste bericht met de status 1(pending moderation)
de tuple ziet er alsvolgt uit: (berichtid int, berichtinhoud str, datum date, tijd time, naam str)
"""
cur.execute("SELECT berichtid, bericht, datumontvangen, tijdontvangen, naamposter FROM berichten WHERE statusid = 1 ORDER BY datumontvangen, tijdontvangen LIMIT 1")
gottuple = cur.fetchone()
if gottuple == None:
return False
2020-10-20 15:26:07 +02:00
cur.execute("UPDATE berichten SET statusid = 2, moderatorid = (%s) WHERE berichtid = (%s)", (moderatorid, gottuple[0]))
conn.commit()
return gottuple
def unlockmessage(berichtid):
cur.execute("UPDATE berichten SET statusid = 1, moderatorid = NULL WHERE berichtid = (%s)", [berichtid])
conn.commit()
return True
def acceptmessage(berichtid, moderatorid):
time = datetime.datetime.utcnow().strftime("%H:%M:%S")
date = datetime.datetime.utcnow().strftime("%Y-%m-%d")
QUERY = "UPDATE berichten SET statusid = 4, datumgekeurd = (%s), tijdgekeurd = (%s), moderatorid = (%s) WHERE berichtid = (%s)"
2020-10-20 15:26:07 +02:00
DATA = (date, time, moderatorid, berichtid)
cur.execute(QUERY, DATA)
conn.commit()
return True
def rejectmessage(berichtid, moderatorid):
time = datetime.datetime.utcnow().strftime("%H:%M:%S")
date = datetime.datetime.utcnow().strftime("%Y-%m-%d")
QUERY = "UPDATE berichten SET statusid = 3, datumgekeurd = (%s), tijdgekeurd = (%s), moderatorid = (%s) WHERE berichtid = (%s)"
2020-10-20 15:26:07 +02:00
DATA = (date, time, moderatorid, berichtid)
cur.execute(QUERY, DATA)
conn.commit()
return True
def moderateloop():
"""
deze functie stop alleen als de gebruiker het aangeeft met: q
deze functie vraagt ten eerste de outste bericht door getmessage()
daarna weergeven de bericht, naam, tijd en datum.
als de moderator het bericht goedkeurt de status van bericht veranderen naar moderator accepted(4)
als de bericht wordt afgewezen verander de status naar moderator rejected(3) en loop weer verder
nadat de bericht is goedgekeurt direct de functie publishtwit(berichtid) en loopt weer verder
"""
2020-10-20 15:26:07 +02:00
moderatorid = 1
while True:
exitvar = False
2020-10-20 15:26:07 +02:00
bericht = getmessage(moderatorid)
if bericht == False:
print('Er zijn geen berichten meer om te weergeven, probeer het later opnieuw')
return True
print("Op " + str(bericht[2]) + " " + str(bericht[3]) + " heeft " + str(bericht[4]) + " een bericht achtergelaten")
print(str(bericht[0]) + " " + str(bericht[1]))
while exitvar != True:
try:
modinput = input('r = reject, a = accept, q = quit: ').lower()
if modinput == 'r':
2020-10-21 15:34:11 +02:00
if rejectmessage(bericht[0], moderatorid):
print('Moderatie opgeslagen')
else:
print('Probleem met het opslaan van de moderatie')
exitvar = True
elif modinput == 'a':
2020-10-21 15:34:11 +02:00
if acceptmessage(bericht[0], moderatorid):
print('Bericht successvol opgeslagen in database')
else:
print('Probleem met het opslaan van de moderatie.')
if publishtwit(bericht[0]):
print('Bericht is successvol gepubliceerd op twitter')
else:
print('Probleem met het publiceren op twitter')
exitvar = True
elif modinput == 'q':
unlockmessage(bericht[0])
return True
except:
2020-10-20 15:26:07 +02:00
print('Ongeldige invoer')
moderateloop()