Compare commits
No commits in common. "b3364d99b092bd44a4a494952343d10727243f51" and "74a8f3bfe75188431ca2a5031fd12d4957b55f94" have entirely different histories.
b3364d99b0
...
74a8f3bfe7
137
bert.py
137
bert.py
@ -1,33 +1,45 @@
|
|||||||
#!/usr/bin/python3 -u
|
#!/usr/bin/python3 -u
|
||||||
|
|
||||||
|
import gc
|
||||||
import socket
|
import socket
|
||||||
import ssl
|
import ssl
|
||||||
import sys
|
import sys
|
||||||
import os
|
import os
|
||||||
from time import sleep
|
from time import sleep
|
||||||
import launch
|
import launch
|
||||||
|
import tweepy
|
||||||
import threading
|
import threading
|
||||||
import re
|
import re
|
||||||
|
import html
|
||||||
import json
|
import json
|
||||||
import requests
|
import requests
|
||||||
from datetime import datetime, timedelta
|
from datetime import datetime
|
||||||
|
from datetime import timedelta
|
||||||
import konfuzius
|
import konfuzius
|
||||||
|
import urlinfo
|
||||||
import fml
|
import fml
|
||||||
import string
|
import string
|
||||||
import random
|
import random
|
||||||
|
from flask import Flask, request
|
||||||
from nslookup import nslookup
|
from nslookup import nslookup
|
||||||
import rss
|
import rss
|
||||||
|
|
||||||
version = "v0.9"
|
version = "v0.8"
|
||||||
|
|
||||||
# IRC settings
|
# IRC settings
|
||||||
host = ""
|
host = ""
|
||||||
port =
|
port =
|
||||||
nick = "huan"
|
nick = "bert"
|
||||||
password = ""
|
password = ""
|
||||||
chan = ""
|
chan = ""
|
||||||
fefe_chans = [""]
|
fefe_chans = [""]
|
||||||
|
|
||||||
|
# Twitter settings
|
||||||
|
consumer_key = ""
|
||||||
|
consumer_secret = ""
|
||||||
|
access_token = ""
|
||||||
|
access_secret = ""
|
||||||
|
|
||||||
# fml endpoint
|
# fml endpoint
|
||||||
fml_url = "http://www.fmylife.com/random"
|
fml_url = "http://www.fmylife.com/random"
|
||||||
|
|
||||||
@ -38,9 +50,9 @@ y = "\x038"
|
|||||||
r = "\x034"
|
r = "\x034"
|
||||||
g = "\x033"
|
g = "\x033"
|
||||||
|
|
||||||
context = ssl.create_default_context()
|
|
||||||
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
|
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||||
irc = context.wrap_socket(sock, server_hostname=host)
|
irc = ssl.wrap_socket(s)
|
||||||
|
|
||||||
|
|
||||||
# Currency API
|
# Currency API
|
||||||
@ -121,12 +133,6 @@ def mode(nick):
|
|||||||
except Exception as err:
|
except Exception as err:
|
||||||
print("Failed! "+err)
|
print("Failed! "+err)
|
||||||
|
|
||||||
print("Setting mode -x")
|
|
||||||
try:
|
|
||||||
sendRaw("MODE "+nick+" -x\n")
|
|
||||||
except Exception as err:
|
|
||||||
print("Failed! "+err)
|
|
||||||
|
|
||||||
|
|
||||||
def part(chan):
|
def part(chan):
|
||||||
print("Leaving channel "+chan)
|
print("Leaving channel "+chan)
|
||||||
@ -189,13 +195,19 @@ def yon():
|
|||||||
return answer
|
return answer
|
||||||
|
|
||||||
|
|
||||||
|
def url_title(url):
|
||||||
|
title = urlinfo.get_title(url).encode("UTF-8").decode("UTF-8")
|
||||||
|
return title
|
||||||
|
|
||||||
|
|
||||||
def is_registered(username):
|
def is_registered(username):
|
||||||
try:
|
try:
|
||||||
sendRaw("WHOIS "+str(username)+"\n")
|
sendRaw("WHOIS "+str(username)+"\n")
|
||||||
user_info = getMessage()
|
user_info = getMessage()
|
||||||
regex = r"330 "+str(re.escape(nick))+" "+str(re.escape(username))+" \S+ :is logged in as"
|
regex = r"330 "+str(nick)+" "+str(username)+" [a-zA-Z0-9]+ :is logged in as"
|
||||||
matches = re.finditer(regex, user_info, re.MULTILINE)
|
matches = re.finditer(regex, user_info, re.MULTILINE)
|
||||||
for match in matches:
|
for match in matches:
|
||||||
|
print(match.group(0))
|
||||||
acc_name = match.group(0).split()[3]
|
acc_name = match.group(0).split()[3]
|
||||||
return acc_name
|
return acc_name
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
@ -259,7 +271,7 @@ def ping(msg):
|
|||||||
sendRaw("PONG :"+msg+"\n")
|
sendRaw("PONG :"+msg+"\n")
|
||||||
|
|
||||||
|
|
||||||
def start(host, port, nick, password, chans):
|
def start(host, port, nick, password, chan):
|
||||||
try:
|
try:
|
||||||
connect(host, port)
|
connect(host, port)
|
||||||
sleep(2)
|
sleep(2)
|
||||||
@ -269,7 +281,7 @@ def start(host, port, nick, password, chans):
|
|||||||
sleep(6)
|
sleep(6)
|
||||||
auth(nick, password)
|
auth(nick, password)
|
||||||
sleep(2)
|
sleep(2)
|
||||||
for chan in chans:
|
for chan in fefe_chans:
|
||||||
join(chan)
|
join(chan)
|
||||||
sleep(2)
|
sleep(2)
|
||||||
mode(nick)
|
mode(nick)
|
||||||
@ -282,6 +294,9 @@ def command_loop():
|
|||||||
while True:
|
while True:
|
||||||
try:
|
try:
|
||||||
data = getData()
|
data = getData()
|
||||||
|
with open("bert.log", "a") as f:
|
||||||
|
f.write(data)
|
||||||
|
f.close()
|
||||||
ircmsg = data.strip("\n\r")
|
ircmsg = data.strip("\n\r")
|
||||||
if ircmsg.find("PING :") != -1:
|
if ircmsg.find("PING :") != -1:
|
||||||
pingstring = ircmsg.strip("PING :")
|
pingstring = ircmsg.strip("PING :")
|
||||||
@ -299,7 +314,7 @@ def command_loop():
|
|||||||
print("direct message received")
|
print("direct message received")
|
||||||
if msg == "\x01VERSION\x01":
|
if msg == "\x01VERSION\x01":
|
||||||
print("got ctcp version request")
|
print("got ctcp version request")
|
||||||
notice(ircnick, "\x01VERSION HuanBot (fork of BertBot) "+version+"\x01")
|
notice(ircnick, "\x01VERSION BertBot "+version+"\x01")
|
||||||
elif msg.startswith("\x01PING"):
|
elif msg.startswith("\x01PING"):
|
||||||
print("got ctcp ping request")
|
print("got ctcp ping request")
|
||||||
pingstring = msg.split()[1]
|
pingstring = msg.split()[1]
|
||||||
@ -413,6 +428,31 @@ def command_loop():
|
|||||||
except Exception as err:
|
except Exception as err:
|
||||||
print("Error getting rep! - "+str(err))
|
print("Error getting rep! - "+str(err))
|
||||||
|
|
||||||
|
elif msg.startswith(".twitter"):
|
||||||
|
try:
|
||||||
|
twittername = msg.split()[1]
|
||||||
|
try:
|
||||||
|
lasttweet = api.user_timeline(screen_name=twittername, count=1, tweet_mode="extended")[0]
|
||||||
|
twit = lasttweet.full_text
|
||||||
|
user = lasttweet.user.name
|
||||||
|
text = html.unescape(re.sub(r'\n', ' ', twit))
|
||||||
|
say(channel, b+user+": "+c+text)
|
||||||
|
except Exception as err:
|
||||||
|
print("Could not get last tweet! "+err)
|
||||||
|
except:
|
||||||
|
say(channel, "You have to give me a username")
|
||||||
|
|
||||||
|
elif msg.startswith(".trump"):
|
||||||
|
try:
|
||||||
|
twittername = "realdonaldtrump"
|
||||||
|
lasttweet = api.user_timeline(screen_name=twittername, count=1, tweet_mode="extended")[0]
|
||||||
|
twit = lasttweet.full_text
|
||||||
|
user = lasttweet.user.name
|
||||||
|
text = html.unescape(re.sub(r'\n', ' ', twit))
|
||||||
|
say(channel, b+user+": "+c+text)
|
||||||
|
except Exception as err:
|
||||||
|
print("Could not get last tweet! "+err)
|
||||||
|
|
||||||
elif msg.startswith(".konfuzius"):
|
elif msg.startswith(".konfuzius"):
|
||||||
try:
|
try:
|
||||||
quote = konfuzius.random_quote()
|
quote = konfuzius.random_quote()
|
||||||
@ -421,7 +461,7 @@ def command_loop():
|
|||||||
say(channel, "Error :(")
|
say(channel, "Error :(")
|
||||||
|
|
||||||
elif msg == ".quit":
|
elif msg == ".quit":
|
||||||
if ircnick == "jkhsjdhjs":
|
if ircnick == "elmo":
|
||||||
say(channel, "Flying to mars...")
|
say(channel, "Flying to mars...")
|
||||||
print("got quit command. exiting...")
|
print("got quit command. exiting...")
|
||||||
part(channel)
|
part(channel)
|
||||||
@ -430,7 +470,7 @@ def command_loop():
|
|||||||
say(channel, "You are not my master!")
|
say(channel, "You are not my master!")
|
||||||
|
|
||||||
elif msg.startswith(".say"):
|
elif msg.startswith(".say"):
|
||||||
if ircnick == "jkhsjdhjs":
|
if ircnick == "elmo":
|
||||||
try:
|
try:
|
||||||
sayit = msg.split(" ", 1)[1]
|
sayit = msg.split(" ", 1)[1]
|
||||||
say(channel, str(sayit))
|
say(channel, str(sayit))
|
||||||
@ -441,7 +481,7 @@ def command_loop():
|
|||||||
say(channel, "You are not my master!")
|
say(channel, "You are not my master!")
|
||||||
|
|
||||||
elif msg.startswith(".debug"):
|
elif msg.startswith(".debug"):
|
||||||
if ircnick == "jkhsjdhjs":
|
if ircnick == "elmo":
|
||||||
try:
|
try:
|
||||||
debugmsg = msg.split(" ", 1)[1]
|
debugmsg = msg.split(" ", 1)[1]
|
||||||
raw(debugmsg)
|
raw(debugmsg)
|
||||||
@ -451,6 +491,30 @@ def command_loop():
|
|||||||
else:
|
else:
|
||||||
say(channel, "You are not my master!")
|
say(channel, "You are not my master!")
|
||||||
|
|
||||||
|
elif "twitter.com" in msg:
|
||||||
|
try:
|
||||||
|
p = re.compile('twitter\.com/[A-Za-z0-9]*/status/[0-9]*')
|
||||||
|
tweet_link = p.search(msg).group(0)
|
||||||
|
status_id = tweet_link.split("/")[3]
|
||||||
|
status = api.get_status(status_id, tweet_mode="extended")
|
||||||
|
user = status.user.name
|
||||||
|
text = status.full_text
|
||||||
|
print("found twitter link\n"+user+" - "+text)
|
||||||
|
say(channel, b+user+": "+c+text)
|
||||||
|
except Exception as err:
|
||||||
|
print("twitter link invalid "+str(err))
|
||||||
|
elif urlinfo.is_url(msg) != None:
|
||||||
|
try:
|
||||||
|
url = urlinfo.is_url(msg)
|
||||||
|
ignore = ["pr0gramm", "w0bm", "f0ck", "twitter", "youtube", "youtu.be"]
|
||||||
|
if any(ign in url for ign in ignore):
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
title = urlinfo.get_title(url)
|
||||||
|
print("Found URL and got title "+str(title))
|
||||||
|
say(channel, b+"Title: "+c+title)
|
||||||
|
except Exception as err:
|
||||||
|
print("Error getting URL title - "+str(err))
|
||||||
elif msg == ".fml":
|
elif msg == ".fml":
|
||||||
try:
|
try:
|
||||||
fml_string = fml.get_fml(fml_url)
|
fml_string = fml.get_fml(fml_url)
|
||||||
@ -499,6 +563,17 @@ def fefe_check():
|
|||||||
sleep(300)
|
sleep(300)
|
||||||
|
|
||||||
|
|
||||||
|
def gc_cycle():
|
||||||
|
while True:
|
||||||
|
try:
|
||||||
|
# fire the garbage collector
|
||||||
|
gc.set_debug(gc.DEBUG_STATS)
|
||||||
|
gc.collect()
|
||||||
|
time.sleep(120)
|
||||||
|
except Exception as err:
|
||||||
|
print("Error in garbage collector! - "+str(err))
|
||||||
|
|
||||||
|
|
||||||
class command_thread(threading.Thread):
|
class command_thread(threading.Thread):
|
||||||
def __init__(self, threadID):
|
def __init__(self, threadID):
|
||||||
threading.Thread.__init__(self)
|
threading.Thread.__init__(self)
|
||||||
@ -515,14 +590,30 @@ class fefe_thread(threading.Thread):
|
|||||||
print("Starting fefe thread...")
|
print("Starting fefe thread...")
|
||||||
fefe_check()
|
fefe_check()
|
||||||
|
|
||||||
|
class gc_thread(threading.Thread):
|
||||||
|
def __init__(self, threadID):
|
||||||
|
threading.Thread.__init__(self)
|
||||||
|
self.threadID = threadID
|
||||||
|
def run(self):
|
||||||
|
print("Starting garbage collector thread...")
|
||||||
|
gc_cycle()
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
start(host, port, nick, password, set(join_chans + fefe_chans))
|
start(host, port, nick, password, chan)
|
||||||
|
global api
|
||||||
|
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
|
||||||
|
auth.set_access_token(access_token, access_secret)
|
||||||
|
api = tweepy.API(auth)
|
||||||
thread_command = command_thread(1)
|
thread_command = command_thread(1)
|
||||||
#thread_fefe = fefe_thread(2)
|
thread_fefe = fefe_thread(2)
|
||||||
|
thread_gc = gc_thread(3)
|
||||||
thread_command.start()
|
thread_command.start()
|
||||||
#sleep(2)
|
sleep(2)
|
||||||
#thread_fefe.start()
|
thread_fefe.start()
|
||||||
|
sleep(2)
|
||||||
|
thread_gc.start()
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
gc.enable()
|
||||||
main()
|
main()
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
import re
|
import re
|
||||||
import random
|
import random
|
||||||
|
import json
|
||||||
import requests
|
import requests
|
||||||
from bs4 import BeautifulSoup
|
from bs4 import BeautifulSoup
|
||||||
|
|
||||||
|
@ -1,5 +0,0 @@
|
|||||||
pytz
|
|
||||||
beautifulsoup4~=4.11
|
|
||||||
dnspython~=2.2
|
|
||||||
feedparser~=6.0
|
|
||||||
requests~=2.0
|
|
5
rss.py
5
rss.py
@ -3,11 +3,16 @@
|
|||||||
|
|
||||||
import feedparser
|
import feedparser
|
||||||
import time
|
import time
|
||||||
|
from subprocess import check_output
|
||||||
|
import sys
|
||||||
|
|
||||||
def check():
|
def check():
|
||||||
feed_name = 'fefe'
|
feed_name = 'fefe'
|
||||||
url = 'https://blog.fefe.de/rss.xml'
|
url = 'https://blog.fefe.de/rss.xml'
|
||||||
|
|
||||||
|
#feed_name = sys.argv[1]
|
||||||
|
#url = sys.argv[2]
|
||||||
|
|
||||||
db = 'rss_feeds.db'
|
db = 'rss_feeds.db'
|
||||||
limit = 12 * 3600 * 1000
|
limit = 12 * 3600 * 1000
|
||||||
|
|
||||||
|
1
tweepy
Submodule
1
tweepy
Submodule
@ -0,0 +1 @@
|
|||||||
|
Subproject commit 2efe385fc69385b57733f747ee62e6be12a1338b
|
Loading…
Reference in New Issue
Block a user