2022-06-15 19:33:21 +00:00
from flask import g
from files . classes . badges import Badge
from files . helpers . alerts import send_repeatable_notification
2022-07-08 11:44:17 +00:00
from files . helpers . const import *
from files . helpers . get import *
from files . helpers . sanitize import *
import random
2022-07-08 12:40:07 +00:00
from urllib . parse import quote
2022-07-08 11:44:17 +00:00
2022-06-15 20:08:26 +00:00
def badge_grant ( user , badge_id , description = None , url = None ) :
2022-06-15 21:17:31 +00:00
assert user != None
2022-06-15 20:29:25 +00:00
if user . has_badge ( badge_id ) :
2022-06-15 20:08:26 +00:00
return
2022-06-06 04:07:38 +00:00
badge = Badge (
2022-06-15 20:08:26 +00:00
badge_id = int ( badge_id ) ,
user_id = user . id ,
description = description ,
url = url ,
2022-06-06 04:07:38 +00:00
)
g . db . add ( badge )
2022-06-15 19:33:21 +00:00
g . db . flush ( )
2022-06-15 20:08:26 +00:00
send_repeatable_notification ( user . id ,
f " @AutoJanny has given you the following profile badge: \n \n " +
f " ![]( { badge . path } ) \n \n { badge . name } " )
2022-07-08 11:44:17 +00:00
2022-07-08 12:40:07 +00:00
def archiveorg ( url ) :
try : requests . get ( f ' https://web.archive.org/save/ { url } ' , headers = { ' User-Agent ' : ' Mozilla/4.0 (compatible; MSIE 5.5; Windows NT) ' } , timeout = 100 )
except : pass
2022-07-08 11:44:17 +00:00
def execute_snappy ( post , v ) :
snappy = get_account ( SNAPPY_ID )
if post . sub == ' dankchristianmemes ' or post . sub == ' truth ' :
body = random . choice ( christian_emojis )
elif v . id == CARP_ID :
if random . random ( ) < 0.02 : body = " i love you carp "
else : body = " :#marseyfuckoffcarp: "
elif v . id == LAWLZ_ID :
if random . random ( ) < 0.5 : body = " wow, this lawlzpost sucks! "
else : body = " wow, a good lawlzpost for once! "
2022-07-09 10:50:53 +00:00
elif len ( SNAPPY_QUOTES ) == 0 :
body = " "
2022-07-08 11:44:17 +00:00
else :
2022-07-09 10:50:53 +00:00
body = random . choice ( SNAPPY_QUOTES ) . strip ( )
2022-07-08 11:44:17 +00:00
if body . startswith ( ' â–¼ ' ) :
body = body [ 1 : ]
vote = Vote ( user_id = SNAPPY_ID ,
vote_type = - 1 ,
submission_id = post . id ,
real = True
)
g . db . add ( vote )
post . downvotes + = 1
if body . startswith ( ' OP is a Trump supporter ' ) :
flag = Flag ( post_id = post . id , user_id = SNAPPY_ID , reason = ' Trump supporter ' )
g . db . add ( flag )
elif body . startswith ( ' You had your chance. Downvoted and reported ' ) :
flag = Flag ( post_id = post . id , user_id = SNAPPY_ID , reason = ' Retard ' )
g . db . add ( flag )
elif body . startswith ( ' â–² ' ) :
body = body [ 1 : ]
vote = Vote ( user_id = SNAPPY_ID ,
vote_type = 1 ,
submission_id = post . id ,
real = True
)
g . db . add ( vote )
post . upvotes + = 1
elif body == ' !slots ' :
body = f ' !slots { snappy . coins } '
body + = " \n \n "
if post . url :
if post . url . startswith ( ' https://old.reddit.com/r/ ' ) :
rev = post . url . replace ( ' https://old.reddit.com/ ' , ' ' )
rev = f " * [unddit.com](https://unddit.com/ { rev } ) \n "
elif post . url . startswith ( " https://old.reddit.com/u/ " ) :
rev = post . url . replace ( ' https://old.reddit.com/u/ ' , ' ' )
2022-07-15 13:00:51 +00:00
rev = f " * [camas.unddit.com](https://camas.unddit.com/reddit-search/# \u007b \" author \" : \" { rev } \" , \" resultSize \" :100 \u007d ) \n "
2022-07-08 11:44:17 +00:00
else : rev = ' '
newposturl = post . url
if newposturl . startswith ( ' / ' ) : newposturl = f " { SITE_FULL } { newposturl } "
body + = f " Snapshots: \n \n { rev } * [archive.org](https://web.archive.org/ { newposturl } ) \n * [archive.ph](https://archive.ph/?url= { quote ( newposturl ) } &run=1) (click to archive) \n * [ghostarchive.org](https://ghostarchive.org/search?term= { quote ( newposturl ) } ) (click to archive) \n \n "
gevent . spawn ( archiveorg , newposturl )
captured = [ ]
body_for_snappy = post . body_html . replace ( ' data-src= " ' , ' src= " ' )
2022-07-11 17:45:07 +00:00
for i in list ( snappy_url_regex . finditer ( body_for_snappy ) ) :
href = i . group ( 1 )
if href in [ x [ 0 ] for x in captured ] : continue
2022-07-08 11:44:17 +00:00
title = i . group ( 2 )
2022-07-11 17:45:07 +00:00
captured . append ( ( href , title ) )
for i in list ( snappy_youtube_regex . finditer ( body_for_snappy ) ) :
href = f ' https://youtube.com/watch?v= { i . group ( 1 ) } '
if href in [ x [ 0 ] for x in captured ] : continue
captured . append ( ( href , href ) )
for href , title in captured :
2022-07-08 11:44:17 +00:00
if " Snapshots: \n \n " not in body : body + = " Snapshots: \n \n "
if f ' **[ { title } ]( { href } )**: \n \n ' not in body :
addition = f ' **[ { title } ]( { href } )**: \n \n '
if href . startswith ( ' https://old.reddit.com/r/ ' ) :
rev = href . replace ( ' https://old.reddit.com/ ' , ' ' )
addition + = f ' * [unddit.com](https://unddit.com/ { rev } ) \n '
if href . startswith ( ' https://old.reddit.com/u/ ' ) :
rev = href . replace ( ' https://old.reddit.com/u/ ' , ' ' )
2022-07-15 13:00:51 +00:00
addition + = f " * [camas.unddit.com](https://camas.unddit.com/reddit-search/# \u007b \" author \" : \" { rev } \" , \" resultSize \" :100 \u007d ) \n "
2022-07-08 11:44:17 +00:00
addition + = f ' * [archive.org](https://web.archive.org/ { href } ) \n '
addition + = f ' * [archive.ph](https://archive.ph/?url= { quote ( href ) } &run=1) (click to archive) \n '
addition + = f ' * [ghostarchive.org](https://ghostarchive.org/search?term= { quote ( href ) } ) (click to archive) \n \n '
if len ( f ' { body } { addition } ' ) > 10000 : break
body + = addition
gevent . spawn ( archiveorg , href )
body = body . strip ( )
body_html = sanitize ( body )
2022-07-09 10:50:53 +00:00
if len ( body_html ) == 0 :
return
2022-07-08 11:44:17 +00:00
if len ( body_html ) < 40000 :
c = Comment ( author_id = SNAPPY_ID ,
distinguish_level = 6 ,
parent_submission = post . id ,
level = 1 ,
over_18 = False ,
is_bot = True ,
app_id = None ,
body = body ,
body_html = body_html ,
ghost = post . ghost
)
g . db . add ( c )
snappy . comment_count + = 1
snappy . coins + = 1
g . db . add ( snappy )
if body . startswith ( ' !slots ' ) :
check_for_slots_command ( body , snappy , c )
if PIN_ENABLED and ( body . startswith ( ' :#marseypin: ' ) or body . startswith ( ' :#marseypin2: ' ) ) :
post . stickied = " Snappy "
post . stickied_utc = int ( time . time ( ) ) + 3600
g . db . flush ( )
c . top_comment_id = c . id
post . comment_count + = 1
2022-07-09 10:50:53 +00:00
post . replies = [ c ]