pyinstaller ready

This commit is contained in:
Dpeta 2021-03-25 09:09:58 +01:00
parent 9bdfb4fb12
commit ca5f3899c5
10 changed files with 1546 additions and 107 deletions

1
.gitignore vendored
View file

@ -1,5 +1,4 @@
dist/* dist/*
pesterchum.spec
*.sw? *.sw?
*~ *~
logs/* logs/*

BIN
PCskins.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 483 KiB

BIN
Pesterchum.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.8 KiB

184
README-karxi.mkdn Executable file
View file

@ -0,0 +1,184 @@
Welcome to Pesterchum 3.41!
=============================
## FOR NEW USERS
This modification of Pesterchum is intended for people who are already familiar
with using the base client.
If you aren't, please check the standard build's [documentation][pchum-doc].
[pchum-orig]: https://github.com/illuminatedwax/pesterchum
[pchum-doc]: https://github.com/illuminatedwax/pesterchum/blob/master/README.mkdn
## FOR EVERYONE ELSE
Greetings! This is a modification of Pesterchum, made because Pesterchum is
effectively no longer maintained, that is intended to fix a number of issues.
The code used as a base is a newer version of Pesterchum than the one in
circulation, and thus has plenty of useful features that can be found in the
[CHANGELOG][changes].
In addition, there are other features and improvements that have been made, and
there are many more planned. Check the [TODO list][todo-done] to see what's
been fixed, as well as what's [planned][todo-upcoming].
[changes]: https://github.com/karxi/pesterchum/blob/master/CHANGELOG.mkdn
[todo-done]: https://github.com/karxi/pesterchum/blob/master/TODO.mkdn#tododone
[todo-upcoming]: https://github.com/karxi/pesterchum/blob/master/TODO.mkdn#features
### Installation
There isn't an automated installer yet, but the steps involved aren't all that
difficult.
#### Pitfalls
* If you're on a 64-bit system (and most are these days), use those links. You
can also use the 32 bit versions, if you choose, but you *cannot* mix them.
* If you're on a 32-bit system but use the 64-bit installers, you'll get an
error along the lines of "not a valid Win32 application", or the
installer will simply fail.
* This version of Pesterchum does not come compiled as an executable, and thus
does not have Python/PyQt4 packaged with it. Those are necessary for
Pesterchum to run, so you have to install them manually.
#### First-Time Install
Download links are for Windows, but a quick Google search will find everything
necessary.
1. Install **Python 2.7** or higher if you don't already have it:
* [32 bit][python2-32]
* [64 bit][python2-64]
Be **sure** to add Python to the PATH if asked to do so during
installation. It means Python will be usable from the console,
which is necessary for this to run.
2. Install **PyQt4**:
* [32 bit][pyqt4-32]
* [64 bit][pyqt4-64]
3. **(LINUX)** Install **pygame**:
* [pygame download page][pygame-dl]
* You don't need to install this if you're using Windows. Linux users need
to install it to enable sound, but it will otherwise work without it.
* If you want to download this, you should probably do so using your native
package manager.
4. Download **Pesterchum**:
* [Download from main branch][pchum-zip]
5. Unzip Pesterchum somewhere easily-accessible.
6. **If you have any custom themes**, copy/paste them into the 'themes' folder.
You can find this in `%LOCALAPPDATA%\pesterchum`, which is the same as
`%APPDATA%\..\Local\pesterchum`. Copy/paste one into Explorer's address bar
and you'll end up where you need to be.
Oftentimes the 'themes' folder doesn't exist in Pesterchum's user-specific
config folder, so you'll have to make it and copy the custom themes into
it.
__If, for some reason, that doesn't work:__
You can also copy the missing themes into the 'themes' folder of the version
you just unzipped. **Don't overwrite any files** if you do this - the themes
used by this have been updated, and the older default themes may break when
used.
7. Run Pesterchum! How you do this depends on the OS:
* **(WINDOWS)** Run `w32-run-pchum.bat`.
* **(LINUX)** Run `./pesterchum`, preferably via terminal.
* Note that this is made to provide debugging information - so that if
errors come up, they can be reported to me, and I can fix them.
[python2-32]: https://www.python.org/ftp/python/2.7.12/python-2.7.12.msi
[python2-64]: https://www.python.org/ftp/python/2.7.12/python-2.7.12.amd64.msi
[pyqt4-32]: http://sourceforge.net/projects/pyqt/files/PyQt4/PyQt-4.11.4/PyQt4-4.11.4-gpl-Py2.7-Qt4.8.7-x32.exe
[pyqt4-64]: http://sourceforge.net/projects/pyqt/files/PyQt4/PyQt-4.11.4/PyQt4-4.11.4-gpl-Py2.7-Qt4.8.7-x64.exe
[pygame-dl]: http://www.pygame.org/download.shtml
[pchum-zip]: https://github.com/karxi/pesterchum/archive/master.zip
#### Upgrading
**NOTE: This only applies to those who already have this patched Pesterchum
installed.**
**DO NOT extract this into a folder containing pesterchum.exe, because it WILL
break.** Read up to **First-Time Install** if you're installing this version
for the first time.
Otherwise...
Just re-download the [Pesterchum zip][pchum-zip] and extract it over your old
installation, replacing everything that was already there. That's all there is
to it!
#### Having Problems?
I can't offer much help in this regard; if you're getting errors, feel free to
try to contact me, but if you're having trouble with the installers, there's
little I can do. [How to install Python][howtogetpython] might help; failing
that, Google saves lives.
[howtogetpython]: http://www.howtogeek.com/197947/how-to-install-python-on-windows/
SMILIES
-------
None of the smilies have changed or been added, yet; this list is kept for
posterity and easy reference.
* `:rancorous:`
* `:apple:`
* `:bathearst:`
* `:cathearst:`
* `:woeful:`
* `:pleasant:`
* `:blueghost:`
* `:slimer:`
* `:candycorn:`
* `:cheer:`
* `:duhjohn:`
* `:datrump:`
* `:facepalm:`
* `:bonk:`
* `:mspa:`
* `:gun:`
* `:cal:`
* `:amazedfirman:`
* `:amazed:`
* `:chummy:`
* `:cool:`
* `:smooth:`
* `:distraughtfirman:`
* `:distraught:`
* `:insolent:`
* `:bemused:`
* `:3:`
* `:mystified:`
* `:pranky:`
* `:tense:`
* `:record:`
* `:squiddle:`
* `:tab:`
* `:beetip:`
* `:flipout:`
* `:befuddled:`
* `:pumpkin:`
* `:trollcool:`
* `:jadecry:`
* `:ecstatic:`
* `:relaxed:`
* `:discontent:`
* `:devious:`
* `:sleek:`
* `:detestful:`
* `:mirthful:`
* `:manipulative:`
* `:vigorous:`
* `:perky:`
* `:acceptant:`
* `:olliesouty:`
* `:billiards:`
* `:billiardslarge:`
* `:whatdidyoudo:`
[modeline]: vim:set autoindent ts=4 sts=4 sw=4 tw=79 expandtab:

840
README-pesterchum.mkdn Executable file
View file

@ -0,0 +1,840 @@
Welcome to Pesterchum 3.41!
=============================
WHAT'S NEW?
-----------
* Check out the CHANGELOG file to see what's changed!
What do I do now?
-----------------
Most questions can be answered by visiting the forums! Go to HELP->HELP
and you'll be transported to the proper thread!
Here's some tips to help you get started:
-----------------------------------------
- Some themes can be confusing if you haven't used the program
already! Some hints:
* Trollian: Moods are set by clicking the timelines, and you
can add chums by clicking "Chumproll." Moods correspond to the troll
that would most likely exhibit them. You can go offline by hitting the
"Timelines" menu bar.
* Gold: Add chums by hitting the two chumpeoples in the upper left
corner. Go offline by clicking the "CHUMHANDLE:" label.
* Enamel: Add chums by hitting the "CHUMROLL" label. Go offline by
clicking the upper left hand corner.
- Right-click is your friend! There are useful right click
options on the chumroll, by clicking the chumhandle in a conversation,
online userlist, or the list of memo browsers.
Cool features:
--------------
- Profile switching. Instantly switch profiles, loading your color and
quirks with it.
- Theme switching and creation. So far this comes with a few official
themes! But you can also make your own: just make a new directory in
the themes folder with the proper images and style.js file. The
style.js file will be documented soon, but feel free to poke at it.
- Memos. Memos that are a lot more like the ones in the comic and
allow you to appear at multiple times in one chat.
- Quirks: Prefix, suffix, simple replace, regexp replace (like in
2.5), random replacement, and an auto-mispeller :P
- Chum groups. Organize your chums into collapsible groups for easy
management.
- Block/user list
- Add/block chums directly from a conversation, the userlist, or memo
userlist.
- Timestamps saved in logs and shown in conversations if wanted.
- Logging. Logs are output in bbcode (for easy forum posting), html,
and plain text.
- Logviewer for easy log reading inside Pesterchum
- Idling. You can set yourself idle manually, and the computer will
set it for you after a configurable amount of time.
- Improved /me. Any letters immediately following /me will be
processed correctly. e.g. /me'd rather be fishing -> `-- ghostDunk'd
[GD'D] rather be fishing --`
- Hyperlinks! Now if someone types http://whatever it will turn into a
link you can just click and follow. No more copy/paste.
- Memo links. Link your friends to your memos.
- Smilies. We've added about 30-40 smilies from the forums. There is a
list later on in this readme.
- Submit quotes directly to the Pesterchum QDB!
FA%
---
__Q:__ Norton says it has a virus and then deletes it!
__A:__ Read this helpful Norton FAQ:
Alright, here's a guide to by-passing Norton:
* First, to download Pesterchum:
1. Make sure you're on a Moderator account. Moreso for the Norton steps than these ones.
2. Download the .zip file, not the .exe file.
3. Unzip the .zip file onto memory. Pesterchum should now be installed.
* Now, to by-pass Norton:
1. Make sure you're still on a moderator account.
2. Open up Norton.
3. Click on 'Settings' up in the upperright hand corner.
4. Click on 'Anitivirus', off to the upper left. It has a small image of a needle or something similar off to it's side.
5. There's a word that reads 'SONAR protection' halfway to the bottomleft. Off to it's right, there's a bar that's half green. Click on the bar.
6. It will warn you about turning off SONAR. Have it set to turn back on when the system restarts.
7. If done properly, the background for the main page of Norton(what you saw on steps 2-3) has turned an apocaliptic red. Feel free to close Norton now. Keep in mind to stay off suspicious online sites now.
8. Open up Pesterchum, and let the chummy convos begin.
* When finished:
1. Log off of Pesterchum. LOG OFF, NOT CLOSE IT.
2. Then, you can either shut off your comp, and Norton will re-enable SONAR, or you can repeat steps 1-5, except turning the red bar green. If done right, Norton will be it's happy color again.
3, Keep in mind that you must repeat all of this(other than the download) every time you want to get on Pesterchum.
* Hope this is helpful!
(This guide brought to you by the slightly combined efforts of empireomega and Xanaomin)
------------------------------------------------------------------------------------
__Q:__ I can't connect because my school/university/network/stolen wifi is blocking my connection! OR I can't seem to connect to the server at all and I'm not running any firewalls!
__A:__ Edit your pesterchum.js file. Open it up in notepad or something, and then edit the beginning so it looks like this:
```
{"port": "1413", ....
```
where the .... is the rest of the gobbledygook there.
------------------------------------------------------------------------------------
__Q:__ The mood buttons on Pesterchum 6.0 don't match up to what it sets your mood to! What gives?
__A:__ The mood names are just there to look canon. It is intentional.
------------------------------------------------------------------------------------
__Q:__ I'm appearing as offline to 2.5 users/other users appear the wrong
mood? What's happeninggggg
__A:__ The 2.5 people decided to change the mood protocol. When I made
this program, I decided to go with Tinychat's original protocol (and
extend it). So some moods will appear wrong between 2.5
users. (\*COUGH\*tell them to switch to 3.14\*COUGH\*)
------------------------------------------------------------------------------------
__Q:__ Pesterchum 2.5 users don't get my /me messages correctly!
__A:__ That's because they implemented the /me command differently.
------------------------------------------------------------------------------------
__Q:__ Can we resize the main window?
__A:__ No. This is done so we can offer more flexible UI creation. It's a
lot easier to make themes that look canon this way.
------------------------------------------------------------------------------------
__Q:__ Can we have different chum rolls for different users?
__A:__ No. Instead what we now have crum groups to organize people.
------------------------------------------------------------------------------------
__Q:__ Can we delete profiles?
__A:__ Yes. Go to the profile switcher, choose a profile and press DELETE.
------------------------------------------------------------------------------------
__Q:__ You should make it so you can ban specific time frames in memos.
__A:__ This was too complicated to implement, and I don't have the UI
quite figured out. This will probably go in a future update.
DOCUMENTATION
-------------
STARTING
--------
If this is your first time running Pesterchum 3.14, you need to create
a new profile. Just type in your chum handle in the box and click the
color swatch to pick your color. Check the "default" checkbox to make
this your default profile.
BASIC PESTERING
---------------
To begin pestering, first click the "ADD CHUM" button and type in
their pester handle. The handle must be all lower case except for one
capital letter. Once you've added that person, they will appear on
your chumroll. You can double click to begin pestering them, or
right-click to bring up a menu where you can pester them, block them,
or remove them from your chumroll. (Or you can select them and hit
"enter" OR hit the "PESTER" button.)
Once you begin pestering somebody (or they begin pestering you), it
will bring up the conversation window. Here you can type to your
chum. Also remember that if you right-click on the area just above the
Pesterlog, it will bring up a list of options: Quirks Off will turn
your quirks off, Add Chum will add this chum to your list, and Block
will block them. (Those last two options are useful if you are being
pestered by someone you don't have on your list yet!)
While pestering your chum, here are some useful features:
* Type /me to create a system message. "/me facepalms." will generate:
```
-- ghostDunk [GD] facepalms. --
```
You can also append 's after /me like so: "/me's computer exploded."
```
-- ghostDunk's [GD'S] computer exploded. --
```
In fact, any characters you type after a /me before the space will
be added: "/meing is the Ghost Nation's official pastime."
```
-- ghostDunking [GDING] is the Ghost Nation's official pastime. --
```
* Color tags! If you feel the need to talk about The Green Sun or add
some appleberry blast to your conversation, just use color
tags. These work like in TC 1.5: `<c=(color)>colored text</c>`. But in
PC 3.14, you can type your color in a lot of different ways:
- You can use the familiar r,g,b method:
`<c=0,255,0>The Green Sun</c>`
- You can use HTML tags:
`<c=#7f7f7f>DURR I'M KARKAT AND I'M A HUGE IDIOT</c>`
- You can even use [plain color names](http://en.wikipedia.org/wiki/Web_colors):
`<c=red>D4V3 TH1S 1S SO D3C4D3NT</c>`
- You don't even have to add the `</c>` if you are lazy. Just use a
new color tag whenever you want to change colors and PC 3.14 will
add the extra tags for you.
* URLs (anything with `http://` or `www.` in front of it) will automatically be
detected and made into a link you can CLICK.
* You can also link people to memos by typing "#" and the name of the
menu like so: #R41NBOW_RUMPUS_P4RTYTOWN
Clicking the link will open up the memo select menu.
* Smilies! There are a list of smilies at the end of this document;
they are based on the MSPA Forum smilies.
* Don't worry about your quirks screwing up any of the above: PC will
apply your quirks AFTER it figures out color codes, links, smilies, etc.
* Pressing the up arrow will cycle through a history of your comments,
so if you want to retype something, you can pull it up.
* You can submit directly to the Pesterchum Quote Database! If you
have a particualarly awesome conversation, you can submit it to the
database by simply highlighting the good part of the conversation,
right clicking it and choosing "Submit to Pesterchum QDB!"
MEMOS
-----
One of the most interesting features to make was the memos, and make
them as close to the comic as I could without actually inventing time
travel. So here is the TIME TUTORIAL:
* __Joining:__ When you go CLIENT->MEMOS, you'll see a list of memos pop up
-- those are memos people already have open. To join one, just
highlight one of them. If you want to make a new memo, just type it in
the input. If you'd like to make it secret, so that it doesn't appear
in the list, check "HIDDEN CHANNEL". Then, choose what timeframe you
want to appear to be in. So if you wanted to be in the future, you
could move the slider to the right. You can also enter the time
manually. Then hit JOIN.
* __Explaining time:__ Time in memos, unlike Homestuck, will not be relative
to your position. That is, if you choose 4:13 in the future, you will
not see someone who has set their time as "current" (or "0") in the
past: you will see them as "current" and yourself as "future." This is
because we do not have time travel! Memo time setting is basically an
RP mechanic: you are pretending to be from the future! It will also
help keep everyone straight: everyone will see the same thing!
* __The time slider:__ The slider shows your current position in the time
stream. If you want to change your time frame, simply move the slider
(or type a time in) and hit GO. This will open a new time frame, and
the next time you type a message, the memo will show that you've
responded to it in that time frame. You can now switch between your
time frames simply by clicking the arrows in the right hand
corner. (THIS COMES IN HANDY IF YOU WANT TO ARGUE WITH YOURSELF.) You
can have any number of open time frames, and the program will number
them in the order in which you open them (like in the comic). You can
have one of your time frames cease responding to the memo by hitting
"CLOSE." If you open that time frame again, the program will remember
the number it originally gave it. If you want to be mysteeeeeeeerious,
you can type in "?" and you will appear as ???.
* __The memo viewer list:__ To the right is a list of people currently
browsing the memo. A shade icon next to their name means they are the
"operator" of the memo: meaning they can kick ("ban") people from the
memo and make other people operators as well. A "ban" is not permanent
(like in the comic), and the program will ask if you want to reconnect
to the memo. You kick and op people by right clicking their name in
the window. You can also add them to your chumroll!
* __Inviting people to your memo:__ You can link to a memo by simply typing
"#nameofmemo" in any conversation or memo window. So you can say:
```
CG: NOW YOU, ME, AND EGBERT NEED TO HAVE A CHAT.
CG: CLICK IT.
CG: #FRUITYRUMPUSASSHOLEFACTORY
```
and it will appear as a link that you can click, which will open the
memo chooser window.
CLIENT MENU
-----------
### OPTIONS: ###
* __Chum List__
* __Hide Offline Chums:__ Turning this option on will hide all offline chums
off your chumroll.
* __Show Empty Groups:__ Turning this option on will show empty groups.
* __Show Number of Online Chums:__ Show number of online chums in each group.
* __Sort Chums:__ How would you like your chums sorted?
* __Conversations__
* __Time Stamps:__ Turning this on will show timestamps in your chats.
* __12/24 hour:__ Formatting for timestamps. Whether you want them in 12 or
24 hour time.
* __Show Seconds:__ Turning this on will show the seconds in your timestamps.
* __Show OP and Voice Messages in Memos:__ Whether or not you would like
to see messages when people gain/lose OP or Voice.
* __Use animated smilies:__ To animate or not to animate.
* __Interface__
* __Tabbed Conversations:__ Turns tabbed conversations on and off. Don't
worry if you do this in the middle of a conversation, PC will save
them for you.
* __Minimize:__ What do you want the minimize button to do?
* __Close:__ What do you want the close button to do?
* __Sound__
* __Sounds On:__ Uncheck to shut it the fuck up.
* __Pester Sounds:__ Uncheck to only turn off Pester sounds.
* __Memo Sounds:__ Uncheck to only turn off Memo sounds.
* __Memo Mentions:__ Check to have a separate noise when your initials
get mentioned in a memo.
* __Logging__
* __Log all Pesters:__ Log one-on-one chats.
* __Log all Memos:__ Log everything said in memos.
* __Log Time Stamps for Pesters__
* __Log Time Stamps for Memos__
* __Idle/Updates__
* __Minutes before Idle:__ How long before you should be considered idle.
* __Check for Pesterchum Updates:__ How often to check for updates
to Pesterchum.
* __Check for MSPA Updates:__ Check the MSPA site for updates to comics.
* __Theme__
* __Pick a Theme__
### MEMOS: ###
Opens the Memo list as above.
### USERLIST: ###
Shows a list of all the users that are currently logged onto
Pesterchum. Right-click their names and select "ADD CHUM" to add them
to your chum roll!
### IDLE: ###
Make yourself an idle chum. You will appear as idle until you
uncheck this box, or if you *actually* go idle (stop using the
computer) for 10 minutes and then come back.
### IMPORT: ###
Imports your old Pesterchum 2.0, 2.5 and Tinychum chum
rolls. This will also import your old quirks from Pesterchum 2.5.
### RECONNECT: ###
Forces PC to reconnect to the server.
### EXIT: ###
noooooooooooooooooooooooo
PROFILE MENU
------------
### QUIRKS: ###
Opens the quirks menu. More on that below!
### TROLLSLUM: ###
Opens up the window where you can view people you've
blocked. You can add and remove people to the list from here as well.
### COLOR: ####
Change your text color here!
### SWITCH: ###
Switch your profile! You can have any number of profiles, and
PC will save your color, quirks, and theme for that profile. Chumrolls
and block lists are the same for all profiles. Feel free to have
multiple instances of PC running on two or more handles!
HELP MENU
---------
### HELP: ###
Get taken to a handy dandy tutorial for Pesterchum!
### CALSPRITE: ###
Open a chat with calSprite (learn more about calSprite below).
### NICKSERV: ###
Open a chat with NickServ. If you don't know what NickServ is, you don't need to.
### ABOUT: ###
See which version of Pesterchum you have. Learn about all the awesome people
that helped bring Pesterchum 3.14 to you!
### REPORT BUG: ###
Report any bugs you come across so we can fix them and make Pesterchum
even better!
CALSPRITE
---------
calSprite is the bot that helps moderate canon handle usage! Simply pester
calSprite with the world "HELP" (turn your quirks off!) and you
will get instructions on how to use calSprite!
QUIRKS
------
There are six kinds of quirks! I'll teach you how to use them all!
(In this section, I will use quotes ("") around things so it's clearer
to see exactly what to type! Don't include these quotes when using
these examples!
Also, note that your quirks will not work until you save them by
hitting "OK" on the Quirk window.
* __Prefix/Suffix:__
This will put text before or after everything you
say. So for example, we can use prefixes to emulate part of Nepeta or
Equius' quirks:
```
PREFIX: ":33 < "
You type: "*ac twitches her friendly whiskers at ct*"
Result:
AC: :33 < *ac twitches her friendly whiskers at ct*
```
```
PREFIX: "D --> "
You type: "Hi"
Result:
CT: D --> Hi
```
Suffixes work the same way, but at the end of the message:
```
SUFFIX: "!!!"
You type: hey there
Result:
GD: hey there!!!
```
Remember that it doesn't automatically add a space! You'll need to add
it in (see CT and AC examples again!)
* __Simple Replace:__
This will simply take a set of characters and replace them with other
characters.
* Let's add a quirk to our Nepeta:
```
Replace: "ee" With: "33"
You type: "*ac saunters from her dark cave a little bit sleepy from
the recent kill*"
Result:
AC: :33 < *ac saunters from her dark cave a little bit sl33py from the
recent kill*
```
* Let's add two to Equius:
```
Replace: "loo" With: "100"
Replace: "x" With "%"
You type: "look"
Result:
CT: D --> 100k
```
```
You type: "What are you expecting to accomplish with this"
Result:
CT: D --> What are you e%pecting to accomplish with this
```
* Aradia:
```
Replace: "o" With: "0"
You type: "and the reward would be within our reach"
Result:
AA: and the reward w0uld be within 0ur reach
```
Notice that it is CASE SENSITIVE. So in the above case, if you typed
"ABSCOND", it would not replace the "O".
* Sollux:
```
Replace: "i" With: "ii"
Replace: "s" With: "2"
```
* Eridan:
```
Replace: "v" With: "vv"
Replace: "w" With: "ww"
```
* Feferi:
```
Replace: "h" with: ")("
Replace: "H" with: ")("
Replace: "E" with: "-E"
```
* __Regexp Replace:__
This is a more complex kind of replacement. [Regexp](http://en.wikipedia.org/wiki/Regexp)
stands for "regular expression", a kind of programming language (yes, it is a language)
used to find and replace text. PC 3.14 also includes a few functions (`upper()`,
`lower()`, `scramble()`). If you want to learn it on your own,
I suggest you start with the [Python tutorial](http://docs.python.org/howto/regex.html)
since PC 3.14 uses Python's regexps. Check out V2.5's tutorial too, as that is a pretty
good start as well.
* Let's start with Karkat. Regexps are just like your every day find and
replace: they search for a string that matches what you want to
replace, and replaces it with... the replacement.
```
Regexp: "(.)" Replace with: "upper(\1)"
```
Three concepts here. Let's look at the regexp. "(.)" has two things
going on. The first is that ".". In regexp speak, "." is the wildcard:
it will match *any* character -- and just one.
The parentheses tell the regexp to *save* what's inside them so you
can put it back when you replace. That's what the "\1" is for -- it
means, "put the match inside parentheses #1 here". You can have any
number of parentheses.
* __"upper()"__ is a function special to PC 3.14 -- it will uppercase
anything inside the parentheses. So in this case, upper will uppercase
"\1" -- which, as you recall is what we found inside the
parentheses. Which was *every* character. So to sum up, it replaces
every character with an uppercase version of that character. WHICH
MAKES YOU TALK LIKE THIS.
* Let's look at Terezi next.
```
Regexp: "[aA]" Replace with: "4"
Regexp: "[iI]" Replace with: "1"
Regexp: "[eE]" Replace with: "3"
Regexp: "(.)" Replace with: "upper(\1)"
```
We already know what the last line does. But what's up with those
brackets? What's their deal? Basically, in regular expressions,
brackets indicate a list of matching characters. So, basically any
single character within the brackets will be matched. In this case,
either "a" or "A" will be matched and replaced with "4," and likewise,
"i" and "I" will be replaced with "1", and "e" and "E" will be
replaced with "3."
Just like there is an `upper()` function, there is also a `lower()`
function. It acts just like `upper()` but instead makes everything
inside the parentheses lowercase. This allows you to do things like:
```
Regexp: "(.)" Replace with: "lower(\1)"
You type: "I AM YELLING"
Result:
GD: i am yelling
```
Along with the upper and lower functions is a `scramble()` function.
The purpose of this function is to randomly scramble anything inside
the parentheses.
```
Regexp: "(\w)(\w*)(\w)" Replace with: "\1scramble(\2)\3"
You type: "hello there"
Result:
GD: hlelo trhee
```
This particular regular expression scrambles all of the letters in
the middle of a word. Notice that the "h" and "o" at the beginning
and end of hello remain in place while the other letters are scrambled.
You should also know that "^" is a special character in brackets. If
placed immediately after the opening bracket (like "[^"), then the
brackets instead match every character *except* the ones in the
brackets. So, for example, if you wanted to have a quirk where you
capitalized all your letters *except* o, you'd do this:
```
Regexp: "([^o])" Replace with: "upper(\1)"
You type: "hello there"
Result:
GD: HELLo THERE
```
You can also specify a *range* of characters inside the brackets, by
using the "-" character. [a-z] will match any lowercase letter. You
can combine them, too: [a-z0-9] will match any digit and lowercase letter.
There are also different shortcuts for character types:
```
\d matches any digit; same as [0-9]
\D matches any non-digit; same as [^0-9]
\s matches any spaces
\S matches any non-space
\w matches any alphanumeric character; same as [a-zA-Z0-9_]
\W matches any non-alphanumeric character; same as [^a-zA-Z0-9_]
Note \w and \W also match extended Latin or Unicode alphanumerics.
```
You can include this inside brackets, too.
There's also a special character, \\b. What \\b does is make sure that
you are at the beginning or end of a word.
* So with that knowledge, let's try Kanaya:
```
Regexp: \b(\w) Replace with: upper(\1)
You type: "i suggest you come to terms with it"
Result:
GA: I Suggest You Come To Terms With It
```
Another feature of regular expressions is the ability to match
*repeated* characters. There are three repeat characters: the "\*", the
"+", "?", and "{m,n}". They work by playing them after the character,
or character type you want to match. (So, you could say "\s+" or ".*")
The "\*" character matches ZERO or more of that character. So, for
example, "f\*" would match "", "f" and "ff" -- and any other character!
That's right, every character counts as matching it zero times. Yeah,
it's weird. I suggest you use...
The "+" character matches ONE or more of that character. So, if we
wanted to have a character that wanted to elongate their s's so that
they used four 's's every time, like sssso, but didn't want to have
eight s's when using words with double s's, like pass, we'd do this:
```
Regexp: "s+" Replace with: "ssss"
You type: "you shall not pass"
Result:
UU: you sssshall not passss
```
As for the other two, I can't really think of any useful quirks to be
made with them. But to let you know, "?" matches either 0 or 1 of that
character, so "trolls?" would match "troll" and "trolls". "{m,n}"
matches between m and n characters. (If you leave out 'n', any number
of characters more than m will be matched: "s{3,}" will match 3 or more 's'.)
So "s{2,4}" will match "ss", "sss", and "ssss" and that's it.
Also, "?" is equivalent to "{0,1}", "*" is equivalent to "{0,}", and
"+" is equivalent to "{1,}".
Now with repeating expressions, we can do something like make EVERY
other WORD capitalized:
```
Regexp: "(\w+) (\w+)" Replace with: "upper(\1) \2"
You type: "this is pretty annoying i bet"
Result:
GD: THIS is PRETTY annoying I bet
```
The \1 represents the first word -- which has been matched because the
word is alphanumeric characters, repeated once or more -- and \2
represents the second word.
Another operator to use is the "|", which will match more than one set
of characters. For example, "black|red" will match "black" or
"red". If you want to match something in the middle of words, you have
to use parentheses: "(black|red) romance" will match "black romance"
and "red romance".
Finally, there are the "^" and "$" characters. Yes, we already did the
"^" character, but this is OUTSIDE of brackets, not INSIDE. "^"
matches the beginning of a message, and "$" matches the end of it. You
can use this to make more sophisticated prefix and suffix
behaviors. For example, if we have a quirk that adds "..." to the end
of all our messages, we can set it up so it doesn't do that if we put
punctuation [?!.] at the end. So:
```
Regexp: "([^?!.])$" Replace with: "\1..."
```
This will match the end of any message as long as it doesn't have
"?", "!", or "." at the end. Then it will replace it with whatever the
last character of the sentence was (remember we're replacing it, so we
have to put it back!) and add "..." at the end.
Careful with the beginning and ending replaces -- if you use more than
one, you may not get what you expect because they will ALL be applied,
one after the other! This is a bug in my opinion, that I plan to fix!
* __Random replace:__
Just like the regexp replace, except that instead of just one thing to
replace it with, you give it a list. PC will then choose from that
list randomly. So let's say I want to randomly end my sentences with
either "bro" or "dog":
```
Regexp: "$" Replace with: "bro" and "dog"
```
* You can also imitate Araida's random "ribbits" in between words:
```
Regexp: "\s" Replace with: " ribbit ", " ", " ", " ", " ", " ", etc....
```
where " " is just a blank space added a bunch of times. (You can see
how many blank spaces you've added by clicking on the list.) You have
to add the spaces because each entry has the same chance of being
selected. (Yes, I know this could be improved.) If you add " ribbit "
and 9 spaces, " ribbit " will have a 1/10 chance of being picked.
Also note that if you add more than one prefix or more than one
suffix, it will pick randomly from them instead of adding them both!
* __Mispeller__:
Be careful with thsi one. The mispeller will randomly mispell x% of
the words you type -- where x is the percentage you set the slider
to. I have attempted to mimic SBaHJ mispelling style but whoof knows
what will happen oh god ive created a mosnter
SMILIES
-------
Here's a list of smilies:
* `:rancorous:`
* `:apple:`
* `:bathearst:`
* `:cathearst:`
* `:woeful:`
* `:pleasant:`
* `:blueghost:`
* `:slimer:`
* `:candycorn:`
* `:cheer:`
* `:duhjohn:`
* `:datrump:`
* `:facepalm:`
* `:bonk:`
* `:mspa:`
* `:gun:`
* `:cal:`
* `:amazedfirman:`
* `:amazed:`
* `:chummy:`
* `:cool:`
* `:smooth:`
* `:distraughtfirman:`
* `:distraught:`
* `:insolent:`
* `:bemused:`
* `:3:`
* `:mystified:`
* `:pranky:`
* `:tense:`
* `:record:`
* `:squiddle:`
* `:tab:`
* `:beetip:`
* `:flipout:`
* `:befuddled:`
* `:pumpkin:`
* `:trollcool:`
* `:jadecry:`
* `:ecstatic:`
* `:relaxed:`
* `:discontent:`
* `:devious:`
* `:sleek:`
* `:detestful:`
* `:mirthful:`
* `:manipulative:`
* `:vigorous:`
* `:perky:`
* `:acceptant:`
* `:olliesouty:`
* `:billiards:`
* `:billiardslarge:`
* `:whatdidyoudo:`

BIN
pesterchum.ico Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

48
pesterchum.spec Normal file
View file

@ -0,0 +1,48 @@
# -*- mode: python ; coding: utf-8 -*-
block_cipher = None
added_files = [
( "quirks", 'quirks' ),
( "smilies", 'smilies' ),
( "themes", 'themes' ),
( "README.md", '.' ),
( "README-karxi.mkdn", '.' ),
( "README-pesterchum.mkdn", '.' ),
( "themes.txt", '.' ),
( "server.json", '.' ),
( "PCskins.png", '.' ),
( "Pesterchum.png", '.' )
]
a = Analysis(['pesterchum.py'],
binaries=[],
datas=added_files,
hiddenimports=[],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher,
noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
[],
exclude_binaries=True,
name='pesterchum',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
console=True )
coll = COLLECT(exe,
a.binaries,
a.zipfiles,
a.datas,
strip=False,
upx=True,
upx_exclude=[],
name='pesterchum')

View file

@ -1,54 +0,0 @@
"""
This is a setup.py script generated by py2applet
Usage:
python setup.py py2app
"""
from setuptools import setup
from version import lexVersion
APP = ['pesterchum.py']
#DATA_FILES = ['pesterchum.js', 'profiles', 'themes', 'smilies', 'logs']
DATA_FILES = ['quirks', 'themes', 'smilies']
# TODO: Grep this version out of version.py
SHORT_VERSION = lexVersion(True) #'3.41.2B5'
LONG_VERSION = lexVersion() #'3.41.2 Beta 5 Bleeding Edge'
OPTIONS = {
'argv_emulation': False,
'prefer_ppc': True,
'includes': [
'sip',
'PyQt4',
'PyQt4.QtCore',
'PyQt4.QtGui'
],
'excludes': [
'PyQt4.QtDesigner',
'PyQt4.QtNetwork',
'PyQt4.QtOpenGL',
'PyQt4.QtScript',
'PyQt4.QtSql',
'PyQt4.QtTest',
'PyQt4.QtWebKit',
'PyQt4.QtXml',
'PyQt4.phonon'
],
'iconfile': 'trayicon32.icns'
,
'plist': {
'NSHumanReadableCopyright': 'GPL v3',
'CFBundleIdentifier': 'skaianet.Pesterchum',
}
}
setup(
name='Pesterchum',
description='A client for the pesterchum network',
version=LONG_VERSION,
license='GPL v3',
app=APP,
data_files=DATA_FILES,
platforms=['i386', 'x86_64'],
options={'py2app': OPTIONS},
setup_requires=['py2app'],
)

View file

@ -1,52 +0,0 @@
# Windows-only cx_freeze setup file
from cx_Freeze import setup, Executable
import sys
import os
import shutil
from version import _pcVersion
if sys.platform == "win32":
base = "Win32GUI"
build_exe_options = {
"includes": ["requests","urllib"],
'excludes': ['collections.sys',
'collections._sre',
'collections._json',
'collections._locale',
'collections._struct',
'collections.array',
'collections._weakref'],
}
setup(
name = "Pesterchum",
version = str(_pcVersion),
description = "Pesterchum Alt. 2.0 :)",
options = {"build_exe": build_exe_options},
executables = [Executable("pesterchum.py",
base=base,
icon="pesterchum.ico",
),
Executable("pesterchum_debug.py",
base=base,
icon="pesterchum.ico",
)])
#if sys.platform == "win32":
# os.rename("build/exe.win32-2.7", "build/pesterchum")
shutil.copytree("themes", "build/pesterchum/themes")
shutil.copytree("smilies", "build/pesterchum/smilies")
shutil.copytree("quirks", "build/pesterchum/quirks")
#shutil.copy("pesterchum.nsi", "build/pesterchum/")
#shutil.copy("pesterchum-update.nsi", "build/pesterchum/")
#os.mkdir("build/pesterchum/profiles")
#os.mkdir("build/pesterchum/logs")
#Readme & txt
#shutil.copy("README.md", "build/pesterchum/")
#shutil.copy("README-pesterchum.mkdn", "build/pesterchum/")
#shutil.copy("README-karxi.mkdn", "build/pesterchum/")
#shutil.copy("themes.txt", "build/pesterchum/")

474
themes.txt Executable file
View file

@ -0,0 +1,474 @@
HOW TO MAKE YOUR OWN THEMES:
Pesterchum 3.14 themes are very flexible and allow you to create
almost any kind of main window you can imagine (notable exception
being animation). This document should help you make your own themes
or make adjustments to existing themes!
Try following along with existing themes -- it'll make this document
much less confusing!
A note on editing existing themes: Don't edit current themes! If you
make changes in the existing themes directory, they *will* be
overwritten when you install any updates.
CREATING A THEME
----------------
Every theme is just a separate directory in the "themes"
directory. That directory contains all the images used in that theme
as well as a "style.js" file which is the configuration file for the
theme.
FORMAT
------
The theme file is unlike most configuration files. It uses a format
called JSON, which at its core looks like this:
{"option": "value", "option2": 5, "category": {"option1": [10, 50] } }
The idea is that it's basically a list of: "name": "value"
separated by commas, inside brackets. So to give another example:
{"color": "red", "size": 50 }
means "color" is "red, and "size" is 50. Note that strings should have
quotes around them and numbers should not. You can also make certain
values into categories by making the value a bracketed list, like so:
{"memos": {"color": "red", "size": 50}, "convos": {"color": "green", "size": 50 } }
This creates two categories: memos and convos, each with their own
color and size value. Also note that spaces don't really matter. It
helps to indent each category:
{"memos": {"color": "red", "size": 50"},
"convos": {"color": "green", "size": 50" }
}
or even
{"memos": {"color": "red",
"size": 50" },
"convos": {"color": "green",
"size": 50" }
}
SETTINGS
--------
INHERITS: You can make writing themes easier on yourself by using the
"inherits" setting. This sets all the settings to be the same as the
inherited theme unless you change it. So you only need to set the
settings you want to change!
When specifying file locations, you use the term "$path" to represent
the path to the current theme. The program will automatically
subtitute the correct location.
A note about styles:
PC3.14 uses Qt's Stylesheets. That means that there are several
options in the style file that use CSS-like options. Most CSS options
are actually available in these settings. See this page for details
about Qt's stylesheets:
http://doc.qt.nokia.com/latest/stylesheet.html
and here for how CSS works:
http://www.w3schools.com/css/default.asp
If you know CSS, note that there is no cascading or need to type in
tag names. The program does this for you.
CSS values are like this:
background:#000000; font: bold;
with name:value; separated by ";".
NOTE that if you change a style from a theme you inherited, you MUST
put in all the options the old style had if you want to keep them!
I'll go over some of the most commonly used options in styles:
background-color: Self-explanatory. A note, though: colors can be
color names ("black"), standard HTML colors ("#000000") or rgba
(red, green, blue, alpha) values ("rgba(0, 34, 151, 75%)").
background-image: Sets the background image to be this image. You
specify the location of the image by using "url(location)". So it
could be: "url($path/background.png)".
background-repeat: Sets how the background should repeat if the area
is larger than the image. Values are repeat-x, repeat-y, repeat, and
no-repeat.
border: Sets the border of the item. Should be in the form "Xpx style
color". Example: "border: 2px solid black;" See reference for styles.
border-top/right/left/bottom: You can specify values for individual
borders the same way by using these. Example: "border-right: 1px solid
#ffff00;"
border-image: This one is complicated. Basically it's a good way of
having a resizable image with borders. See this page for a good
tutorial: http://www.lrbabe.com/sdoms/borderImage/
border-radius: Set this to a certain pixel length to get a rounded
border. Example: "border-radius: 4px;"
color: The color to make text. Example: "color: #ff0000;"
font: A shortcut. You can specify most different font properties from
this setting. Read on...
font-family: A string representing the font name. Be careful as
everyone's computer may not have the same fonts! Popular fonts like
"Arial" are fine. Example: "font-family: 'Arial';" Don't forget the
quotes!
font-size: A font's size in pixels. Example: "font-size: 12px;"
font-style: Basically italic or not. Example: "font-style: italic;"
font-weight: Basically bold or not. Example: "font-weight: bold;"
margin: Sets the amount of space between this object and other
objects. This is really only useful in memo and conversation
settings. You can set individual margins for right/left/top/bottom
by margin-top/left/right/bottom. Examples: "margin-top: 15px;" "margin:
5px;"
max/min-height/width: Sets the maximum/minimum height/width for something.
padding: Same thing as margin, kinda... basically this sets the space
between the outside of the box and the stuff inside it. See
http://doc.qt.nokia.com/latest/stylesheet-customizing.html#the-box-model
for more detail.
selection-color: The color of the text when an item is
selected. Example: "selection-color: black;"
selection-background-color: The color of the background of an item
when it is selected. Example: "selection-background-color: white;"
text-align: Centers, left-justifies, and right-justifies
text. Example: "text-align: center;"
--------
A note about sizes and coordinates:
Wherever it says "size", Pesterchum expects a value of the form [width,
height], where width and height are NUMBERS. No quotes should be
involved. Example:
"size": [232,280]
Same with coordinates, and with coordinates, they are always the
distance away from the top left corner. So [50, 60] would be 50 pixels
to the right and 60 pixels down.
OK, onto the main event:
MAIN
----
"main": { .... }
This is the section that controls the main chum window.
"style": Sets the style of the main window (as above). This value will
affect other parts of the window. DO NOT put a background image
here. You must set that separately; this is necessary to support
themes that are not square (e.g. gold xl).
"background-image": Sets the background image. This will define the
shape of your pesterchum! This is your canvas! See the included themes
for examples of what background images look like.
"size": The size of the window. Usually this is the same as the size
of your background image.
"icon": The file name of the image you want to appear in the tray and
your taskbar. Example: "icon": "$path/trayicon.png"
"newmsgicon": The file name of the image that will appear in the tray
when you have a new message.
"windowtitle": The title of the window.
"close": Category:
"image": Location of the image of the "X" button.
"loc": The coordinates of the "X" button.
Example:
"close": {"image": "$path/x.png", "loc": [210,2]}
"minimize": Category. Same as "close" but for the minimize button.
"menubar": Category. Contains one element:
"style": Style of the main menubar.
"menu": Category.
"style": Style of each individual menu.
"menuitem": Affects each menu item on the main menu. Usually used
for spacing.
"selected": Style information for when you hover over a menu option.
"loc": Location of the main menubar.
"sounds": Category.
"alertsound": Path to the alert sound. Should be a wav.
"ceasesound": Path to the sound when people cease pestering.
"menus": Category. This is where you change the text of the menus.
"client": Category. The client menu.
"_name": The text for the client menu header.
(These are self explanatory:)
"options"
"memos"
"userlist"
"import"
"reconnect"
"idle"
"exit"
"profile": Category. Profile menu.
"_name": Text of the profile menu header.
"switch"
"color"
"theme"
"block"
"quirks"
"help": Category. Help menu.
"_name": Text of the help menu header
"about"
"rclickchumlist": Category. Text for right click menus.
"pester"
"removechum"
"blockchum"
"addchum"
"unblockchum"
"banuser"
"opuser"
"quirksoff"
"chums": Category. Creates your chumroll, where all the users are. All
of them.
"style": Style for the chumroll
"loc": Location of the chumroll
"size": Size of the chumroll
"userlistcolor": Default text color of the users
"moods": Category. Contains a list of mood icons and colors; when a
user has that mood, their handle will appear with that icon and text
color. Basically follows the form "mood": { "icon": "$path/file.png", "color": "colorname" }
Moods are:
"chummy", "rancorous", "offline", "pleasant", "distraught",
"pranky", "smooth", "mystified", "amazed", "insolent", "bemused",
"ecstatic", "relaxed", "discontent", "devious", "sleek",
"detestful", "mirthful", "manipulative", "vigorous", "perky",
"acceptant", "protective", "blocked"
(Note: blocked is not technically a "mood", but the icon is used
when you block someone.)
"trollslum": Category. The settings for the trollslum.
"style": Style for the trollslum.
"size": Size of the window.
"label": Category. Sets the label of the trollslum.
"style": Style of the label.
"text": The text displayed.
"chumroll": Category.
"style": Sets the style for the list of users.
"mychumhandle": Category. Settings for the text label, the user's
current handle, and color swatch.
"label": Category.
"text": Text of label indicating chumhandle.
"loc": Location of label.
"style": Style of label.
"handle": Category. User's current handle.
"style": Style of handle.
"loc": Location of handle.
"size": Size of handle.
"colorswatch": Category. Color swatch.
"loc": Location of swatch.
"size": Size of swatch.
"text": Text displayed inside swatch.
"currentmood": Location of icon of user's current mood.
"defaultwindow": Category.
"style": Style of the default window. (Quirks, profile changer,
etc)
"addchum": Category. Add chum button.
"style": Style of button.
"pressed": Style of button when pressed down.
"loc": Location of button.
"size": Size of button.
"text": Text of button.
The same attributes apply for these categories:
"pester": Button to pester selected user.
"block": Button to block selected user.
"defaultmood": Default mood of this theme.
"moodlabel": Category. Text label indicating mood buttons.
"style": Style of label.
"loc": Location of label.
"text": Text of label.
"moods": OK this can get complicated. Basically this is a list of
categories, one for each mood button present in the interface. You
make a list like this example:
"moods": [{"style": "", "option": "value"}, {"style": "", "option": "value"}]
The square brackets are important!
Anyway, for each mood, here are the possible settings:
"style": Style of the mood button.
"selected": Style of the mood button when selected.
"loc": Location of the mood button.
"size": Size of the mood button.
"text": Text displayed on the mood button.
"icon": Path to icon displayed on the mood button.
"mood": Mood # of the button. See mood numbers -> mood names index
at the end of this document.
CONVO SECTION
-------------
{"main": { ... },
"convo": { ... }
This controls the conversation windows.
"style": Style of the conversation window. Only affects the main
window; does not cascade to the other parts.
"scrollbar": Category. This item is OPTIONAL. It can be a little
complicated: if you add this item, you MUST specify ALL of the
settings yourself. If you don't add this item, it will use default
system scrollbars. If you are inheriting a theme that does have
scrollbar customization and you want to remove it, enter "scrollbar: null".
Anyway, onto the scrollbar options:
"style": General style of whole scrollbar.
"handle": Style for the handle of the scrollbar.
"downarrow": Style for the down arrow.
"darrowstyle": Generally this is where you set the image of the
down arrow with "image:url($path/downarrow.png)".
"uparrow": Same as down arrow.
"uarrowstyle": Same as darrowstyle but for up arrow.
"margins": Category. Sets the margins around the contents of the
conversation window.
"top": Top margin
"bottom", "left", "right"
"size": Initial size of the conversation window.
"chumlabel": Category. The part that says who youre chatting with.
"style": Style for the chumlabel.
"align": Category.
"h": Horizontal alignment
"v": Vertical alignment
"minheight": The minimum height the chum label can be.
"maxheight": The tallest the chum label can be.
"text": The text of the label. Use $handle to represent the name
of the person you're talking to. Example: ":: $handle ::"
"textarea": Category. The window with the pesterlog in it.
"style": Style of the window.
"input": Category. The place where you type.
"style": Style of the input area.
"tabwindow": Category. The window that holds the tabs.
"style": Style of the window.
"tabs": Category. Style of the tabs in tabbed conversation.
"style": Style of the tabs.
"selectedstyle": Style of the currently selected tabs.
"newmsgcolor": The color the text should turn when you get a new
msg.
"tabstyle": Usually 0. See the Qt Stylesheets for more
information.
"text": Category. Flavor text for system messages. In the following
examples, the text in all caps will be replaced with these values:
"beganpester": "<user> BEGAN PESTERING <you> at <time>"
"ceasepester": "<user> CEASED PESTERING <you> at <time>"
"blocked": "<user> BLOCKED <user>"
"unblocked": "<user> UNBLOCKED <user>"
"blockedmsg": "<user> DID NOT RECEIVE MESSAGE FROM <you>"
"openmemo": "<user> OPENED MEMO ON BOARD <memo>"
"joinmemo": "<user> RESPONDED TO MEMO <memo>"
"closememo": "<user> CEASED RESPONDING TO MEMO"
"kickedmemo": "YOU HAVE BEEN BANNED FROM THIS MEMO!"
"idle": "<user> IS NOW AN IDLE CHUM!"
"systemMsgColor": The color of system messages.
MEMOS SECTION
------------
{"main": { .... }
"convo": { .... }
"memos": { .... }
This controls the memos. It is almost identical to conversations,
with a few additions.
"style": Same as convos.
"size": Same as convos.
"tabs": Same as convos.
"scrollbar": Same as convos.
"label": Same as convos.
"input": Same as convos.
"textarea": Same as convos.
"margins": Same as convos.
"userlist": Category. The list of users currently in the memo.
"width": Width.
"style": Style of the userlist.
"time": Category. The time slider area.
"text": Category.
"width": Width of time text.
"style": Style of time text.
"slider": Category. Time slider.
"style": Style of slider.
"groove": Style of the groove of the slider.
"handle": Style of the handle of the slider.
"buttons": Category. Controls the time buttons.
"style": Style of the buttons.
"arrows": Category. Controls the time arrows.
"left": Path to image of left arrow.
"right" Path to image of right arrow.
"style": Style of arrow boxes.
"systemMsgColor": Color of system messges.
"op": Category.
"icon": Icon that is shown next to the ops of the memo in the userlist.
Number -> Mood List
-------------------
0: "chummy"
1: "rancorous"
2: "offline"
3: "pleasant"
4: "distraught"
5: "pranky"
6: "smooth"
7: "ecstatic"
8: "relaxed"
9: "discontent"
10: "devious"
11: "sleek"
12: "detestful"
13: "mirthful"
14: "manipulative"
15: "vigorous"
16: "perky"
17: "acceptant"
18: "protective"
19: "mystified"
20: "amazed"
21: "insolent"
22: "bemused"