pre fsdfsd
parent
5c868d7aa7
commit
2893fd4bbc
|
@ -1,3 +1,19 @@
|
||||||
__pycache__/image_utils.cpython-39.pyc
|
__pycache__/image_utils.cpython-39.pyc
|
||||||
emoji_cache/
|
emoji_cache/
|
||||||
*.ttf
|
dry/
|
||||||
|
*.ttf
|
||||||
|
*.pyc
|
||||||
|
__pycache__/
|
||||||
|
rdrama_auth_token
|
||||||
|
twitter_access_token
|
||||||
|
twitter_access_token_secret
|
||||||
|
twitter_api_key
|
||||||
|
twitter_api_secret
|
||||||
|
twitter_bearer_token
|
||||||
|
twitter_client_id
|
||||||
|
twitter_client_secret
|
||||||
|
*.db
|
||||||
|
*.db-journal
|
||||||
|
log
|
||||||
|
*.json
|
||||||
|
|
||||||
|
|
29
automeme.py
29
automeme.py
|
@ -49,19 +49,36 @@ DARRELL_QUOTES = [
|
||||||
":#marseyjurisdiction: \nCan we please address :marseyjurisdiction:?",
|
":#marseyjurisdiction: \nCan we please address :marseyjurisdiction:?",
|
||||||
":#marseygrouns:",
|
":#marseygrouns:",
|
||||||
":#marseygrouns:\n:marseygrouns: for the substain?",
|
":#marseygrouns:\n:marseygrouns: for the substain?",
|
||||||
|
":#marseygrouns:\nWho would you say is the plantiff in this matter?",
|
||||||
|
":#marseygrouns:\nWould it be fair to say that the State of Wisconsin is not a living, breathing person?",
|
||||||
|
":#marseygrouns:\nThe defense calls the State of Wisconsin.",
|
||||||
|
":#brooksannoyed:\nHow can you even call yourself a judge?",
|
||||||
|
":#brooksannoyed:\n\*takes off shirt for some reason\*",
|
||||||
|
":#brooksannoyed:\nMind boggling. Ming boggling.",
|
||||||
|
":#brooksannoyed:\nSHE SAID SHE WAS 18!",
|
||||||
":#marseyrelevancy:\nuhh what's the :marseyrelevancy:?",
|
":#marseyrelevancy:\nuhh what's the :marseyrelevancy:?",
|
||||||
|
":#marseyrelevancy:\n[\*talks for fifty minutes straight\*](https://rdrama.net/post/113381/marseygrounsmarseyjudge-darrel-brooks-entire-50minute-long)",
|
||||||
|
":#marseyrelevancy:\nI see what you're doing. Trying to be slick.",
|
||||||
":#brooksannoyed:\nYour honor, that's a load of crap.",
|
":#brooksannoyed:\nYour honor, that's a load of crap.",
|
||||||
":#marseytakit:\nIs that lawfully law?",
|
":#marseytakit:\nIs that lawfully law?",
|
||||||
":#marseytakit:\nIs that a :marseytakit:?",
|
":#marseytakit:\nIs that a :marseytakit:?",
|
||||||
":#brooksannoyed:\nI AM A GROWN MAN WITH GROWN KIDS AINT NOBODY TELL ME WHEN TO TALK",
|
":#brooksannoyed:\nI AM A GROWN MAN WITH GROWN KIDS AINT NOBODY TELL ME WHEN TO TALK",
|
||||||
":#marseybiast:\nIs this a common law court or an admiralty court?",
|
":#marseybiast:\nIs this a common law court or an admiralty court?",
|
||||||
|
":#marseybiast:\nSeems to me like a lot of your answers are coached.",
|
||||||
|
":#marseyjurisdiction:\nWe STILL have yet to discuss :#marseyjurisdiction:.",
|
||||||
|
":#marseyjurisdiction:\nWhat da bid'ness?",
|
||||||
|
":#marseyjurisdiction:\nI need a signed affidavit of your oath of office."
|
||||||
]
|
]
|
||||||
DARRELL_KEYWORDS = [
|
DARRELL_KEYWORDS = [
|
||||||
"brooks",
|
"brooks",
|
||||||
"darrell"
|
"darrell"
|
||||||
]
|
]
|
||||||
DARRELL_DISCLAIMER = "_I am not Darrell Brooks, I am a third party intervener, here on behalf of my client_"
|
DARRELL_DISCLAIMER = "_I am not Darrell Brooks, I am a third party intervener, here on behalf of my client_"
|
||||||
|
LLM_KEYWORDS = [
|
||||||
|
"llm",
|
||||||
|
"landlordmessiah",
|
||||||
|
"landlord messiah"
|
||||||
|
]
|
||||||
|
|
||||||
TEST_MODE = False
|
TEST_MODE = False
|
||||||
DRY_MODE = False
|
DRY_MODE = False
|
||||||
|
@ -311,7 +328,6 @@ def create_comment_message(chud: bool, pizza: bool, bird : bool, marsey : bool,
|
||||||
message = choice(ANTISPAM_MESSAGES) +"\n"
|
message = choice(ANTISPAM_MESSAGES) +"\n"
|
||||||
if (mention != None):
|
if (mention != None):
|
||||||
message += f"@{mention}\n"
|
message += f"@{mention}\n"
|
||||||
message += f"<source src=\"{''.join(choices(['a','b','c','d','f','g','h','j','k','l','m','n','p','q','r','s','t','v','w','x','z'], k=500))}.mp3\">"
|
|
||||||
|
|
||||||
if (chud):
|
if (chud):
|
||||||
message += "\ntrans lives matter"
|
message += "\ntrans lives matter"
|
||||||
|
@ -490,13 +506,20 @@ def handle_comment(comment : dict, rdrama : RDramaAPIInterface, session : Sessio
|
||||||
message = choice(DARRELL_QUOTES)
|
message = choice(DARRELL_QUOTES)
|
||||||
message += "\n\n"
|
message += "\n\n"
|
||||||
message += DARRELL_DISCLAIMER
|
message += DARRELL_DISCLAIMER
|
||||||
message += f"<source src=\"{''.join(choices(['a','b','c','d','f','g','h','j','k','l','m','n','p','q','r','s','t','v','w','x','z'], k=500))}.mp3\">"
|
|
||||||
post_id = comment['post_id']
|
post_id = comment['post_id']
|
||||||
user_id = 0 if comment['author'] == '👻' else comment['author']['id']
|
user_id = 0 if comment['author'] == '👻' else comment['author']['id']
|
||||||
new_comment_id = rdrama.reply_to_comment_easy(comment['id'], post_id, message)['id']
|
new_comment_id = rdrama.reply_to_comment_easy(comment['id'], post_id, message)['id']
|
||||||
Comment.create_new_comment(comment['id'], new_comment_id, session)
|
Comment.create_new_comment(comment['id'], new_comment_id, session)
|
||||||
Post.increment_replies(post_id, session)
|
Post.increment_replies(post_id, session)
|
||||||
User.increase_number_of_comments(user_id, session)
|
User.increase_number_of_comments(user_id, session)
|
||||||
|
elif comment_contains_keyword(comment_text, LLM_KEYWORDS):
|
||||||
|
message = "![](/images/1669576960061573.webp)"
|
||||||
|
post_id = comment['post_id']
|
||||||
|
user_id = 0 if comment['author'] == '👻' else comment['author']['id']
|
||||||
|
new_comment_id = rdrama.reply_to_comment_easy(comment['id'], post_id, message)['id']
|
||||||
|
Comment.create_new_comment(comment['id'], new_comment_id, session)
|
||||||
|
Post.increment_replies(post_id, session)
|
||||||
|
User.increase_number_of_comments(user_id, session)
|
||||||
else:
|
else:
|
||||||
Comment.create_new_comment(comment['id'], None, session)
|
Comment.create_new_comment(comment['id'], None, session)
|
||||||
except BaseException as e:
|
except BaseException as e:
|
||||||
|
|
|
@ -14,8 +14,6 @@ consumer_secret = load_key_from_file("twitter_api_secret")
|
||||||
access_token = load_key_from_file("twitter_access_token")
|
access_token = load_key_from_file("twitter_access_token")
|
||||||
access_token_secret = load_key_from_file("twitter_access_token_secret")
|
access_token_secret = load_key_from_file("twitter_access_token_secret")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
auth = tweepy.OAuth1UserHandler(
|
auth = tweepy.OAuth1UserHandler(
|
||||||
consumer_key,
|
consumer_key,
|
||||||
consumer_secret,
|
consumer_secret,
|
||||||
|
@ -25,7 +23,10 @@ auth = tweepy.OAuth1UserHandler(
|
||||||
api = tweepy.API(auth)
|
api = tweepy.API(auth)
|
||||||
|
|
||||||
rdrama = get_rdrama()
|
rdrama = get_rdrama()
|
||||||
best = rdrama.get_comments(user = "automeme", sort = "top", t="day")['data'][0]
|
for comment in rdrama.get_comments(user = "automeme", sort = "top", t="day")['data']:
|
||||||
|
if "Darrell Brooks" not in comment['body'] and "twitter" not in comment['body']:
|
||||||
|
best = comment
|
||||||
|
break
|
||||||
print(json.dumps(best, indent=4))
|
print(json.dumps(best, indent=4))
|
||||||
|
|
||||||
comment_text = best['body']
|
comment_text = best['body']
|
||||||
|
|
|
@ -0,0 +1,98 @@
|
||||||
|
from io import BytesIO
|
||||||
|
import re
|
||||||
|
import tweepy
|
||||||
|
from automeme import TextLine, get_rdrama, strip_markdown
|
||||||
|
import utils
|
||||||
|
import json
|
||||||
|
from meme_generator import get_image_file_from_url
|
||||||
|
|
||||||
|
def load_key_from_file(filename : str) -> str:
|
||||||
|
with open(utils.get_real_filename(filename), "r") as f:
|
||||||
|
return f.read()
|
||||||
|
|
||||||
|
TWEET_LENGTH = 280
|
||||||
|
URL_LENGTH = 23
|
||||||
|
HASHTAG_REGION = 23424977
|
||||||
|
IMAGE_URL_REGEX = r"https://rdrama\.net/images/([1234567890]*)\.webp"
|
||||||
|
TWEET_URL_REGEX = r"https://twitter\.com/([a-zA-Z]*)/status/([0-9]*)"
|
||||||
|
|
||||||
|
consumer_key = load_key_from_file("twitter_api_key")
|
||||||
|
consumer_secret = load_key_from_file("twitter_api_secret")
|
||||||
|
access_token = load_key_from_file("twitter_access_token")
|
||||||
|
access_token_secret = load_key_from_file("twitter_access_token_secret")
|
||||||
|
|
||||||
|
auth = tweepy.OAuth1UserHandler(
|
||||||
|
consumer_key,
|
||||||
|
consumer_secret,
|
||||||
|
access_token,
|
||||||
|
access_token_secret
|
||||||
|
)
|
||||||
|
api = tweepy.API(auth)
|
||||||
|
rdrama = get_rdrama()
|
||||||
|
|
||||||
|
def post_rdrama_tweet(post, api):
|
||||||
|
tweet_url = post['url']
|
||||||
|
tweet_text = get_tweet_text(post)
|
||||||
|
|
||||||
|
return api.update_status(tweet_text, attachment_url=tweet_url)
|
||||||
|
|
||||||
|
def post_rdrama_image(post, api):
|
||||||
|
animated_image = get_image_file_from_url(post['url'])
|
||||||
|
file = BytesIO(initial_bytes=animated_image.get_binary_gif())
|
||||||
|
media = api.media_upload(filename = "foo.gif", file=file, chunked=True, wait_for_async_finalize = True)
|
||||||
|
media_id = media.media_id_string
|
||||||
|
tweet_text = get_tweet_text(post)
|
||||||
|
return api.update_status(tweet_text, media_ids=[media_id])
|
||||||
|
|
||||||
|
def post_rdrama_basic_article(post, api):
|
||||||
|
tweet_text = get_tweet_text(post)
|
||||||
|
return api.update_status(tweet_text)
|
||||||
|
|
||||||
|
def hashtagify(string, api):
|
||||||
|
trends = api.get_place_trends(id=23424977)[0]['trends']
|
||||||
|
trend_words = []
|
||||||
|
for trend in trends:
|
||||||
|
name = trend['name'].lower()
|
||||||
|
if '#' in name:
|
||||||
|
trend_words.append(name[1:])
|
||||||
|
else:
|
||||||
|
for word in name.split(' '):
|
||||||
|
trend_words.append(word)
|
||||||
|
print(trend_words)
|
||||||
|
input = string
|
||||||
|
for hashtag in trend_words:
|
||||||
|
input = re.sub(f" {hashtag} ", f" #{hashtag} ", input)
|
||||||
|
return input
|
||||||
|
|
||||||
|
def get_tweet_text(post):
|
||||||
|
rdrama_url = post['permalink']
|
||||||
|
title = post['title']
|
||||||
|
|
||||||
|
text_space = TWEET_LENGTH - URL_LENGTH - 1
|
||||||
|
actual_title = re.sub(r":[^ ]*:", "", title) #remove marseys
|
||||||
|
actual_title = hashtagify(actual_title, api)
|
||||||
|
if (len(title) > text_space):
|
||||||
|
actual_title = actual_title[0:text_space-3] + "..."
|
||||||
|
else:
|
||||||
|
actual_title = actual_title
|
||||||
|
|
||||||
|
return f"{actual_title} {rdrama_url}"
|
||||||
|
|
||||||
|
def post_top_scoring_link(rdrama, api):
|
||||||
|
post = None
|
||||||
|
for current_post in rdrama.get_posts(sort='top', t='hour')['data']:
|
||||||
|
if not current_post['club']:
|
||||||
|
post = current_post
|
||||||
|
break
|
||||||
|
#post = rdrama.get_posts(sort='top', t='hour')['data'][0] #top scoring post
|
||||||
|
if re.match(TWEET_URL_REGEX, post['url']):
|
||||||
|
tweet = post_rdrama_tweet(post, api)
|
||||||
|
elif re.match(IMAGE_URL_REGEX, post['url']):
|
||||||
|
tweet = post_rdrama_image(post, api)
|
||||||
|
else:
|
||||||
|
tweet = post_rdrama_basic_article(post, api)
|
||||||
|
url = f"https://twitter.com/drama_meme/status/{tweet.id}"
|
||||||
|
rdrama.reply_to_post(post['id'], f"Nice post, bro! [I posted it to twitter]({url}).")
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
post_top_scoring_link(rdrama, api)
|
Loading…
Reference in New Issue