File size: 3,472 Bytes
7a7b4e7 805c3e0 7a7b4e7 36ad45e 68773aa 7a7b4e7 1ef8a31 7a7b4e7 1ef8a31 36ad45e 7a7b4e7 36ad45e 7a7b4e7 0f33e7d 7a7b4e7 0f33e7d 7a7b4e7 0f33e7d 7a7b4e7 |
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 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 |
import logging
import os
import time
from pathlib import Path
import openai
import tweepy
logger = logging.getLogger()
logging.basicConfig(level=logging.INFO)
logger.setLevel(logging.INFO)
openai_key = os.environ.get("openai_api_key")
consumer_key = os.environ.get("consumer_key")
consumer_secret_key = os.environ.get("consumer_secret_key")
access_token = os.environ.get("access_token")
access_token_secret = os.environ.get("access_token_secret")
bearer_token = os.environ.get("bearer_token")
client = tweepy.Client(
bearer_token=bearer_token,
consumer_key=consumer_key,
consumer_secret=consumer_secret_key,
access_token=access_token,
access_token_secret=access_token_secret,
wait_on_rate_limit=True,
)
def get_last_tweet(file_path: str):
path = Path(file_path)
if not path.exists():
mentions = client.get_users_mentions(
id=1612106815096999936,
expansions=["author_id", "in_reply_to_user_id", "referenced_tweets.id"],
)
since_id = mentions.data[0].id
put_last_tweet(file_path, since_id)
return since_id
return int(path.read_text().strip())
def put_last_tweet(file_path: str, id: str):
Path(file_path).write_text(str(id))
logger.info("Updated the file with the latest tweet Id")
return
def response(text):
openai.api_key = openai_key
response = openai.Completion.create(
engine="text-davinci-002",
prompt=text,
temperature=0.7,
max_tokens=60,
top_p=1,
frequency_penalty=0,
presence_penalty=0,
)
return response.choices[0].text.strip()
def roast(text):
return response(
f"Humorously mock, humiliate and hurt the user's feelings with a well-timed joke, diss or comeback based on the info.\n\nInfo: {text}\n\nResponse:"
)
def toast(text):
return response(
f"Give the user a genuine and unique compliment to make them feel good about themselves based on the info in a hood style manner.\n\nInfo: {text}\n\nResponse:"
)
def reply_to_mentions():
since_id = get_last_tweet("last_id.txt")
mentions = client.get_users_mentions(
id=1612106815096999936,
since_id=since_id,
expansions=["author_id", "in_reply_to_user_id", "referenced_tweets.id"],
)
if mentions.data is None:
logger.info("No new mentions found")
return
for mention in reversed(mentions.data):
tweet_to_roast_id = mention.referenced_tweets[0].id
tweet_to_roast = client.get_tweet(id=tweet_to_roast_id)
text_to_roast = tweet_to_roast.data.text
text_out = None
if "roast" in mention.text.lower():
text_out = roast(text_to_roast)
elif "toast" in mention.text.lower():
text_out = toast(text_to_roast)
if text_out is None:
continue
try:
logger.info(f"Responding to: {mention.id}")
client.create_tweet(text=text_out, in_reply_to_tweet_id=mention.id)
except Exception as e:
logger.error(e)
continue
put_last_tweet("last_id.txt", mention.id)
def main():
while True:
try:
reply_to_mentions()
except Exception as e:
logger.error(e)
# Print more helpful error messages with line number
import traceback
traceback.print_exc()
time.sleep(60)
if __name__ == "__main__":
main()
|