- Supports poly relationships.
- Modern & Minimalistic
- Made for speed
Unionize has been written using the latest version of the sern bot framework. I've been a supporter of this framework for years and I highly recommend them for your next bot.
Unionize runs 2 databases consecutively for different purposes. Neo4j is used to store relationships between users and MongoDB is used for everything else.
Modules will never access the N4j client directly and therefor never handle or use cypher. All commands use the models created for them (N4jUser, N4jGuild, etc) or interact with the data interpreter.
Our use of MongoDB is less strict due to its already strong model like ecosystem. This allows commands to interact with the DB via these models.
Family trees can be viewed with the /tree
command. At the point of writing this, this command uses graphviz to render a pretty bad looking but great functionality graph. In future this will use D3 and a headless browser and look something like:
Unionize uses semantic versioning along with pre release labels. The format is followed:
{flag}-{major}.{minor}.{hotfix}
Version Name | Flag | Description |
---|---|---|
stable |
s |
Fully tested and production-ready release. |
alpha |
a |
Early development version, unstable and may contain breaking changes. |
beta |
b |
Feature-complete but may still contain bugs. |
release candidate |
rc |
Nearly stable but requires final testing. |
The lifetime of a proposal will work as followed:
graph TD;
proposalCreated(Proposal created)
proposalDenied(Proposal is auto-denied)
proposalDeleted(Proposal deleted)
proposalCreated-->|Wait 48hrs|isResponse{{Has there been a response?}}
isResponse-->yes & no
yes-->|Wait 48 hrs|proposalDeleted
no-->proposalDenied
proposalDenied-->|Wait 48 hrs|proposalDeleted
Use this table to understand what IL correlates to what relationships. Keep in mind only premium users can modify their IL.
IL Level | Allowed Relationships | Examples |
---|---|---|
0 (Strict) | No relatives at all | Only completely unrelated people can marry |
1 | Distant cousins (8th+ cousin, removed) | "8th cousin 2 times removed" |
2 | Moderate cousins (5th+ cousin) | "5th cousin" , "5th cousin 1 time removed" |
3 | Close cousins (3rd+ cousin) | "3rd cousin" , "4th cousin" |
4 | First cousins allowed | "1st cousin" |
5 | Sibling of spouse, grandnieces/nephews | "niece/nephew" , "aunt/uncle" |
6 | Siblings allowed | "sibling" |
7 | Parent-child, grandparent-grandchild allowed | "parent" , "grandparent" |
These are ideas and planned features that are likely to be implemented but are not yet confirmed.
-
Convert predefined Cypher files into dynamically generated Cypher queries in JavaScript.
- Allows more flexible queries without needing to specify
ON CREATE
parameters every time. - Improves performance and adaptability.
- Allows more flexible queries without needing to specify
-
Future command execution should prioritize models over the Neo4j Data Interpreter:
- A refined plugin should create models for the user executing the command.
- These models will be accessible via state and have methods for easier data interaction.
- Reduces dependency on direct database queries.
-
Love Levels
- Users will have love levels with anyone they are related to (directly or indirectly).
- Love levels will be stored in a MongoDB collection.
- Some interact commands may be partner-only.
- Love Level Decay:
- Love levels slowly decrease over time.
- Decay rate can be customized (
/set-decay-rate
)โpotentially a premium feature.
- Love levels will affect certain commands (e.g.,
/kiss
animations change based on love level).
-
Memory Book / Relationship Milestones
- Keeps track of key events like:
- First kisses ๐
- Adoptions ๐ก
- Marriage anniversaries ๐
- This could be a premium-only feature.
- Keeps track of key events like:
-
Memories Feature (like Facebook Memories?)
- Sends reminders like:
"It's your 3-month anniversary!"
๐"You've been married for 6 months!"
๐ฅณ- Or a command
/relation-length
that checks how long you've had a relationship with a specified user.- Changes response or adds different emojis dependant on the relation.
- Could be sent via DMs or appear when using relevant commands.
- Possibly a premium-only feature.
- Sends reminders like:
-
Daily Challenges
- Example:
"Hug 3 members in your tree today!"
- Completing challenges could increase love level or earn bonus rewards.
- Example:
- Introduce seasonal or limited-time events:
- ๐ Halloween:
/carve-pumpkin
- ๐ Christmas:
/decorate-tree
- ๐ Valentineโs Day: Love level boosts
- These events could boost love levels and encourage user engagement.
- ๐ Halloween:
- Implement cooldowns on certain commands.
- Determine if premium features should be per-user or per-guild.
- If per-guild, admins could use
/set-decay-rate
for global settings.
- If per-guild, admins could use
- Higher traversal depth for family trees.
- Lower decay rate for love levels.
- Exclusive seasonal events and memories.
- Remove the language manager from global namespace.