def mod(s, message): messagesplit = message.split(" ") searchterm = "+".join(messagesplit[1:]) try: r = requests.get( f'https://steamcommunity.com/workshop/browse/?appid=294100&searchtext={searchterm}&childpublishedfileid=0&browsesort=textsearch§ion=items&requiredtags[]=Mod' ) webpage = r.text soup = BeautifulSoup(webpage, "html.parser") # for item in soup.find_all(re.compile("SharedFileBindMouseHover\(.+({.+})")): for item in soup.find_all("script"): itemtext = re.sub('[\\r\\t\\n]', '', item.text) if 'SharedFileBindMouseHover' in itemtext: item = re.search('({.*})', itemtext) jsonitem = json.loads(item.group(1)) modtitle = jsonitem['title'] modid = jsonitem['id'] break try: send_message( s, f'Found the mod: {modtitle} https://steamcommunity.com/sharedfiles/filedetails/?id={modid}' ) except: send_message(s, "No mods found.") except Exception as errormsg: errorlog(errormsg, "ModSearch()", "")
def remove_question(s, message): global questions try: messageparts = message.split(" ") del questions[messageparts[1]] qcounter = 1 with open( f"{os.path.dirname(os.path.dirname(__file__))}/{folder}/files/Questions.txt", 'w') as f: for key, val in questions.items(): f.write("%s:%s\n" % (qcounter, val)) qcounter += 1 questions = {} with open( f'{os.path.dirname(os.path.dirname(__file__))}/{folder}/files/Questions.txt' ) as f: for line in f: split = line.split(":") questions[split[0]] = split[1].rstrip('\n') send_message(s, "Question %s removed!" % messageparts[1]) except KeyError: send_message(s, f'Question number {messageparts[1]} does not exist.') except Exception as errormsg: errorlog(errormsg, "Questions/remove_question()", message)
def brokenboner(s): send_message( s, "The game is to bet how long it takes for Fid to break a leg or " "die in ARMA. " "The timer usually starts after the teleport pole or as the convoy moves out. " "Anyone can join to try and win the title \"Broken Boner\"! " "Use !bet <minutes> to place your bets!")
def clearsuggestions(s): try: with open(f'{os.path.dirname(os.path.dirname(__file__))}/{folder}/files/SongSuggestions.txt', 'w') as f: f.write("") send_message(s, "List cleared!") except Exception as errormsg: send_message(s, "There was an error adding this. Please try again!") errorlog(errormsg, "SongSuggestions/clearsuggestions()", "")
def openbets(s): global betsopen if not betsopen: betsopen = True send_message( s, "Taking bets for the Broken Boner game! " "Use !bet <number> to join in!") else: send_message(s, "Bets already opened!")
def unshorten(s, shorturl): try: url = f'https://unshorten.me/json/https://{shorturl}' r = requests.get(url).json() longurl = r["resolved_url"] if shorturl not in longurl and longurl != "": send_message(s, f"This link expands to: {longurl}") except Exception as errormsg: errorlog(errormsg, "unshorten()", "")
def bsmessage(s): global bstimer if backseating: try: bstimer = threading.Timer(900, bsmessage, [s]) bstimer.start() send_message(s, bsmessagestr) except Exception as errormsg: errorlog(errormsg, "Backseatmessage()", '')
def last_quote(s): try: quoteindex = len(quotes) quote = quotes[str(quoteindex)] send_message(s, "Quote %s: %s" % (quoteindex, quote)) except Exception as errormsg: errorlog(errormsg, "Quotes/removequote()", "") send_message( s, "There was an error retrieving the last quote. Error logged.")
def clearbets(s): global bets global timers try: bets = {} timers = {} send_message(s, "Bets cleared!") except Exception as errormsg: send_message(s, "Error clearing the bets. Error logged.") errorlog(errormsg, 'Bonertimer/clearbets()', '')
def currentboner(s): try: with open( f"{os.path.dirname(os.path.dirname(__file__))}/{folder}/files/Titleholder.txt", "r") as f: titleholder = f.read() send_message( s, "The current owner of the title \"Broken Boner\" is: " + titleholder + "!") except Exception as errormsg: errorlog(errormsg, 'Bonertimer/currentboner()', '') send_message(s, "Error reading current boner")
def followergoal(s, channel_id, channel, client_id): try: url = f'https://api.twitch.tv/helix/users/follows?to_id={channel_id}' headers = {'Client-ID': client_id, 'Accept': 'application/vnd.twitchtv.v5+json'} r = requests.get(url, headers=headers).json() total = r["total"] total = '250' if int(total) % 250 == 0 and total not in goals: send_message(s, f"@{channel.decode()} congrats on {total} followers!") goals.append(total) except Exception as errormsg: errorlog(errormsg, "followergoals()", "")
def addending(s, message): try: keyword = "!addending " newending = message[message.index(keyword) + len(keyword):] with open( f"{os.path.dirname(os.path.dirname(__file__))}/{folder}/files/Endings.txt", "a") as f: f.write(newending + "\n") send_message(s, "Ending added to the list!") except Exception as errormsg: send_message( s, "There was an error registering your text. Please try again!") errorlog(errormsg, 'Bonertimer/addending()', message)
def dead(s, game): try: if game in deaths: deaths[game] += 1 else: deaths[game] = 1 send_message(s, "A new death! Deathcount: %d!" % deaths[game]) with open(f'{os.path.dirname(os.path.dirname(__file__))}/{folder}/files/Deaths.txt', 'w') as f: for key, value in deaths.items(): f.write("%s:%s\n" % (key, value)) except Exception as errormsg: send_message(s, "A error occured. Please try again.") errorlog(errormsg, "!dead", '')
def resettimer(s): global timeractive global betsopen global timers try: timeractive = False betsopen = True for t in list(timers.values()): t.cancel() time.sleep(1) timers = {} send_message(s, "Timer reset. Bets are now open again!") except Exception as errormsg: errorlog(errormsg, "BonerTimer/resettimer()", '')
def func_rules(s, message): arguments = message.split(" ") ruleno = arguments[1] ruletext = rules[ruleno]['rule'] if arguments[2] in warnings.keys(): warningno = str(warnings[arguments[2]].count(ruleno) + 1) warnings[arguments[2]].append(ruleno) else: warnings[arguments[2]] = ruleno warningno = '1' if warningno == "1": warningnotext = "first" elif warningno == "2": warningnotext = "second" elif warningno == "3": warningnotext = "third" else: warningnotext = "null" timeouttime = rules[ruleno][warningno] if timeouttime != '0': send_message(s, "/timeout %s %s broke rule %s (%s warning)" % ( arguments[2], timeouttime, ruleno, warningnotext)) send_message(s, "@%s You have been timed out for %s seconds because " "you broke rule %s: %s."" This was your %s warning!" % (arguments[2], timeouttime, ruleno, ruletext, warningnotext)) else: send_message(s, "/ban %s broke rule %s" % (arguments[2], ruleno)) send_message(s, "@%s You have been banned from this channel because " "you broke rule %s: %s. This was your %s warning!" % (arguments[2], ruleno, ruletext, warningnotext))
def timer(s): try: if timeractive: timenow = datetime.time(datetime.now()) timer = datetime.combine(date.today(), timenow) - datetime.combine( date.today(), starttime) timer = str(timer).split('.')[0] timersplit = timer.split(':') endtime = ":".join(timersplit) send_message(s, "Fid has been alive for: " + endtime) else: send_message(s, "There is currently no timer active!") except Exception as errormsg: errorlog(errormsg, "BonerTimer/timer()", '')
def add_question(s, message): global questions try: keyword = "!addquestion " newquestion = message[message.index(keyword) + len(keyword):] questions[str(len(questions) + 1)] = newquestion with open( f"{os.path.dirname(os.path.dirname(__file__))}/{folder}/files/Questions.txt", 'a') as f: f.write("%s:%s\n" % (len(questions), newquestion)) send_message(s, "question %d added!" % len(questions)) except Exception as errormsg: send_message( s, "There was an error adding this question. Please try again!") errorlog(errormsg, "Questions/add_question()", message)
def suggest(s, message): try: keyword = "!suggest " suggestion = message[message.index(keyword) + len(keyword):] wrongchars = ['<', '>', '{', '}', '(', ')', '#', '%', '*', '\:', "\"", "|"] for elem in wrongchars: if elem in suggestion: suggestion = suggestion.replace(elem, "") with open(f'{os.path.dirname(os.path.dirname(__file__))}/{folder}/files/SongSuggestions.txt', 'a') as f: f.write(suggestion + "\n") send_message(s, "Song suggestion registered!") except Exception as errormsg: send_message(s, "There was an error adding this. Please try again!") errorlog(errormsg, "SongSuggestions/suggest()", message)
def announcer(s, displayname, bettime): global bets global timers try: try: ending = random.choice(endings) except: ending = "" send_message( s, "%s's time has come with %s minutes! %s" % (displayname, bettime, ending)) # bets.pop(displayname) timers.pop(displayname) except Exception as errormsg: errorlog(errormsg, "Announcer()", '')
def removebet(s, message): global bets global timers try: rembet = message.split(" ")[1] try: if all(i.isdigit() for i in rembet): if int(rembet) in list(bets.values()): if list(bets.values()).count(int(rembet)) > 1: userbets = [] index = 0 for i in list(bets.values()): if int(rembet) == i: userbets.append(list(bets.keys())[index]) index += 1 send_message( s, "Found more than one bet of " + rembet + " by these users: " + str(userbets)) else: rembet = list(bets.keys())[list(bets.values()).index( int(rembet))] del bets[rembet] del timers[rembet] send_message( s, "Bet for " + rembet + " removed from pool.") else: raise Exception else: if rembet in list(bets.keys()): del bets[rembet] del timers[rembet] send_message(s, "Bet for " + rembet + " removed from pool") else: raise Exception except Exception: send_message(s, "There are no bets with this name or value.") else: with open( f'{os.path.dirname(os.path.dirname(__file__))}/{folder}/files/Bets.txt', 'w') as f: for key in bets: f.write(key + ":" + str(bets[key]) + "\n") except Exception as errormsg: send_message(s, "Error removing user from current pool.") errorlog(errormsg, 'Bonertimer/removebet()', message)
def starttimer(s): global timeractive global betsopen global starttime global timers if timeractive: send_message(s, "Timer already started!") else: timeractive = True betsopen = False starttime = datetime.time(datetime.now()) # Start all timer threads for t in list(timers.values()): t.start() send_message( s, "The timer has been started. No more bets can be placed! " "Good luck all!")
def roulette(displayname, s): try: randint = random.randint(1, 6) send_message(s, "%s spins the gun and pulls the trigger.." % displayname) time.sleep(1) if randint == 1: send_message(s, "The gun fires and %s drops dead to the ground!" % displayname) send_message(s, "/timeout %s 1" % displayname) else: send_message(s, "A CLICK can be heard as nothing happends. %s lives!" % displayname) except exception as errormsg: errorlog(errormsg, "roulette()", '')
def start_chat(name, age, rating, status): # validating users details. error_message = None # variable for storing error messages. if not (age > 12 and age < 50): # invalid age error_message = "Invalid age. Provide correct details." print error_message else: welcome_message = "Authentication complete. Welcome\n " \ "Name : " + name + "\n" \ "Age: " + str(age) + "\n" \ "Rating: " + str(rating) + "\n" \ "Proud to have you onboard" print welcome_message # displaying menu for user. show_menu = True while show_menu: menu_choices = "What do you want to do? \n " \ "1. Add a status update \n " \ "2. Add a friend \n " \ "3. Send a secret message \n " \ "4. Read a secret message \n " \ "5. Read Chats from a user \n " \ "6. Close Application \n" result = int(raw_input(menu_choices)) # validating users input if (result == 1): current_status_message = add_status(current_status_message) elif (result == 2): number_of_friends = add_friend() print 'You have %d friends' % (number_of_friends) elif (result == 3): send_message() elif (result == 4): read_message() elif (result == 6): # close application show_menu = False else: print "wrong choice try again."
def add_quote(s, message, game): global quotes try: currentdate = time.strftime("%d/%m/%Y") keyword = "!addquote " newquote = message[message.index(keyword) + len(keyword):] quotes[str(len(quotes) + 1)] = newquote + " [%s] [%s]" % (game, currentdate) with open( f'{os.path.dirname(os.path.dirname(__file__))}/{folder}/files/Quotes.txt', 'a') as f: f.write("%s$%s [%s] [%s]\n" % (len(quotes), newquote, game, currentdate)) send_message(s, "Quote %d added!" % len(quotes)) except Exception as errormsg: send_message( s, "There was an error adding this quote. Please try again!") errorlog(errormsg, "Quotes/addquote()", message)
def addbet(s, message): global bets global timers try: addbet = message.split(' ') bets[addbet[1]] = addbet[2] t = threading.Timer((int(addbet[2]) * 60), announcer, [s, addbet[1], addbet[2]]) timers[addbet[1]] = t with open( f"{os.path.dirname(os.path.dirname(__file__))}/{folder}/files/Bets.txt", 'w') as f: for key in bets: f.write(key + ":" + str(bets[key]) + "\n") send_message( s, "Bet for " + addbet[1] + " with " + addbet[2] + " minutes added to pool!") except Exception as errormsg: send_message(s, "Error adding bet for this user.") errorlog(errormsg, 'Bonertimer/addbet()', message)
def rimworldautomessage(s): game = getgame(channel_id, client_id) url = 'https://api.twitch.tv/helix/streams?user_id=%s' % channel_id headers = { 'Client-ID': client_id, 'Accept': 'application/vnd.twitchtv.v5+json' } r = requests.get(url, headers=headers).json() response = r["data"] try: if response[0]["type"] == "live" and game == "RimWorld": send_message(s, messagetext) except IndexError: pass except Exception as errormsg: errorlog(errormsg, "Rimworldautomessage", '') finally: threading.Timer(900, rimworldautomessage, [s]).start()
def remove_quote(s, message): global quotes try: messageparts = message.split(" ") del quotes[messageparts[1]] counter = 1 with open( f'{os.path.dirname(os.path.dirname(__file__))}/{folder}/files/Quotes.txt', 'w') as f: for key, val in quotes.items(): f.write("%s$%s\n" % (counter, val)) counter += 1 quotes = {} with open( f'{os.path.dirname(os.path.dirname(__file__))}/{folder}/files/Quotes.txt' ) as f: for line in f: split = line.split("$") quotes[split[0]] = split[1].rstrip('\n') send_message(s, "Quote %s removed!" % messageparts[1]) except Exception as errormsg: errorlog(errormsg, "Quotes/removequote()", message)
def fidwins(s): global timeractive global timers global bets try: if timeractive: timeractive = False for t in list(timers.values()): t.cancel() time.sleep(1) timers = {} with open( f"{os.path.dirname(os.path.dirname(__file__))}/{folder}/files/Titleholder.txt", "w") as f: f.write("FideliasFK") timenow = datetime.time(datetime.now()) timer = datetime.combine(date.today(), timenow) - datetime.combine( date.today(), starttime) endtime = str(timer).split(':')[1] if str(timer).split(':')[0] == '1': endtime += (int(endtime) + 60) if str(timer).split(':')[0] == '2': endtime += (int(endtime) + 120) send_message(s, "The timer is on " + endtime + " minute(s)!") send_message( s, "No boners have been broken this round. The winner is FideliasFK!" ) else: send_message(s, "There is no timer active!") except Exception as errormsg: send_message(s, "Error lettting fid win.") errorlog(errormsg, 'Bonertimer/fidwins', '') else: with open( f'{os.path.dirname(os.path.dirname(__file__))}/{folder}/files/PrevBets.txt', 'a+') as f: f.write("\n" + "Bets ended on: " + str(time.strftime("%x")) + " " + str(time.strftime("%X")) + "\n") f.write("Endtime: %s minutes\n" % endtime) for key in bets: f.write(key + ":" + str(bets[key]) + "\n") bets = {} with open( f"{os.path.dirname(os.path.dirname(__file__))}/{folder}/files/Bets.txt", 'w') as f: f.write('')
def question(s, message): try: if questions: randomindex = random.randint(1, len(questions)) randomquestion = questions[str(randomindex)] send_message(s, "%s: %s" % (randomindex, randomquestion)) else: send_message(s, "No questions yet!") except Exception as errormsg: errorlog(errormsg, "Question/question()", message) send_message(s, "Something went wrong, check your command.")
def mybet(s, displayname): try: if bets.get(displayname): send_message( s, displayname + " your bet is: " + str(bets.get(displayname)) + " minutes!") else: send_message(s, "No bet registered!") except Exception as errormsg: send_message(s, "There was an error showing your bet!") errorlog(errormsg, 'Bonertimer/mybet()', '')