def fakemcserver(inp,bot=None,input=None): ",fakemcserver <port> <max players> <server-name-with-no-spaces> " \ "<players-you-want-on-it> -- makes a fake minecraft classic server." \ "also appears on the mc classic server list..." if perm.isowner(input): check = input.inp.split(" ") if len(check)==4: i = 0 HOST, PORT = "", int(check[0]) global bottest bottest = ThreadedTCPServer((HOST, PORT), \ ThreadedTCPRequestHandler) ip, portss = bottest.server_address global server_thread server_thread = threading.Thread(target=bottest.serve_forever) server_thread.daemon = True server_thread.start() perm.repamsg(input,"Server loop running in thread: %s" % (server_thread.name)) url1 = ("http://www.minecraft.net/heartbeat.jsp?port=%s" % (check[0])) url2 = ("&max=%s&name=%s&public=True&version=7" % (check[1],check[2])) url3 = "&users=%s" % (check[3]) pageUrl = ("%s%s&salt=wo6kVAHjxoJcInKx%s" % (url1,url2,url3)) web = str(http.get(pageUrl)) perm.repamsg(input,web) while True: web = str(http.get(pageUrl)) if i==100: i=0 perm.repamsg(input,web) global plays plays = int(str(playeramount[-1]).replace("Thread-","")) bot.test["test"]=int(plays)-2 i+=1 time.sleep(45) else: return("error.") else: return("Nope.avi")
def tfeed(inp, input=None, bot=None, db_global=None): "auto tweet getter. ,tfeed <twitter-name-without-@-at-the-start>" db_global.execute("create table if not exists twitterfeeds(user, tweet)") db_global.commit() i=0 feed = input.inp if perm.isadmin(input) and not input.inp=='' and input.conn.conf["rss-on"]==True: testss = True for xcon in bot.conns: if feed not in bot.conns[xcon].conf["twitterfeedchans"]: bot.conns[xcon].conf["twitterfeedchans"][feed]=[] db_global.execute("insert or replace into twitterfeeds(user, tweet) values (?,?)",(feed, "none")) if bot.conns[xcon].conf["twitterfeedchans"][feed].count(bot.conns[xcon].conf["reportchan"])==0: bot.conns[xcon].conf["twitterfeedchans"][feed].append(bot.conns[xcon].conf["reportchan"]) lasttweet = ''.join(db_global.execute("select tweet from twitterfeeds where user=(?)",(feed,)).fetchone()) input.say("Done. following "+feed) ttl=75 bot.twitterlist[feed]=True while testss: rss = get_twitter(feed) tweet=''.join(rss) if lasttweet=='': lasttweet="none." #print(lasttweet+"\n"+tweet) if errormatch(tweet): if tweet.endswith("400"): ttl=ttl+60 input.say("I have been rate limited on twitter. This means you ether have too many lists/people beening watched at once please ether make a bigger list or remove some of the people/lists being watched...") tweet=lasttweet if tweet.endswith("404"): testss= False del bot.twitterlist[feed] return "feed: '"+feed+"' returned: Twitter account by the name of "+feed+" not found." if tweet.endswith("500") or tweet.endswith("502") or tweet.endswith("503"): testss= False del bot.twitterlist[feed] return "feed: '"+feed+"' returned: Twitter is down, being upgraded or overloaded. Try again later...." else: input.say("feed: '"+feed+"' returned: '"+lasttweet+"'. Something up in here is stuffed....") tweet=lasttweet testss= False if lasttweet==tweet and not tweet.startswith("error: "): i=i+1 if i == 32: for xcon in bot.conns: perm.repamsg(input,"No new tweets from '"+feed+"'.") i=0 time.sleep(ttl) elif not lasttweet==tweet and not tweet.startswith("error: "): for xcon in bot.conns: for channels in bot.conns[xcon].conf["twitterfeedchans"][feed]: if channels not in bot.conns[xcon].conf["ignore"]: bot.conns[xcon].send('PRIVMSG '+channels+' :TWITTER FEED: '+tweet) lasttweet=tweet ttl=75 db_global.execute("delete from twitterfeeds where user=(?)", (feed,)).rowcount db_global.execute("insert or replace into twitterfeeds(user, tweet) values (?,?)",(feed, tweet)) db_global.commit() i=0 time.sleep(ttl) testss = True else: return "Nope."
def tlfeed(inp, input=None, bot=None, db_global=None): "auto twitter list tweet getter. ,tlfeed <twitter-list-name> <owner of list without @ at the start>" db_global.execute("create table if not exists twitterlistfeeds(list, tweet)") db_global.commit() i=0 check = input.inp.split(' ') feed = str(get_listid(check[0],check[1])) feedname = check[0] if perm.isadmin(input) and not input.inp=='' and input.conn.conf["rss-on"]==True: testss = True for xcon in bot.conns: if feedname not in bot.conns[xcon].conf["twitterfeedchans"]: bot.conns[xcon].conf["twitterfeedchans"][feedname]=[] db_global.execute("insert into twitterlistfeeds(list, tweet) values (?,?)",(feedname, "nothing...")) if bot.conns[xcon].conf["twitterfeedchans"][feedname].count(bot.conns[xcon].conf["reportchan"])==0: bot.conns[xcon].conf["twitterfeedchans"][feedname].append(bot.conns[xcon].conf["reportchan"]) if db_global.execute("select tweet from twitterlistfeeds where list=(?)",(feedname,)).fetchone()==None: lasttweet="nothing..." if not db_global.execute("select tweet from twitterlistfeeds where list=(?)",(feedname,)).fetchone()==None: lasttweet=''.join(db_global.execute("select tweet from twitterlistfeeds where list=(?)",(feedname,)).fetchone()) input.say("Done. following "+feedname) ttl=75 bot.twitterlists[feedname]=True while testss: rss = get_listtwitter(feed) tweet=''.join(rss) if lasttweet=='': lasttweet="none." #print(lasttweet+"\n"+tweet) if errormatch(tweet): if tweet.endswith("400"): ttl=ttl+60 return("I have been rate limited on twitter. This means you ether have too many lists/people beening watched at once (the max is 4 without rate limiting from twitter.) please ether make a bigger list or remove some of the people/lists being watched...") tweet=lasttweet if tweet.endswith("404"): testss= False del bot.twitterlists[feedname] return "feed: "+feedname+" returned: Twitter list by the name of "+feedname+" not found made by "+check[1]+"." if tweet.endswith("500") or tweet.endswith("502") or tweet.endswith("503"): testss= False del bot.twitterlists[feedname] return "feed: "+feedname+" returned: Twitter is down, being upgraded or overloaded. Try again later...." else: input.say("feed: "+feedname+" returned: '"+lasttweet+"'. Something up in here is stuffed....") tweet=lasttweet testss= False if lasttweet==tweet and not tweet.startswith("error: "): i=i+1 bot.twitterlists[feedname]=True if i == (32): perm.repamsg(input,"No new tweets from '"+feedname+"'.") i=0 time.sleep(ttl) elif not lasttweet==tweet and not tweet.startswith("error: "): for xcon in bot.conns: for channels in bot.conns[xcon].conf["twitterfeedchans"][feedname]: bot.conns[xcon].send('PRIVMSG '+channels+' :TWITTER LIST FEED:'+feedname+': '+tweet) lasttweet=tweet bot.twitterlists[feedname]=True db_global.execute("delete from twitterlistfeeds where list=(?)", (feedname,)).rowcount db_global.execute("insert or replace into twitterlistfeeds(list, tweet) values (?,?)",(feedname, tweet)) db_global.commit() ttl=75 i=0 time.sleep(ttl) testss = True else: return "Nope."
def authenticate(inp, input=None, db_global=None, bot=None, conn=None): "authenticate with this bot. NOTE: no password is stored in plain text. all passwords are stored as a sha512 hash. usage: ,auth login <username> <password>" db_global.execute("create table if not exists auth(user, pass, groups)") db_global.commit() check=input.inp.split(' ') #print(check) if len(check)==1 and check[0]=="help": out="To register with "+conn.nick+" please use ,auth <signup/reg> <username-you-want> <password-you-want>" out=out+". To login with "+conn.nick+" please use ,auth login <username-you-set> <password-you-set>" out=out+". If you forgot your password please contact "+conn.conf["owner"]+" about it." out=out+". For bot owners to change a user's group use ,auth groupset <username-of-person> <admin/superadmin/owner>" return(out) if len(check)==2 and check[0]=="logout": groupcheck=''.join(str(db_global.execute("select groups from auth where user=(?)",(check[1],)).fetchone()[0])) if input.nick in bot.auth[str(conn.name)][groupcheck]: del bot.auth[str(conn.name)][groupcheck][str(input.nick)] return "Bye!" if len(check)>=3: cmdlist=["login",'groupset','set','reset'] if check[0] in cmdlist: usercheck=''.join(str(db_global.execute("select user from auth where user=(?)",(check[1],)).fetchone()[0])) passcheck=''.join(str(db_global.execute("select pass from auth where user=(?)",(check[1],)).fetchone()[0])) groupcheck=''.join(str(db_global.execute("select groups from auth where user=(?)",(check[1],)).fetchone()[0])) #print(usercheck+"\n"+passcheck+'\n'+groupcheck) if check[0]=='reg' or check[0]=='signup': usercheck=''.join(str(db_global.execute("select user from auth where user=(?)",(check[1],)).fetchone())) passcheck=''.join(str(db_global.execute("select pass from auth where user=(?)",(check[1],)).fetchone())) groupcheck=''.join(str(db_global.execute("select groups from auth where user=(?)",(check[1],)).fetchone())) check[2]=hashlib.sha512(check[2]).hexdigest() if check[1]==str(usercheck): return("you are already registered on this bot or choose another name.") else: db_global.execute("insert into auth(user, pass, groups) values (?,?,?)",(check[1], check[2],"none")) db_global.commit() perm.repamsg(input,input.nick+" is registering with me.") return("done. please login by using ,auth login "+check[1]+" <password-here>.") if check[0]=="login": print(input.nick+" is trying to auth as "+check[1]) hashcheck=hashlib.sha512(check[2]).hexdigest() if usercheck==check[1] and passcheck==hashcheck: print(groupcheck)#if groupcheck==None bot.auth[str(conn.name)][groupcheck][str(input.nick)]={} return("welcome back "+check[1]+" have a nice time.") else: return("incorrect password or username. please try again.") if perm.isowner(input) and check[0]=='groupset': if check[2] in ["voiced","admin","superadmin","owner"] and usercheck==check[1] and check[2] in ["admin","superadmin","owner"]: db_global.execute("delete from auth where user=(?)", (check[1],)).rowcount db_global.execute("insert or replace into auth(user, pass, groups) values (?,?,?)",(check[1], passcheck,check[2])) db_global.commit() del bot.auth[str(conn.name)][groupcheck][str(input.nick)] bot.auth[str(conn.name)][check[2]][str(input.nick)]={} return("done. group set to "+check[2]) else: return("user not found or group not found.") if perm.isowner(input) and check[0]=='set' and usercheck==check[1] and check[2]: if usercheck==check[1]: db_global.execute("delete from auth where user=(?)", (check[1],)).rowcount db_global.execute("insert or replace into auth(user, pass, groups) values (?,?,?)",(check[1], hashlib.sha512(check[2]).hexdigest(),groupcheck)) db_global.commit() return("done. reset password.") else: return("user not found.") if check[0]=='reset' and usercheck==check[1] and passcheck==hashlib.sha512(check[2]).hexdigest() and check[3]: db_global.execute("delete from auth where user=(?)", (check[1],)).rowcount db_global.execute("insert or replace into auth(user, pass, groups) values (?,?,?)",(check[1], hashlib.sha512(check[3]).hexdigest(),groupcheck)) db_global.commit() return("done. reset you password.") else: return("error. try ,auth help")