From 0ade70523a6348f4af23b6df51b1dba083e6bec6 Mon Sep 17 00:00:00 2001 From: Jordan Doyle Date: Sat, 22 Jul 2017 10:39:37 +0100 Subject: [PATCH] Remove markov & socks proxying --- alembic.ini | 3 +-- dave/config.py | 33 +-------------------------------- dave/dave.py | 16 ---------------- dave/models.py | 10 ---------- dave/module.py | 2 -- dave/modules/btc.py | 3 +-- dave/modules/markov.py | 38 -------------------------------------- dave/modules/nice.py | 2 +- dave/modules/pollen.py | 2 -- dave/modules/sed.py | 10 ++++++---- dave/modules/title.py | 2 -- dave/modules/urbandictionary.py | 2 -- dave/modules/weather.py | 6 ------ dave/modules/wolfram.py | 2 -- migrations/versions/7836665787cd_add_messages_table.py | 38 -------------------------------------- requirements.txt | 4 ++-- 16 files changed, 12 insertions(+), 161 deletions(-) delete mode 100644 dave/modules/markov.py delete mode 100644 migrations/versions/7836665787cd_add_messages_table.py diff --git a/alembic.ini b/alembic.ini index 92affd9..1efc2f6 100644 --- a/alembic.ini +++ b/alembic.ini @@ -29,8 +29,7 @@ script_location = migrations # are written from script.py.mako # output_encoding = utf-8 -sqlalchemy.url = postgresql://homestead:secret@192.168.10.10/dave - +sqlalchemy.url = postgresql://dave:dave@127.0.0.1/dave # Logging configuration [loggers] diff --git a/dave/config.py b/dave/config.py index ae1fba3..b1e7a6c 100644 --- a/dave/config.py +++ b/dave/config.py @@ -4,10 +4,8 @@ import os.path from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker import socket -import socks import markovify import nltk -from models import Message import re # read the config file @@ -20,36 +18,7 @@ with open(os.path.abspath(os.path.join(basepath, "..", "config.json")), "r") as redis = redis.StrictRedis(host=config["redis"]["host"], port=config["redis"]["port"], db=config["redis"]["db"]) -# set everything to use our socks proxy -proxy = config['socks'].split(":") - -default_socket = socket.socket - -if proxy[0]: - socks.set_default_proxy(socks.SOCKS5, proxy[0], int(proxy[1])) - proxied_socket = socks.socksocket -else: - proxied_socket = socket.socket - # connect to the database db = create_engine(config["database"]) Session = sessionmaker(bind=db) -session = Session() - -# setup the markov chain -class PText(markovify.NewlineText): - def word_split(self, sentence): - words = re.split(self.word_split_pattern, sentence) - words = [ "::".join(tag) for tag in nltk.pos_tag(words) ] - return words - - def word_join(self, words): - sentence = " ".join(word.split("::")[0] for word in words) - return sentence - -if not redis.exists("markov:chain"): - markov = PText("\n".join([m[0] for m in session.query(Message.message).all()]), state_size=2) - redis.setex("markov:chain", 500, markov.chain.to_json()) -else: - markov = PText("\n".join([m[0] for m in session.query(Message.message).all()]), - state_size=2, chain=markovify.Chain.from_json(redis.get("markov:chain"))) +session = Session() \ No newline at end of file diff --git a/dave/dave.py b/dave/dave.py index 777dcc0..e7b9099 100644 --- a/dave/dave.py +++ b/dave/dave.py @@ -9,7 +9,6 @@ import modules import re import config import datetime -from models import Message from twisted.internet.threads import deferToThread @@ -74,21 +73,6 @@ class Dave(irc.IRCClient): else: method = (priority, val, match.groups()) - if not msg.startswith(self.nickname) and channel.startswith("#"): - try: - # not a direct command so we'll save the response to the db - db_msg = Message( - nick=nick, - channel=channel, - message=msg.decode('utf-8', 'ignore').encode('utf-8'), - userhost=user.split("!", 1)[1], - created_at=datetime.datetime.now() - ) - config.session.add(db_msg) - config.session.commit() - except: - log.err() - if method[1] is not None: # we matched a command method[1](self, method[2], nick, channel) diff --git a/dave/models.py b/dave/models.py index 2ff48ff..205de4f 100644 --- a/dave/models.py +++ b/dave/models.py @@ -9,13 +9,3 @@ class Location(Base): id = Column(Integer, primary_key=True) nick = Column(String) location = Column(String) - -class Message(Base): - __tablename__ = "messages" - - id = Column(Integer, primary_key=True) - nick = Column(String) - channel = Column(String) - message = Column(String) - userhost = Column(String) - created_at = Column(DateTime) diff --git a/dave/module.py b/dave/module.py index b753403..6473bc8 100644 --- a/dave/module.py +++ b/dave/module.py @@ -88,9 +88,7 @@ def proxied(): """Decorate a function to always proxy data flowing from it.""" def proxifier(function): def wrapper(*args, **kw): - socket.socket = config.proxied_socket output = function(*args, **kw) - socket.socket = config.default_socket return output return wrapper diff --git a/dave/modules/btc.py b/dave/modules/btc.py index 5da2825..6697e60 100644 --- a/dave/modules/btc.py +++ b/dave/modules/btc.py @@ -48,8 +48,7 @@ def btc(bot, args, sender, source): market, babel.numbers.format_currency(decimal.Decimal(data['last']) * multiplier, currency) - ).encode('utf-8') - for market, data in p['btc'][currencyKey].iteritems() + ).encode('utf-8') for market, data in p['btc'][currencyKey].iteritems() ]) prices += u'. average: {}'.format( diff --git a/dave/modules/markov.py b/dave/modules/markov.py deleted file mode 100644 index 0773db3..0000000 --- a/dave/modules/markov.py +++ /dev/null @@ -1,38 +0,0 @@ -# -*- coding: utf-8 -*- -"""Chatter bot using Markov chains.""" -import dave.module -import dave.config -import random -import re -from dave.models import Message - -FACTOR = 0.05 - - -@dave.module.help("Syntax: babble [optional seeds].") -@dave.module.command(["babble"], "?(.*)") -@dave.module.priority(dave.module.Priority.HIGHEST) -def babble(bot, args, sender, source): - msg = args[0].strip() - - if msg: - args = msg.split(" ") - - if len(args) == 2: - # require two seeds - resp = dave.config.markov.make_sentence(tuple(dave.config.markov.word_split(" ".join(args))), tries=10000) - else: - resp = None - else: - resp = dave.config.markov.make_sentence(tries=10000) - - if not resp is None: - bot.msg(source, resp.encode("utf-8")) - - -#@dave.module.match(r"(.*)") -#@dave.module.always_run() -#def random_babble(bot, args, sender, source): -# if not args[0].startswith(bot.nickname) and random.random() < FACTOR: -# # every (factor*100)% of messages should be babbled about -# babble(bot, args, sender, source) diff --git a/dave/modules/nice.py b/dave/modules/nice.py index 3e9248c..ce4f967 100644 --- a/dave/modules/nice.py +++ b/dave/modules/nice.py @@ -3,7 +3,7 @@ import dave.module -@dave.module.help("Nice.", name="donk") +@dave.module.help("Nice.", name="nice") @dave.module.match(r"^nice\.?$") @dave.module.priority(dave.module.Priority.LOW) def donk(bot, args, sender, source): diff --git a/dave/modules/pollen.py b/dave/modules/pollen.py index 49ea6d1..6c20de2 100644 --- a/dave/modules/pollen.py +++ b/dave/modules/pollen.py @@ -19,10 +19,8 @@ def pollen(bot, args, sender, source): text = None if not dave.config.redis.exists("pollen:{}".format(postcode)): - socket.socket = dave.config.proxied_socket res = br.open("https://www.bbc.co.uk/weather/{}".format(postcode)) data = res.get_data() - socket.socket = dave.config.default_socket soup = BeautifulSoup(data, "html.parser") element = soup.find_all("div", class_="environmental-index pollen-index") diff --git a/dave/modules/sed.py b/dave/modules/sed.py index 3307bff..13ae71f 100644 --- a/dave/modules/sed.py +++ b/dave/modules/sed.py @@ -1,8 +1,8 @@ # -*- coding: utf-8 -*- """Pass any messages beginning with 'sed' to GNU sed.""" -import subprocess import dave.module import dave.config +from twisted.words.protocols.irc import assembleFormattedText, attributes as A import re @@ -20,9 +20,11 @@ def sed(bot, args, sender, source): f = f | re.IGNORECASE try: - replace = re.sub(args[3], args[5], msg, count=0 if 'g' in flags else 1, + replace = re.sub(args[3], + assembleFormattedText(A.bold[args[5]]), + msg, + count=0 if 'g' in flags else 1, flags=f) - print(replace) except Exception as e: bot.reply(source, sender, "There was a problem with your sed command: {}".format(str(e))) @@ -30,7 +32,7 @@ def sed(bot, args, sender, source): if replace.strip() != msg: msg = replace.strip() - bot.msg(source, "{} meant: {}".format(sender, msg)) + bot.msg(source, "<{}> {}".format(sender, msg)) dave.config.redis.lset(key, i, msg) return diff --git a/dave/modules/title.py b/dave/modules/title.py index ba9ad18..6e54c4c 100644 --- a/dave/modules/title.py +++ b/dave/modules/title.py @@ -23,10 +23,8 @@ def link_parse(bot, args, sender, source): for match in matches: if not dave.config.redis.exists("site:{}".format(match)): - socket.socket = dave.config.proxied_socket res = br.open(match) data = res.get_data() - socket.socket = dave.config.default_socket soup = BeautifulSoup(data, "html.parser") title = soup.title diff --git a/dave/modules/urbandictionary.py b/dave/modules/urbandictionary.py index 1c7e8ab..6a956f6 100644 --- a/dave/modules/urbandictionary.py +++ b/dave/modules/urbandictionary.py @@ -24,7 +24,6 @@ def urbandictionary(bot, args, sender, source): return if not dave.config.redis.exists("urban_query:{}".format(query)): - socket.socket = dave.config.proxied_socket url = "https://mashape-community-urban-dictionary.p.mashape.com/define?term={}".format(quote_plus(query)) r = requests.get(url, headers={ "X-Mashape-Key": dave.config.config["api_keys"]["mashape"], @@ -32,7 +31,6 @@ def urbandictionary(bot, args, sender, source): }) resp = r.json() - socket.socket = dave.config.default_socket dave.config.redis.setex("urban_query:{}".format(query), 86400, pickle.dumps(resp)) else: resp = pickle.loads(dave.config.redis.get("urban_query:{}".format(query))) diff --git a/dave/modules/weather.py b/dave/modules/weather.py index 8d11237..52868d8 100644 --- a/dave/modules/weather.py +++ b/dave/modules/weather.py @@ -65,14 +65,12 @@ def get_location(location): key = "location:{}".format(location.lower()) if not dave.config.redis.exists(key): - socket.socket = dave.config.proxied_socket r = requests.get("https://maps.googleapis.com/maps/api/geocode/json?address={}&key={}".format( quote_plus(location), dave.config.config["api_keys"]["google_maps"] )) geocode = r.json() - socket.socket = dave.config.default_socket dave.config.redis.set(key, pickle.dumps(geocode)) else: @@ -112,7 +110,6 @@ def get_timezone(geocode): geocode["results"][0]["geometry"]["location"]["lng"]) if not dave.config.redis.exists(key): - socket.socket = dave.config.proxied_socket r = requests.get("http://api.timezonedb.com/?key={}&lat={}&lng={}&format=json".format( dave.config.config["api_keys"]["timezonedb"], geocode["results"][0]["geometry"]["location"]["lat"], @@ -120,7 +117,6 @@ def get_timezone(geocode): )) timezone = r.json() - socket.socket = dave.config.default_socket dave.config.redis.set(key, pickle.dumps(timezone)) else: @@ -135,7 +131,6 @@ def get_weather(geocode): geocode["results"][0]["geometry"]["location"]["lng"]) if not dave.config.redis.exists(key): - socket.socket = dave.config.proxied_socket r = requests.get("https://api.forecast.io/forecast/{}/{},{}?units=uk2".format( dave.config.config["api_keys"]["forecast.io"], geocode["results"][0]["geometry"]["location"]["lat"], @@ -143,7 +138,6 @@ def get_weather(geocode): )) json = r.json() - socket.socket = dave.config.default_socket dave.config.redis.setex(key, 300, pickle.dumps(json)) else: diff --git a/dave/modules/wolfram.py b/dave/modules/wolfram.py index 781bf41..b219820 100644 --- a/dave/modules/wolfram.py +++ b/dave/modules/wolfram.py @@ -21,10 +21,8 @@ def wolfram(bot, args, sender, source): return if query: - socket.socket = dave.config.proxied_socket client = wolframalpha.Client(dave.config.config["api_keys"]["wolfram"]) res = client.query(query) - socket.socket = dave.config.default_socket if len(res.pods) > 0: resultpod = next(res.results) diff --git a/migrations/versions/7836665787cd_add_messages_table.py b/migrations/versions/7836665787cd_add_messages_table.py deleted file mode 100644 index c220fbb..0000000 --- a/migrations/versions/7836665787cd_add_messages_table.py +++ /dev/null @@ -1,38 +0,0 @@ -"""Add messages table - -Revision ID: 7836665787cd -Revises: 0689a529bce0 -Create Date: 2016-11-12 08:20:05.648069 - -""" - -# revision identifiers, used by Alembic. -revision = '7836665787cd' -down_revision = '0689a529bce0' -branch_labels = None -depends_on = None - -from alembic import op -import sqlalchemy as sa - - -def upgrade(): - ### commands auto generated by Alembic - please adjust! ### - op.create_table('messages', - sa.Column('id', sa.Integer(), nullable=False), - sa.Column('nick', sa.String(), nullable=True), - sa.Column('channel', sa.String(), nullable=True), - sa.Column('message', sa.String(), nullable=True), - sa.Column('userhost', sa.String(), nullable=True), - sa.Column('created_at', sa.DateTime(), nullable=True), - sa.PrimaryKeyConstraint('id') - ) - op.drop_constraint(u'locations_nick_key', 'locations', type_='unique') - ### end Alembic commands ### - - -def downgrade(): - ### commands auto generated by Alembic - please adjust! ### - op.create_unique_constraint(u'locations_nick_key', 'locations', ['nick']) - op.drop_table('messages') - ### end Alembic commands ### diff --git a/requirements.txt b/requirements.txt index f3351df..5df71a0 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,5 @@ -twisted==16.2.0 -pyopenssl==16.0.0 +twisted==17.5.0 +pyopenssl==16.2.0 service_identity==16.0.0 enum34==1.1.6 beautifulsoup4==4.4.1 -- libgit2 1.7.2