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

View file

@ -1,40 +1,51 @@
import tweepy import tweepy
import os import os
import syslog import syslog
import consul
import json import json
import redis
from BotYamPoster import BotYamPoster from BotYamPoster import BotYamPoster
from BotYamPoster import init_streamobject from BotYamPoster import init_streamobject
class Connector: class Connector():
conn_consul = set()
api = set()
def __init__(self): def __init__(self):
syslog.syslog(syslog.LOG_INFO, "Loading Consul connector...") syslog.syslog(syslog.LOG_INFO, "Loading Consul connector...")
# TODO: Add token # 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 report
syslog.syslog(syslog.LOG_INFO, "Loading Twitter API connector...") syslog.syslog(syslog.LOG_INFO, "Loading Twitter API connector...")
i, kv_keys = conn_consul.kv.get('botyam/api')
return tweepy.Client( return tweepy.Client(
bearer_token=json.loads(kv_keys['Value']).bearer, bearer_token=str(dbconn.hget("api", "bearer")),
consumer_key=json.loads(kv_keys['Value']).consumer_key, consumer_key=str(dbconn.hget("api", "consumer_key")),
consumer_secret=json.loads(kv_keys['Value']).consumer_secret, consumer_secret=str(dbconn.hget("api", "consumer_secret"))
access_token=json.loads(kv_keys['Value']).access_token, access_token=str(dbconn.hget("api", "access_token")),
access_token_secret=json.loads(kv_keys['Value']).access_token_secret) 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(): def main():
syslog.syslog(syslog.LOG_INFO, "BOT-YAM - VERSION 2.1.2 >>>>") 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...") 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")) stream.add_rules(tweepy.StreamRule("@FromBotYam"))
# Start listening for tweets # Start listening for tweets
syslog.syslog(syslog.LOG_INFO, "Starting Twitter stream!") syslog.syslog(syslog.LOG_INFO, "Starting Twitter stream!")