コード例 #1
0
ファイル: Backseatmessage.py プロジェクト: bastixx/ModularBot
def backseatmessage(s, message):
    global bstimer
    global bsmessagestr
    global backseating
    messageparts = message.split(" ")
    if messageparts[1] == "on":
        if not backseating:
            backseating = True
            bstimer = threading.Timer(900, bsmessage, [s])
            bstimer.start()
            send_message(s, "Backseating message enabled.")
        else:
            send_message(s, "BSM already enabled.")
    elif messageparts[1] == "off":
        if backseating:
            backseating = False
            bstimer.cancel()
            send_message(s, "Backseating message disabled.")
        else:
            send_message(s, "BSM already off.")
    elif messageparts[1] == "set":
        try:
            newbsmessage = " ".join(messageparts[2:])
            bsmessagestr = newbsmessage
            with open(
                    f'{os.path.dirname(os.path.dirname(__file__))}/{folder}/files/Backseatmessage.txt',
                    'w') as f:
                f.write(bsmessagestr)
            send_message(s, "Backseat message changed.")
        except Exception as errormsg:
            errorlog(errormsg, 'backseatmessage/set()', message)
            send_message(
                s,
                "There was an error chaning the backseatmessage. Please try again."
            )
コード例 #2
0
def nopong():  # Function to restart the bot in case of connection lost
    print(">>>Connection lost, restarting bot!")
    errorlog("Connection lost, bot restarted", "nopong", '')
    os.execv(
        sys.executable,
        [sys.executable, f"{os.path.dirname(__file__)}/{FOLDER}/{FOLDER}.py"] +
        sys.argv)
コード例 #3
0
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)
コード例 #4
0
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&section=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()", "")
コード例 #5
0
ファイル: Send_message.py プロジェクト: bastixx/ModularBot
def send_message(s, message):
    try:
        s.send(b"PRIVMSG #%s :%s\r\n" % (CHANNEL, message.encode()))
        print(">>BOT : " + message)
        logger(">>BOT", message, False, True)
    except Exception as errormsg:
        errorlog(errormsg, "Send_message", message)
コード例 #6
0
ファイル: Deathcounter.py プロジェクト: bastixx/ModularBot
def func_deaths(s, message, game, ismod):
    arguments = message.split(" ")
    cooldown_time = 0

    try:
        if len(arguments) > 3 and arguments[1] in ['add', 'set', 'remove']:
            game = " ".join(arguments[3:]).lower()
        if arguments[1] == "list":
            send_message(s, "Current games are: %s" % ", ".join(list(deaths.keys())))
            cooldown_time = 10
        elif arguments[1] == "add" and ismod:
            if game in deaths:
                deaths[game] += int(arguments[2])
            else:
                deaths[game] = int(arguments[2])
            send_message(s, "New death counter for %s is now: %s" % (game, deaths[game]))
            cooldown_time = 5
        elif arguments[1] == "set" and ismod:
            deaths[game] = int(arguments[2])
            send_message(s, "Deaths for %s set to %s" % (game, deaths[game]))
            cooldown_time = 5
        elif arguments[1] == "remove" and ismod:
            if deaths[game] - int(arguments[2]) < 0:
                send_message(s, "Deaths can't be negative. Current deaths: %s" % deaths[game])
            elif game in deaths:
                deaths[game] -= int(arguments[2])
                send_message(s, "New death counter for %s is now: %s" % (game, deaths[game]))
            else:
                send_message(s, "There are no deaths (yet) for %s" % game)
            cooldown_time = 5
        elif " ".join(arguments[1:]).lower() in deaths:
            game = " ".join(arguments[1:]).lower()
            send_message(s, "Deaths in %s: %d!" % (game, deaths[game]))
            cooldown_time = 20
        else:
            send_message(s, "Command \"!deaths %s\" not recognised or "
                            "no deaths yet for this game." %
                         " ".join(arguments[1:]))
            cooldown_time = 10

    except IndexError:
        if game in deaths:
            send_message(s, "Deaths in %s: %d!" % (game, deaths[game]))
        else:
            send_message(s, "There are no deaths (yet) for %s" % game)
        cooldown_time = 20
    except KeyError:
        send_message(s, "There are no deaths (yet) for %s" % game)
        cooldown_time = 20
    except Exception as errormsg:
        errorlog(errormsg, "!deaths", message)
        send_message(s, "Something went wrong. Please check your command.")
        cooldown_time = 5

    finally:
        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))
        return cooldown_time
コード例 #7
0
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()", "")
コード例 #8
0
ファイル: Random_stuff.py プロジェクト: bastixx/ModularBot
def load_followergoals(folder):
    global goals
    goals = []
    try:
        with open(f'{os.path.dirname(os.path.dirname(__file__))}/{folder}/files/Goals.txt', 'r') as f:
            for line in f:
                goals.append(line)
    except Exception as errormsg:
        errorlog(errormsg, "load_followergoals()", '')
