New complete refactor

This commit is contained in:
Lucy Joshua 2023-01-29 01:20:13 +02:00
parent 89bddc5e10
commit 45b3405c87
3 changed files with 98 additions and 93 deletions

72
BotYamPoster.py Normal file
View file

@ -0,0 +1,72 @@
import tweepy
import os
import syslog
import random
import json
from main import Connector
from main import init_api
def init_streamobject():
syslog.syslog(syslog.LOG_INFO, "Loading Stream object...")
bearer = os.getenv("BEARER")
return BotYamPoster(bearer)
def post_reply(conn, victim_bank, tweet, words, reply_text, postcounter):
# Search for word in word bank
if any(word in tweet.data['text'] for word in words):
# Post reply
if tweet.data['author_id'] in victim_bank.author_id:
reply_text = victim_bank.text[random.randint(0,2)] + "\n" + reply_text
res = conn.api.create_tweet(
text=reply_text,
in_reply_to_tweet_id=tweet["id"]
)
response_data = f"RESPONDING: {res.data['text']}"
syslog.syslog(syslog.LOG_INFO, response_data)
return (postcounter + 1)
class BotYamPoster(tweepy.StreamingClient):
# Define a callback function to handle tweets
def on_tweet(self, tweet):
# Make it easy on Yashar
postcounter = 0
if (not "@FromBotYam" in tweet.data['text'] and random.randint(0,3) != 0):
return
# Don't use bot for own replies
if tweet.data['author_id'] == "1604848395805401092":
return
conn = Connector()
i, d = conn.conn_consul.get.kv('botyam/reply_bank')
reply_bank = json.loads(d["Value"])
# Debug
tweet_data = f"NEW TWEET from @{conn.api.get_user(id=tweet.data['author_id']).data['username']}: {tweet.data['text']}"
syslog.syslog(syslog.LOG_INFO, tweet_data)
# Spare me if starts with RT
if tweet.data['text'][:2] == "RT":
syslog.syslog(syslog.LOG_INFO, "Skipping retweet...")
return
# Run on all gags
for gag in reply_bank.gags:
post_reply(conn, reply_bank.victims, tweet, gag.keywords, gag.reply, postcounter)
# Special gags
if reply_bank.special_gags['haikar_misadot'].keywords[0] in tweet.data["text"]:
post_reply(conn, reply_bank.victims, tweet, reply_bank.special_gags['haikar_misadot'].keywords, reply_bank.special_gags['haikar_misadot'].reply)
elif not any(gebol in tweet.data['text'] for gebol in reply_bank.gags[1].keywords) and any(misada in tweet.data['text'] for misada in reply_bank.special_gags['misadot'].keywords):
post_reply(conn, reply_bank.victims, tweet, reply_bank.special_gags['misadot'].keywords)
if any(tilter in tweet.data['text'] for tilter in reply_bank.special_gags['tilt'].keywords) or (postcounter == 0 and not "@FromBotYam" in tweet.data['text']):
post_reply(conn, reply_bank.victims, tweet, reply_bank.special_gags['tilt'].keywords, reply_bank.special_gags['tilt'].reply)
# Define a callback function to handle errors
def on_error(self, status_code):
# Print the error code
syslog.syslog(syslog.LOG_ERR, status_code)

114
main.py
View file

