Pages: [1]

How Extra Are You?
Posts: 9 Views: 986

AlexTheAwkward
  • Former Citizen
  • The Avid MTG Scrub
  • Hey y'all, I got this idea while ranting about something on the "Say What's on your Mind Topic" that happened on NS. Gerrick encouraged me to start a board for it, so here goes.

    Basically, you can post about things that you've done that went above and beyond the necessary means for achieving relatively meaningless tasks/goals. After all, that's what being extra is. I'm looking forward to seeing these responses, some of you should have some pretty funny stories.  :P

    I'm going to copy-paste part of my "rant" from that board as an example/starting post or whatever. :D

    "I did one of the most extra things I've done in a while today. I clicked on the wrong button for an NS Issue decision, and it jacked up my plans for refining the government for at least a few days. So, I wrote a dispatch. I wrote a page-long article for a fake newspaper in the voice of a fake reporter (named after Hank Williams the country singer) detailing the events that transpired to cause the president to sign the wrong piece of legislation. She happened to be heavily under the influence of alcohol and/or THC when she stumbled into the executive office and signed a bill banning maternity leave. There's also an embedded photo of the president, an eye-witness, and protesters.

    This is probably nowhere close to how into-it some people get with NS meta, but it's further than I've ever gone for the sake of something like this. All for a misclick."
    1 person likes this post: Gerrick
    AlexTheAwkward
    • The Avid MTG Scrub
    • Posts: 25
    • Karma: 6
    • Former Citizen
    • Pronouns
      He/Him/His
      Wintreath Nation
      Logged
    taulover
  • Regional Stability Squad
  • Seeker of Knowledge
  • "I did one of the most extra things I've done in a while today. I clicked on the wrong button for an NS Issue decision, and it jacked up my plans for refining the government for at least a few days. So, I wrote a dispatch. I wrote a page-long article for a fake newspaper in the voice of a fake reporter (named after Hank Williams the country singer) detailing the events that transpired to cause the president to sign the wrong piece of legislation. She happened to be heavily under the influence of alcohol and/or THC when she stumbled into the executive office and signed a bill banning maternity leave. There's also an embedded photo of the president, an eye-witness, and protesters.

    This is probably nowhere close to how into-it some people get with NS meta, but it's further than I've ever gone for the sake of something like this. All for a misclick."
    Reminds me of when New Hyperion was doing its "Penguin vs. Cookies" RP and @Colberius X answered an issue that tanked his nation's stats. He ended up writing a series of posts telling the story of a coup in his nation and the resulting chaos.
    Résumé
    Wintreath:
    Citizen: 8 April 2015 - present
    From the Ashes RP Game Master: 29 November 2015 - 24 July 2018
    Skydande Vakt Marshal: 29 November 2015 - 28 February 2017
    Skrifa of the 13th Underhusen: 13 December 2015 - 8 February 2016
    RP Guild Councillor: 9 February 2016 - 6 March 2018
    Ambassador to Lovely: 23 February 2016 - 17 August 2016
    Werewolf VII co-host: 11 May 2016 - 5 June 2016
    Skrifa of the 18th Underhusen: 8 October 2016 - 7 December 2016
    Ambassador to Balder: 1 December 2016 - 1 March 2022
    Skrifa of the 19th Underhusen: 7 December 2016 - 9 February 2017
    Ambassador to the INWU: 11 March 2017 - 1 March 2022
    Ambassador to the Versutian Federation: 18 August 2017 - 22 March 2018
    Thane of Integration: 29 September 2017 - 7 March 2018
    Speaker of the 24th Underhusen: 10 October 2017 - 7 December 2017
    October 2017 Wintreath's Finest: 4 November 2017
    Speaker pro tempore of the 25th Underhusen: 9 December 2017 - 7 February 2018
    Wintreath's Finest of 2017: 6 January 2018
    Werewolf XIV host: 20 January 2018 - 23 February 2018
    February 2018 Wintreath's Finest: 5 March 2018
    Thane of Embassy Dispatches / Foreign Releases and Information / Foreign Dispatches: 7 March 2018 - 15 March 2020
    Speaker of the 28th Underhusen: 10 June 2018 - 7 August 2018
    Second Patriarch of the Noble House of Valeria: 10 October 2018 - present
    Arena Game 6 Host: 28 December 2018 - 9 March 2019
    Librarian of the Underhusen: 29 January 2019 - 12 February 2019
    Speaker of the 32nd Underhusen: 12 February 2019 - 8 April 2019
    March 2019 Wintreath's Finest: 4 April 2019
    Librarian of the Underhusen: 12 April 2019 - 23 October 2020
    Commendation of Wintreath: 24 September 2020
    Peer of the Overhusen: 9 December 2020 - 8 February 2021
    Vice Chancellor of the Landsraad: 26 May 2021 - 15 September 2022
    Arena Game 8 Host: 10 June 2021 - 19 July 2021
    June 2021 Wintreath's Finest: 5 July 2021
    Regional Stability Squad: 28 February 2023 - present
    Minecraft Server Admin: 8 March 2023 - present

    Aura Hyperia/New Hyperion:
    Plebeian: 16 April 2014 - 21 July 2014
    Patrician: 21 July 2014 - present
    Adeptus Mechanicus: 24 October 2014 - 16 November 2014
    Co-founder of New Hyperion: 29 October 2014 - present
    Lord of Propaganda: 16 November 2014 - present
    Mapmaker for Official Region RP: 27 November 2015 - present
    WACom Delegate: 11 November 2017 - present
    Other positions: Hyperian Guardsman, Hyperian Marine (Rank: Scout)
    taulover
    • Seeker of Knowledge
    • Posts: 13,223
    • Karma: 4,254
    • Regional Stability Squad
    • Pronouns
      He/Him/His
      Familial House
      Valeria
      Wintreath Nation
      Logged
    AlexTheAwkward
  • Former Citizen
  • The Avid MTG Scrub
  • Reminds me of when New Hyperion was doing its "Penguin vs. Cookies" RP and @Colberius X answered an issue that tanked his nation's stats. He ended up writing a series of posts telling the story of a coup in his nation and the resulting chaos.
    JFC that's a lot. It looks like the issue absolutely murdered his nation's stats to write that much for it.
    AlexTheAwkward
    • The Avid MTG Scrub
    • Posts: 25
    • Karma: 6
    • Former Citizen
    • Pronouns
      He/Him/His
      Wintreath Nation
      Logged
    Laurentus
  • Regional Stability Squad
  • Count of Highever
  • It did. We now call any issue that should be avoided at all costs a Colby-killer.
    In die donker ure skink net duiwels nog 'n dop, 
    Satan sit saam sy kinders en kyk hoe kom die son op. 
    • Count of Highever
    Laurentus
    • Posts: 8,755
    • Karma: 4,635
    • Look on my Works, ye Mighty, and despair!
    • Regional Stability Squad
    • Pronouns
      He/Him/His
      Familial House
      The Noble House of Valeria
      Wintreath Nation
      Logged
    AlexTheAwkward
  • Former Citizen
  • The Avid MTG Scrub
  • It did. We now call any issue that should be avoided at all costs a Colby-killer.

    Speaking of, I think I just encountered one.
    Spoiler
    AlexTheAwkward
    • The Avid MTG Scrub
    • Posts: 25
    • Karma: 6
    • Former Citizen
    • Pronouns
      He/Him/His
      Wintreath Nation
      Logged
    Evelynx
  • Former Citizen
  • Queen of Love and Beauty
  • I wrote this script to find the best possible move in an odd minesweeper pattern I came across on reddit:

    Spoiler
    import random
    import itertools

    minefield = [1,1,1,0,0]
    for subset in itertools.combinations(minefield, len(minefield)):
        print(subset)

    exit()

    difficulties  = [(16*30,99),(16*16,40),(9*9,10)]
    pattern_size = 25
    size_checks = [1,4]
    mines_per_pattern = []

    for d in difficulties:
        distribution = float(d[1])/float(d[0])
        mines_per_pattern += distribution * pattern_size
        print( mines_per_pattern[-1] )



    fields = [[0,0,0,0,0,
               0,0,0,0,0,
               0,0,1,0,0,
               0,0,0,0,0,
               0,0,0,0,0],
              [0,1,0,0,0,
               0,0,0,0,1,
               0,0,0,0,0,
               1,0,0,0,0,
               0,0,0,1,0],
              [0,0,0,1,0,
               1,0,0,0,0,
               0,0,0,0,0,
               0,0,0,0,1,
               0,1,0,0,0]]



    def check_random_field(num_mines, field_size):
        field =
    • * field_size

        while num_mines > 0:
            l = random.randint(0,field_size - 1)
            if not field[l]:
                field[l] = 1
                num_mines -= 1

        return int(field in fields)

    results = {1:0,4:0}

    for result in results.keys():
        for i in range(0,10000000):
            results[result] += check_random_field(result, 25)

    print(results)

    I wrote this script to parse werewolf posts in order to count up how many votes people have made.. when they made them, etc.. it then tries to analyze different posting patterns to try to identify werewolves.. I mean, totally didn't work because it turned out my best Wintreath friend was a werewolf and I told her everything .. :p But, I'd say it was extra.

    It actually performs HTTP requests.. pulls out posts, tries to determine if the post contains a vote..

    Spoiler
    import xml.etree.ElementTree as ET
    import datetime
    import operator
    import pickle
    import base64
    import os
    import re

    tree = ET.parse('/Volumes/Data/Items.txt')
    root = tree.getroot()

    from HTMLParser import HTMLParser

    # create a subclass and override the handler methods
    class MyHTMLParser(HTMLParser):
        def __init__(self, fileName):
            self.dataIsPost = False
            self.dataIsPlayer = False
            self.dataIsTime = False
            self.dataIsQuoteBody = False
            self.dataIsQuoteHeader = False
            self.collectingInfo = False
            self.fileName = fileName
            self.allVotes = [[]]

            self.info = {"player":"","time":"","post":"","vote":""}

            self.load()

            self.divInPostDepth = 0
            HTMLParser.__init__(self)

        def save(self):
            try:
                with open(self.fileName,"wb") as fh:
                    fh.write(pickle.dumps(self.allVotes))
            except:
                print("Failed to save")

        def load(self):
            try:
                with open(self.fileName,"rb") as fh:
                    self.allVotes = pickle.loads(fh.read())
            except:
                print("Failed to load")

        def latestPostTime(self):
            voteList = []

            if len(self.allVotes) > 0:
                voteList = self.allVotes[-1]

            postTime = datetime.datetime(1,1,1)
            if voteList:
                postTime = voteList[-1]["time"]
                print(postTime)
            return postTime

        def commandCompare(self, command, compare):
            return len(command) <= len(compare) and compare[0:len(command)] == command

        def outputVotes(self):
            for day in range(0, len(self.allVotes)):
                print("Day {}".format(day+1))
                dayVotes = self.allVotes[day]

                votes = {}
                for vote in dayVotes:
                    if vote["vote"] not in votes:
                        votes[vote["vote"]] = 0
                    votes[vote["vote"]] += 1

                for player,nVotes in votes.items():
                    print("\t{}: {}".format(player,nVotes))

        def handle_starttag(self, tag, attrs):
            if tag == "div":
                if self.dataIsPost:
                    self.divInPostDepth += 1

                for attr in attrs:
                    if attr == ("class","post"):
                        self.dataIsPost = True
                    elif attr == ("class","topslice_quote"):
                        self.dataIsQuoteHeader = True
                    elif attr == ("class","smalltext"):
                        self.dataIsTime = True
            elif tag == "blockquote":
                self.dataIsQuoteBody = True
            elif tag == "a":
                rightUrl = False
                rightTitle = False

                for attr in attrs:
                    if attr[0] == "href":
                        if attr[1].startswith("index.php?topic=3255"):
                            self.info["link"] = attr[1]
                        elif attr[1].startswith("http://wintreath.com/index.php?part=profile&id="):
                            rightUrl = True
                    if attr[0] == "title" and attr[1].startswith("View the profile of "):
                        rightTitle = True

                self.dataIsPlayer = rightUrl and rightTitle
                if self.dataIsPlayer:
                    self.collectingInfo = True

        def handle_endtag(self, tag):
            if tag == "div":
                self.dataIsQuoteHeader = False
                if self.dataIsPost:
                    self.divInPostDepth -= 1

                    if self.divInPostDepth == 0:
                        self.dataIsPost = False
                        self.info["post"] = self.info["post"].strip()
                        lowerPost = self.info["post"].lower()
                        if self.info["player"] != "Pengu" and ( not self.info["time"] or self.info["time"] > self.latestPostTime() ):
                            while True:
                                os.system('clear')
                                guessVoteRegexes = [
                                    re.compile("[Vv]ote:\s*([^\s.,]*)"),
                                    re.compile("[Ii]\s*[Vv]ote\s*([^\s.,]*)"),
                                    re.compile("[Vv]ote\s*([^\s.,]*)"),
                                    re.compile("[Vv]ote\s*for\s*
    • *([^\s.,]*)"),

                                    re.compile("[Vv]oting\s*for\s*
    • *([^\s.,]*)")

                                ]
                                guessVoteMatches = []

                                for line in self.info["post"].split("\n"):
                                    for regex in guessVoteRegexes:
                                        match = regex.search(line)
                                        if match:
                                            print("{}. {}".format(len(guessVoteMatches) + 1, match.group(1)))
                                            guessVoteMatches.append(match.group(1))

                                command = raw_input("\n{}\n{}\n{}\n".format(self.info["player"], self.info["time"], self.info["post"]))
                                inputs = command.split(" ")

                                if self.commandCompare(inputs[0], "newday"):
                                    self.allVotes.append([])
                                    self.save()

                                elif self.commandCompare(inputs[0], "tabulate"):
                                    self.outputVotes()
                                    print("-----")
                                    for day in self.allVotes:
                                        for vote in day:
                                            print "{}\n{}\n{}\n{}\n".format(vote["link"],vote["player"], vote["time"], vote["vote"])
                                    raw_input()

                                elif self.commandCompare(inputs[0], "correct") and len(inputs) == 4:
                                    day,idx,fld = (int(inputs[1]), int(inputs[2]), input[3])
                                    if day < len(self.allVotes) and idx < len(self.allVotes[day]) and fld in self.allVotes[day][idx]:
                                        print("Current Value: {}".format(self.allVotes[day][idx][fld]))
                                        newValue = raw_input("New Value: ")
                                        self.allVotes[day][idx][fld] = newValue
                                        self.save()

                                elif self.commandCompare(inputs[0], "delete") and len(inputs) == 3:
                                    day,idx = (int(inputs[1]), int(inputs[2]))
                                    if day < len(self.allVotes) and idx < len(self.allVotes[day]):
                                        del self.allVotes[day][idx]
                                        self.save()

                                elif self.commandCompare(inputs[0], "exit"):
                                    exit()

                                elif self.commandCompare(inputs[0], "vote") and len(inputs) >= 1:
                                        player = " ".join(inputs[1:])
                                        if player:
                                            self.info["vote"] = player
                                            self.allVotes[-1].append(self.info)
                                            self.save()
                                        break
                                elif self.commandCompare(inputs[0], "accuse") and len(inputs) >= 1:
                                        players = " ".join(inputs[1:]).split(",")
                                        if players:
                                            self.info["accused"] = players
                                            self.allVotes[-1].append(self.info)
                                            self.save()
                                        break
                                elif self.commandCompare(inputs[0], "defend") and len(inputs) >= 1:
                                        players = " ".join(inputs[1:]).split(",")
                                        if players:
                                            self.info["defended"] = players
                                            self.allVotes[-1].append(self.info)
                                            self.save()
                                        break
                                elif self.commandCompare(inputs[0],"skip"):
                                    break
                                else:
                                    try:
                                        whichVote = int(inputs[0]) - 1
                                        if whichVote < len(guessVoteMatches) and whichVote >= 0:
                                            self.info["vote"] = guessVoteMatches[whichVote]
                                            self.allVotes[-1].append(self.info)
                                            self.save()
                                            break
                                    except:
                                        raw_input("Unknown command!")

                        self.info = {"player":"","time":"","post":"","vote":""}

            elif tag == "a":
                self.dataIsPlayer = False
            elif tag == "blockquote":
                self.dataIsQuoteBody = False

        def handle_data(self, data):
            if self.dataIsPost:
                if not self.dataIsQuoteBody and not self.dataIsQuoteHeader:
                    self.info["post"] += data
            elif self.dataIsPlayer:
                self.info["player"] += data
            elif self.dataIsTime:
                try:
                    self.info["time"] = datetime.datetime.strptime( data.strip(), "%B %d, %Y, %I:%M:%S %p" )
                    self.dataIsTime = False
                except:
                    # so it's not a timestamp, big whoop.
                    pass

    # instantiate the parser and fed it some HTML
    parser = MyHTMLParser(raw_input("Load File: "))

    # Top-level elements
    for i in root.findall(".//item//response"):
        page = base64.b64decode( i.text )
        parser.feed(page)

    1 person likes this post: taulover
    « Last Edit: April 18, 2017, 10:28:29 PM by Evelynx »
    Evelynx
    • Queen of Love and Beauty
    • Posts: 842
    • Karma: 429
    • Former Citizen
    • Pronouns
      She/Her/Hers
      Wintreath Nation
      Logged
    taulover
  • Regional Stability Squad
  • Seeker of Knowledge
  • I wrote this script to find the best possible move in an odd minesweeper pattern I came across on reddit:

    Spoiler
    import random
    import itertools

    minefield = [1,1,1,0,0]
    for subset in itertools.combinations(minefield, len(minefield)):
        print(subset)

    exit()

    difficulties  = [(16*30,99),(16*16,40),(9*9,10)]
    pattern_size = 25
    size_checks = [1,4]
    mines_per_pattern = []

    for d in difficulties:
        distribution = float(d[1])/float(d[0])
        mines_per_pattern += distribution * pattern_size
        print( mines_per_pattern[-1] )



    fields = [[0,0,0,0,0,
               0,0,0,0,0,
               0,0,1,0,0,
               0,0,0,0,0,
               0,0,0,0,0],
              [0,1,0,0,0,
               0,0,0,0,1,
               0,0,0,0,0,
               1,0,0,0,0,
               0,0,0,1,0],
              [0,0,0,1,0,
               1,0,0,0,0,
               0,0,0,0,0,
               0,0,0,0,1,
               0,1,0,0,0]]



    def check_random_field(num_mines, field_size):
        field =
    • * field_size

        while num_mines > 0:
            l = random.randint(0,field_size - 1)
            if not field[l]:
                field[l] = 1
                num_mines -= 1

        return int(field in fields)

    results = {1:0,4:0}

    for result in results.keys():
        for i in range(0,10000000):
            results[result] += check_random_field(result, 25)

    print(results)

    I wrote this script to parse werewolf posts in order to count up how many votes people have made.. when they made them, etc.. it then tries to analyze different posting patterns to try to identify werewolves.. I mean, totally didn't work because it turned out my best Wintreath friend was a werewolf and I told her everything .. :p But, I'd say it was extra.

    It actually performs HTTP requests.. pulls out posts, tries to determine if the post contains a vote..

    Spoiler
    import xml.etree.ElementTree as ET
    import datetime
    import operator
    import pickle
    import base64
    import os
    import re

    tree = ET.parse('/Volumes/Data/Items.txt')
    root = tree.getroot()

    from HTMLParser import HTMLParser

    # create a subclass and override the handler methods
    class MyHTMLParser(HTMLParser):
        def __init__(self, fileName):
            self.dataIsPost = False
            self.dataIsPlayer = False
            self.dataIsTime = False
            self.dataIsQuoteBody = False
            self.dataIsQuoteHeader = False
            self.collectingInfo = False
            self.fileName = fileName
            self.allVotes = [[]]

            self.info = {"player":"","time":"","post":"","vote":""}

            self.load()

            self.divInPostDepth = 0
            HTMLParser.__init__(self)

        def save(self):
            try:
                with open(self.fileName,"wb") as fh:
                    fh.write(pickle.dumps(self.allVotes))
            except:
                print("Failed to save")

        def load(self):
            try:
                with open(self.fileName,"rb") as fh:
                    self.allVotes = pickle.loads(fh.read())
            except:
                print("Failed to load")

        def latestPostTime(self):
            voteList = []

            if len(self.allVotes) > 0:
                voteList = self.allVotes[-1]

            postTime = datetime.datetime(1,1,1)
            if voteList:
                postTime = voteList[-1]["time"]
                print(postTime)
            return postTime

        def commandCompare(self, command, compare):
            return len(command) <= len(compare) and compare[0:len(command)] == command

        def outputVotes(self):
            for day in range(0, len(self.allVotes)):
                print("Day {}".format(day+1))
                dayVotes = self.allVotes[day]

                votes = {}
                for vote in dayVotes:
                    if vote["vote"] not in votes:
                        votes[vote["vote"]] = 0
                    votes[vote["vote"]] += 1

                for player,nVotes in votes.items():
                    print("\t{}: {}".format(player,nVotes))

        def handle_starttag(self, tag, attrs):
            if tag == "div":
                if self.dataIsPost:
                    self.divInPostDepth += 1

                for attr in attrs:
                    if attr == ("class","post"):
                        self.dataIsPost = True
                    elif attr == ("class","topslice_quote"):
                        self.dataIsQuoteHeader = True
                    elif attr == ("class","smalltext"):
                        self.dataIsTime = True
            elif tag == "blockquote":
                self.dataIsQuoteBody = True
            elif tag == "a":
                rightUrl = False
                rightTitle = False

                for attr in attrs:
                    if attr[0] == "href":
                        if attr[1].startswith("index.php?topic=3255"):
                            self.info["link"] = attr[1]
                        elif attr[1].startswith("http://wintreath.com/index.php?part=profile&id="):
                            rightUrl = True
                    if attr[0] == "title" and attr[1].startswith("View the profile of "):
                        rightTitle = True

                self.dataIsPlayer = rightUrl and rightTitle
                if self.dataIsPlayer:
                    self.collectingInfo = True

        def handle_endtag(self, tag):
            if tag == "div":
                self.dataIsQuoteHeader = False
                if self.dataIsPost:
                    self.divInPostDepth -= 1

                    if self.divInPostDepth == 0:
                        self.dataIsPost = False
                        self.info["post"] = self.info["post"].strip()
                        lowerPost = self.info["post"].lower()
                        if self.info["player"] != "Pengu" and ( not self.info["time"] or self.info["time"] > self.latestPostTime() ):
                            while True:
                                os.system('clear')
                                guessVoteRegexes = [
                                    re.compile("[Vv]ote:\s*([^\s.,]*)"),
                                    re.compile("[Ii]\s*[Vv]ote\s*([^\s.,]*)"),
                                    re.compile("[Vv]ote\s*([^\s.,]*)"),
                                    re.compile("[Vv]ote\s*for\s*
    • *([^\s.,]*)"),

                                    re.compile("[Vv]oting\s*for\s*
    • *([^\s.,]*)")

                                ]
                                guessVoteMatches = []

                                for line in self.info["post"].split("\n"):
                                    for regex in guessVoteRegexes:
                                        match = regex.search(line)
                                        if match:
                                            print("{}. {}".format(len(guessVoteMatches) + 1, match.group(1)))
                                            guessVoteMatches.append(match.group(1))

                                command = raw_input("\n{}\n{}\n{}\n".format(self.info["player"], self.info["time"], self.info["post"]))
                                inputs = command.split(" ")

                                if self.commandCompare(inputs[0], "newday"):
                                    self.allVotes.append([])
                                    self.save()

                                elif self.commandCompare(inputs[0], "tabulate"):
                                    self.outputVotes()
                                    print("-----")
                                    for day in self.allVotes:
                                        for vote in day:
                                            print "{}\n{}\n{}\n{}\n".format(vote["link"],vote["player"], vote["time"], vote["vote"])
                                    raw_input()

                                elif self.commandCompare(inputs[0], "correct") and len(inputs) == 4:
                                    day,idx,fld = (int(inputs[1]), int(inputs[2]), input[3])
                                    if day < len(self.allVotes) and idx < len(self.allVotes[day]) and fld in self.allVotes[day][idx]:
                                        print("Current Value: {}".format(self.allVotes[day][idx][fld]))
                                        newValue = raw_input("New Value: ")
                                        self.allVotes[day][idx][fld] = newValue
                                        self.save()

                                elif self.commandCompare(inputs[0], "delete") and len(inputs) == 3:
                                    day,idx = (int(inputs[1]), int(inputs[2]))
                                    if day < len(self.allVotes) and idx < len(self.allVotes[day]):
                                        del self.allVotes[day][idx]
                                        self.save()

                                elif self.commandCompare(inputs[0], "exit"):
                                    exit()

                                elif self.commandCompare(inputs[0], "vote") and len(inputs) >= 1:
                                        player = " ".join(inputs[1:])
                                        if player:
                                            self.info["vote"] = player
                                            self.allVotes[-1].append(self.info)
                                            self.save()
                                        break
                                elif self.commandCompare(inputs[0], "accuse") and len(inputs) >= 1:
                                        players = " ".join(inputs[1:]).split(",")
                                        if players:
                                            self.info["accused"] = players
                                            self.allVotes[-1].append(self.info)
                                            self.save()
                                        break
                                elif self.commandCompare(inputs[0], "defend") and len(inputs) >= 1:
                                        players = " ".join(inputs[1:]).split(",")
                                        if players:
                                            self.info["defended"] = players
                                            self.allVotes[-1].append(self.info)
                                            self.save()
                                        break
                                elif self.commandCompare(inputs[0],"skip"):
                                    break
                                else:
                                    try:
                                        whichVote = int(inputs[0]) - 1
                                        if whichVote < len(guessVoteMatches) and whichVote >= 0:
                                            self.info["vote"] = guessVoteMatches[whichVote]
                                            self.allVotes[-1].append(self.info)
                                            self.save()
                                            break
                                    except:
                                        raw_input("Unknown command!")

                        self.info = {"player":"","time":"","post":"","vote":""}

            elif tag == "a":
                self.dataIsPlayer = False
            elif tag == "blockquote":
                self.dataIsQuoteBody = False

        def handle_data(self, data):
            if self.dataIsPost:
                if not self.dataIsQuoteBody and not self.dataIsQuoteHeader:
                    self.info["post"] += data
            elif self.dataIsPlayer:
                self.info["player"] += data
            elif self.dataIsTime:
                try:
                    self.info["time"] = datetime.datetime.strptime( data.strip(), "%B %d, %Y, %I:%M:%S %p" )
                    self.dataIsTime = False
                except:
                    # so it's not a timestamp, big whoop.
                    pass

    # instantiate the parser and fed it some HTML
    parser = MyHTMLParser(raw_input("Load File: "))

    # Top-level elements
    for i in root.findall(".//item//response"):
        page = base64.b64decode( i.text )
        parser.feed(page)

    Reminds me of this xkcd (as well as this one).
    Spoiler


    Résumé
    Wintreath:
    Citizen: 8 April 2015 - present
    From the Ashes RP Game Master: 29 November 2015 - 24 July 2018
    Skydande Vakt Marshal: 29 November 2015 - 28 February 2017
    Skrifa of the 13th Underhusen: 13 December 2015 - 8 February 2016
    RP Guild Councillor: 9 February 2016 - 6 March 2018
    Ambassador to Lovely: 23 February 2016 - 17 August 2016
    Werewolf VII co-host: 11 May 2016 - 5 June 2016
    Skrifa of the 18th Underhusen: 8 October 2016 - 7 December 2016
    Ambassador to Balder: 1 December 2016 - 1 March 2022
    Skrifa of the 19th Underhusen: 7 December 2016 - 9 February 2017
    Ambassador to the INWU: 11 March 2017 - 1 March 2022
    Ambassador to the Versutian Federation: 18 August 2017 - 22 March 2018
    Thane of Integration: 29 September 2017 - 7 March 2018
    Speaker of the 24th Underhusen: 10 October 2017 - 7 December 2017
    October 2017 Wintreath's Finest: 4 November 2017
    Speaker pro tempore of the 25th Underhusen: 9 December 2017 - 7 February 2018
    Wintreath's Finest of 2017: 6 January 2018
    Werewolf XIV host: 20 January 2018 - 23 February 2018
    February 2018 Wintreath's Finest: 5 March 2018
    Thane of Embassy Dispatches / Foreign Releases and Information / Foreign Dispatches: 7 March 2018 - 15 March 2020
    Speaker of the 28th Underhusen: 10 June 2018 - 7 August 2018
    Second Patriarch of the Noble House of Valeria: 10 October 2018 - present
    Arena Game 6 Host: 28 December 2018 - 9 March 2019
    Librarian of the Underhusen: 29 January 2019 - 12 February 2019
    Speaker of the 32nd Underhusen: 12 February 2019 - 8 April 2019
    March 2019 Wintreath's Finest: 4 April 2019
    Librarian of the Underhusen: 12 April 2019 - 23 October 2020
    Commendation of Wintreath: 24 September 2020
    Peer of the Overhusen: 9 December 2020 - 8 February 2021
    Vice Chancellor of the Landsraad: 26 May 2021 - 15 September 2022
    Arena Game 8 Host: 10 June 2021 - 19 July 2021
    June 2021 Wintreath's Finest: 5 July 2021
    Regional Stability Squad: 28 February 2023 - present
    Minecraft Server Admin: 8 March 2023 - present

    Aura Hyperia/New Hyperion:
    Plebeian: 16 April 2014 - 21 July 2014
    Patrician: 21 July 2014 - present
    Adeptus Mechanicus: 24 October 2014 - 16 November 2014
    Co-founder of New Hyperion: 29 October 2014 - present
    Lord of Propaganda: 16 November 2014 - present
    Mapmaker for Official Region RP: 27 November 2015 - present
    WACom Delegate: 11 November 2017 - present
    Other positions: Hyperian Guardsman, Hyperian Marine (Rank: Scout)
    taulover
    • Seeker of Knowledge
    • Posts: 13,223
    • Karma: 4,254
    • Regional Stability Squad
    • Pronouns
      He/Him/His
      Familial House
      Valeria
      Wintreath Nation
      Logged
    Evelynx
  • Former Citizen
  • Queen of Love and Beauty
  • The minesweeper script was actually a fantastic time saver... :)
    1 person likes this post: taulover
    Evelynx
    • Queen of Love and Beauty
    • Posts: 842
    • Karma: 429
    • Former Citizen
    • Pronouns
      She/Her/Hers
      Wintreath Nation
      Logged
    Melehan
  • Citizen
  • I waited six years to make an alt account on a writing site I frequent on March 14, 2015 at precisely nine hours, twenty-six minutes, and fifty-four seconds GMT.

    3/14/15 9:26:54

    The first ten (rounded) digits of pi.

    The account was named Pie, of course.

    And I did all this because I'd accidentally signed up on Pi Day six years before.

    I am so proud of myself.
    Melehan
    • Posts: 370
    • Karma: 342
    • Citizen
    • Familial House
      Burdock
      Wintreath Nation
      Logged
     
    Pages: [1]