Switch to Redis

This commit is contained in:
Lucy Joshua 2023-01-30 23:22:21 +02:00
parent a8232064f6
commit 3f2320a6fc
3 changed files with 56 additions and 29 deletions

View file

@ -10,4 +10,5 @@ tweepy==4.12.1
urllib3==1.26.13
jsonschema==3.2.0
six==1.16.0
python-consul==1.1.0
crc16=0.1.1
python-redis=0.3.0

View file

@ -4,16 +4,15 @@ import syslog
import random
import json
from main import Connector
from main import init_api
def init_streamobject():
def init_streamobject(conn):
syslog.syslog(syslog.LOG_INFO, "Loading Stream object...")
bearer = os.getenv("BEARER")
return BotYamPoster(bearer)
return BotYamPoster(conn.get_bearer())
def post_reply(conn, victim_bank, tweet, words, reply_text, postcounter):
def post_reply(conn, victim_bank, tweet, words, reply_text_bank, postcounter):
# Search for word in word bank
if any(word in tweet.data['text'] for word in words):
reply_text = reply_text_bank[random.randint(0, (reply_text_bank.len()-1))]
# Post reply
if tweet.data['author_id'] in victim_bank.author_id:
reply_text = victim_bank.text[random.randint(0,2)] + "\n" + reply_text
@ -41,8 +40,7 @@ class BotYamPoster(tweepy.StreamingClient):
return
conn = Connector()
i, d = conn.conn_consul.get.kv('botyam/reply_bank')
reply_bank = json.loads(d["Value"])
reply_bank = json.loads(conn.dbconn.get_reply_bank())
# Debug
tweet_data = f"NEW TWEET from @{conn.api.get_user(id=tweet.data['author_id']).data['username']}: {tweet.data['text']}"
@ -55,16 +53,33 @@ class BotYamPoster(tweepy.StreamingClient):
# Run on all gags
for gag in reply_bank.gags:
post_reply(conn, reply_bank.victims, tweet, gag.keywords, gag.reply, postcounter)
postcounter = 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)
postcounter = post_reply(
conn,
reply_bank.victims,
tweet,
reply_bank.special_gags['haikar_misadot'].keywords,
reply_bank.special_gags['haikar_misadot'].reply,
postcounter)
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)
postcounter = post_reply(
conn,
reply_bank.victims,
tweet,
reply_bank.special_gags['misadot'].keywords,
reply_bank.special_gags['misadot'].reply,
postcounter)
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)
if any(tilter in tweet.data['text'] for tilter in reply_bank.special_gags['tilt'].keywords) or (postcounter == 0 and "@FromBotYam" in tweet.data['text']):
postcounter = post_reply(
conn,
reply_bank.victims,
tweet, reply_bank.special_gags['tilt'].keywords,
reply_bank.special_gags['tilt'].reply,
postcounter)
# Define a callback function to handle errors
def on_error(self, status_code):

View file

@ -1,40 +1,51 @@
import tweepy
import os
import syslog
import consul
import json
import redis
from BotYamPoster import BotYamPoster
from BotYamPoster import init_streamobject
class Connector:
conn_consul = set()
api = set()
class Connector():
def __init__(self):
syslog.syslog(syslog.LOG_INFO, "Loading Consul connector...")
# TODO: Add token
conn_consul = consul.Consul(host='', port='')
self.dbconn = redis.Redis(
host=os.getenv("REDIS_HOST"),
port=os.getenv("REDIS_PORT"),
password=os.getenv("REDIS_CREDENTIALS")
)
api = Connector.init_api(conn_consul)
self.api = Connector.init_api(self.dbconn)
def init_api(conn_consul):
def init_api(dbconn):
# Syslog report
syslog.syslog(syslog.LOG_INFO, "Loading Twitter API connector...")
i, kv_keys = conn_consul.kv.get('botyam/api')
return tweepy.Client(
bearer_token=json.loads(kv_keys['Value']).bearer,
consumer_key=json.loads(kv_keys['Value']).consumer_key,
consumer_secret=json.loads(kv_keys['Value']).consumer_secret,
access_token=json.loads(kv_keys['Value']).access_token,
access_token_secret=json.loads(kv_keys['Value']).access_token_secret)
bearer_token=str(dbconn.hget("api", "bearer")),
consumer_key=str(dbconn.hget("api", "consumer_key")),
consumer_secret=str(dbconn.hget("api", "consumer_secret"))
access_token=str(dbconn.hget("api", "access_token")),
access_token_secret=str(dbconn.hget("api","access_token_secret"))
)
def get_reply_bank(self):
return json.loads(self.dbconn.get('reply_bank'))
def get_victims(self):
return json.loads(self.dbconn.get('reply_bank')).victims
def get_bearer(self):
return str(self.dbconn.hget("api", "bearer"))
def main():
syslog.syslog(syslog.LOG_INFO, "BOT-YAM - VERSION 2.1.2 >>>>")
stream = init_streamobject()
conn = Connector()
stream = init_streamobject(conn)
syslog.syslog(syslog.LOG_INFO, "Adding stream rules...")
stream.add_rules(tweepy.StreamRule("from:LucyBscalE OR from:aviv_yashar OR from:shaulig OR from:DvirAviam OR from:YoavFried1 OR from:StevenRaz5 OR from:nir_hau"))
stream.add_rules(tweepy.StreamRule(conn.get_victims().stream_filter))
stream.add_rules(tweepy.StreamRule("@FromBotYam"))
# Start listening for tweets
syslog.syslog(syslog.LOG_INFO, "Starting Twitter stream!")