@ -1,104 +1,34 @@
import tweepy import tweepy
import os import os
import syslog import syslog
import random import consul
import json
from BotYamPoster import BotYamPoster
from BotYamPoster import init_streamobject
def init_api():
# Syslog report
syslog.syslog(syslog.LOG_INFO, "Loading API...")
# Secrets class Connector:
consumer_key = os.getenv("CONSUMER_KEY") conn_consul = set()
consumer_secret = os.getenv("CONSUMER_SECRET") api = set()
access_token = os.getenv("ACCESS_TOKEN")
access_token_secret = os.getenv("ACCESS_TOKEN_SECRET")
bearer = os.getenv("BEARER")
return tweepy.Client( def __init__(self):
bearer_token=bearer, syslog.syslog(syslog.LOG_INFO, "Loading Consul connector...")
consumer_key=consumer_key, # TODO: Add token
consumer_secret=consumer_secret, conn_consul = consul.Consul(host='', port='')
access_token=access_token,
access_token_secret=access_token_secret)
def init_streamobject(): api = Connector.init_api(conn_consul)
syslog.syslog(syslog.LOG_INFO, "Loading Stream object...")
bearer = os.getenv("BEARER")
return BotYamPoster(bearer)
def post_reply(api, tweet, words, reply_text): def init_api(conn_consul):
# Search for word in word bank # Syslog report
if any(word in tweet.data['text'] for word in words): syslog.syslog(syslog.LOG_INFO, "Loading Twitter API connector...")
# Post reply i, kv_keys = conn_consul.kv.get('botyam/api')
res = api.create_tweet(
text=reply_text,
in_reply_to_tweet_id=tweet["id"]
)
response_data = f"RESPONDING: {res.data['text']}"
syslog.syslog(syslog.LOG_INFO, response_data)
# Poster class return tweepy.Client(
class BotYamPoster(tweepy.StreamingClient): bearer_token=json.loads(kv_keys['Value']).bearer,
consumer_key=json.loads(kv_keys['Value']).consumer_key,
# Define a callback function to handle tweets consumer_secret=json.loads(kv_keys['Value']).consumer_secret,
def on_tweet(self, tweet): access_token=json.loads(kv_keys['Value']).access_token,
# Make it easy on Yashar access_token_secret=json.loads(kv_keys['Value']).access_token_secret)
if (tweet.data['author_id'] == "1533213104" and random.randint(0,3) != 0):
return
# Don't use bot for own replies
if tweet.data['author_id'] == "1604848395805401092":
return
api = init_api()
# Debug
tweet_data = f"NEW TWEET from @{api.get_user(id=tweet.data['author_id']).data['username']}: {tweet.data['text']}"
syslog.syslog(syslog.LOG_INFO, tweet_data)
# Spare me if starts with RT
if tweet.data['text'][:2] == "RT":
syslog.syslog(syslog.LOG_INFO, "Skipping retweet...")
return
# Words bank
bat_yam_words = ['בת ים', 'בת ימ', 'בת-ים', 'בת-ימ', 'https://t.co/PZqQaUVGAM']
gebels_words = ['גבלס', 'נאצי', 'היטלר', 'קורונה', 'מסמכים', 'ההסמכה']
police_words = ['שוטר', 'מלשין', 'מלשינ', 'נלשן', 'מלשנ', 'להלשין', 'משטרה', 'משטרות', 'סירנה', 'שיטור', 'בוגדים', 'בוגד', 'בגידה', '👮‍♀️', '🚨', '🚔', '🚓', '👮‍♂️', 'קטטה', 'מתקוטט', 'משטרע', 'מאפיה', 'טרור', 'סירנות', '1312', '13.12', '1 3 1 2', '13 12', '1 312', '131 2', '13-12', '1-312', '131-2', '1-3-1-2', '1 3 12', '1 3 12', '13 1 2', '1-3-12', '1-3-12', '13-1-2', 'acab', 'ac ab', 'ACAB', 'AC AB', 'אגאב', 'קצין', 'קצינ', 'קצונה', 'צהוב', 'כחול']
misadot_words = ['העיקר מסעדות', 'מסעדה', 'מסעדות']
smol_words = ['שמאל', 'ול', 'סמול']
reply_words = ['@FromBotYam']
# Reply bank
reply_text_batyam = "https://twitter.com/FromBotYam/status/1611546128524185601/video/1"
reply_text_police = "https://twitter.com/FromBotYam/status/1611542331781529601/video/1"
reply_text_gebels = "https://twitter.com/FromBotYam/status/1611548817853227009/video/1"
reply_text_misadot = [reply_text_gebels, "https://twitter.com/FromBotYam/status/1612853363066175490/video/1", "https://twitter.com/FromBotYam/status/1616828733314170881/video/1"]
reply_text_smol = "https://twitter.com/FromBotYam/status/1613249771275182089/video/1"
reply_videons_reply = ["https://twitter.com/FromBotYam/status/1611495568148238336/video/1", "https://twitter.com/FromBotYam/status/1612852295980683264/video/1"]
reply_text_reply = f"מה עכשיו לערב אותי פה חבורה של קקות {reply_videons_reply[random.randint(0,1)]}"
# Users bank
batyam_folks = ['134339937', '1533213104']
# Replies
post_reply(api, tweet, reply_words, reply_text_reply)
post_reply(api, tweet, gebels_words, reply_text_gebels)
post_reply(api, tweet, police_words, reply_text_police)
if any(botyam_og in tweet.data['author_id'] for botyam_og in batyam_folks):
post_reply(api, tweet, bat_yam_words, reply_text_batyam)
# Misadot (will be sectioned off later)
if tweet.data['text'] == misadot_words[0]:
post_reply(api, tweet, misadot_words[0], reply_text_misadot[-1])
if not any(gebels_word in tweet.data['text'] for gebels_word in gebels_words):
post_reply(api, tweet, misadot_words, reply_text_misadot[random.randint(0,2)])
else:
post_reply(api, tweet, misadot_words, reply_text_misadot[random.randint(1,2)])
post_reply(api, tweet, smol_words, reply_text_smol)
# Define a callback function to handle errors
def on_error(self, status_code):
# Print the error code
syslog.syslog(syslog.LOG_ERR, status_code)
def main(): def main():
syslog.syslog(syslog.LOG_INFO, "BOT-YAM - VERSION 2.1.2 >>>>") syslog.syslog(syslog.LOG_INFO, "BOT-YAM - VERSION 2.1.2 >>>>")

View file

@ -7,4 +7,7 @@ PyYAML==5.3.1
requests==2.28.1 requests==2.28.1
requests-oauthlib==1.3.1 requests-oauthlib==1.3.1
tweepy==4.12.1 tweepy==4.12.1
urllib3==1.26.13 urllib3==1.26.13
jsonschema==3.2.0
six==1.16.0
python-consul==1.1.0