コード例 #9
0
ファイル: Random_stuff.py プロジェクト: bastixx/ModularBot
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()", "")
コード例 #10
0
ファイル: Backseatmessage.py プロジェクト: bastixx/ModularBot
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()", '')
コード例 #11
0
ファイル: Quotes.py プロジェクト: bastixx/ModularBot
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.")
コード例 #12
0
def logline(line):  # Debug setting to save the raw data recieved to a file
    try:
        line = unidecode(line)
        with open(
                f"{os.path.dirname(os.path.dirname(__file__))}/{FOLDER}/files/chatlogs/raw-"
                + time.strftime("%d-%m-%Y") + ".txt", 'a+') as f:
            f.write("[%s] %s\n" % (str(time.strftime("%H:%M:%S")), line))
    except Exception as errormsg:
        errorlog(errormsg, "logline()", line)
コード例 #13
0
ファイル: BonerTimer.py プロジェクト: bastixx/ModularBot
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()', '')
コード例 #14
0
ファイル: BonerTimer.py プロジェクト: bastixx/ModularBot
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()', '')
コード例 #15
0
ファイル: Quotes.py プロジェクト: bastixx/ModularBot
def get_quote(s, message):
    try:
        if quotes:
            if message == "!quote":
                randomindex = random.randint(1, len(quotes))
                randomquote = quotes[str(randomindex)]
                send_message(s, "Quote %s: %s" % (randomindex, randomquote))

            elif "!quote" in message:
                quotesplit = message.split(" ")
                argument = quotesplit[1]
                if argument == "list":
                    send_message(
                        s,
                        f"Quotelist can be found here: http://www.bastixx.nl/twitch/{folder}/quotes.php"
                    )
                else:
                    try:
                        int(argument)
                        quoteindex = message.split(" ")[1]
                        quote = quotes[quoteindex]
                        send_message(s, "Quote %s: %s" % (quoteindex, quote))
                    except KeyError:
                        send_message(s, "This quote does not exist.")
                    except ValueError:
                        quotes_temp = {}
                        for key, value in quotes.items():
                            if argument.lower() in value.lower():
                                quotes_temp[key] = value
                        if len(quotes_temp) == 0:
                            send_message(s, "No quotes found.")
                        elif len(quotes_temp) == 1:
                            for key, value in quotes_temp.items():
                                send_message(s, "Quote %s: %s" % (key, value))
                        else:
                            keylist = []
                            for key in quotes_temp:
                                keylist.append(key)

                            randomindex = random.choice(keylist)
                            randomquote = quotes_temp[str(randomindex)]
                            send_message(
                                s, "Quote %s: %s" % (randomindex, randomquote))
                    except Exception as errormsg:
                        errorlog(errormsg, "Quotes/quote()", message)
                        send_message(
                            s, "Something went wrong, check your command.")
        else:
            send_message(s, "No quotes yet!")
    except IndexError:
        send_message(s, "Error finding your searchterms. Check your command.")
    except Exception as errormsg:
        errorlog(errormsg, "Quotes/quote()", message)
        send_message(s, "Something went wrong, check your command.")
コード例 #16
0
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.")
コード例 #17
0
ファイル: Random_stuff.py プロジェクト: bastixx/ModularBot
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()", "")
コード例 #18
0
ファイル: Roulette.py プロジェクト: bastixx/ModularBot
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()", '')
コード例 #19
0
ファイル: BonerTimer.py プロジェクト: bastixx/ModularBot
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")
コード例 #20
0
ファイル: Deathcounter.py プロジェクト: bastixx/ModularBot
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", '')
コード例 #21
0
ファイル: BonerTimer.py プロジェクト: bastixx/ModularBot
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)
コード例 #22
0
ファイル: BonerTimer.py プロジェクト: bastixx/ModularBot
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()", '')
コード例 #23
0
ファイル: BonerTimer.py プロジェクト: bastixx/ModularBot
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()", '')
コード例 #24
0
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)
コード例 #25
0
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)
コード例 #26
0
ファイル: BonerTimer.py プロジェクト: bastixx/ModularBot
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()", '')
コード例 #27
0
ファイル: BonerTimer.py プロジェクト: bastixx/ModularBot
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)
コード例 #28
0
ファイル: BonerTimer.py プロジェクト: bastixx/ModularBot
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('')
コード例 #29
0
ファイル: Logger.py プロジェクト: bastixx/ModularBot
def logger(displayname, message, issub, ismod):
    sub = ""
    mod = ""
    if issub:
        sub = "|SUB"
    if ismod:
        mod = "|MOD"

    try:
        message = unidecode(message)
        with open(
                f"{os.path.dirname(os.path.dirname(__file__))}/{folder}/files/chatlogs/"
                + time.strftime("%d-%m-%Y") + ".txt", 'a+') as f:
            f.write("[%s] %s: %s %s%s\n" % (str(
                time.strftime("%H:%M:%S")), displayname, message, sub, mod))
    except Exception as errormsg:
        errorlog(errormsg, "Logger", message)
コード例 #30
0
ファイル: Paddle.py プロジェクト: bastixx/ModularBot
def paddle(s, displayname, message):
    try:
        messagesplit = message.split(" ")
        randint = random.randint(1, 20)
        if randint == 1:
            send_message(s, "/timeout %s 5 Get paddled!" % messagesplit[1])
            send_message(s, "%s got paddled so hard by %s they need a few seconds to recover..." %
                         (messagesplit[1].strip("@"), displayname))
        else:
            send_message(s, "%s gets a paddling from %s! andyt90bat" %
                         (messagesplit[1].strip("@"), displayname))

    except KeyError:
        pass

    except Exception as errormsg:
        errorlog(errormsg, "!paddle", message)