**Welcome to Community Channels!**
This bot creates a meta-servers within your server, giving users the ability to autonomously create, access, and modify their own personal channels.
*Note, these screenshots are using a themed version that replicate the early beginnings of the internet.*
Similarly to Discord, *Community Channels* focuses on the idea of community. This includes features such as a [Channel Index](#channel-index), [Random Events](#random-events), and more.
The possibilites with this bot are nearly limitless, users can sub-channels (that essentially work as sub-communities) in larger servers. This is especially true since in order to join these channels, you need to either be personally invited by the creator of the channel (or a moderator assigned by the creator), or join through the channel index.
You can see the list of channels users have created just in a single server below. I really can't talk about everything this bot has to offer just in a single post since there are so many features. If you have any questions feel free to post a comment. Alternatively, you can host the bot yourself!
**Please scroll past this if you're not interested... There is more content below!**
**| Category | `Command` | Description |**
| User | **`~join #`** | Join a channel using the channel index. (Can be found in the **Channel Index**)
| User | **`~leave #`** | Leave a channel using the channel index. (Can be found in the **Channel Index**)
| User | **`~moderators`** | Lists the moderators of the channel you are currently in.
| User | **`~permissions`** | Lists your permissions in the current channel, it's either none (normal user), some (channel moderator), or all (channel creator).
| Channel Creator | **`~create`** | Creates your own personal channel! Automatically assigns you as the sole owner.
| Channel Creator | **`~purge #`** | Purges # amount of messages in channels where you are the owner.
| Channel Creator | **`~remove <@user>`** | Kicks a user out of your channel.
| Channel Creator | **`~pin <messageID>`** | Pins a specific message to the channel.
| Channel Creator | **`~unpin <messageID`** | Unpins a specific message to the channel.
| Channel Creator | **`~setPublic [true | false] [official]`** | Lists a channel in the **Channel Index**. Uses a boolean value, true or false. Additionally, if you are an administrator you can add **`official`** to the end of it and it will show up under a separate category.
| Channel Creator | **`~addMod <@user>`** | Assigns a user as the moderator for the current channel. This gives the moderator the same permissions as the channel owner/creator.
| Channel Creator | **`~removeMod <@user>`** | Removes a user's moderator status and permissions.
| Channel Creator | **`~inviteLink`** | Creates a custom Discord invite URL that automatically adds the user to the channel. You can see how this works by scrolling down a bit.
| Channel Creator | **`~channelName <name>`** | Sets the name of the current channel.
| Channel Creator | **`~channelDesc <description>`** | Sets the description of the current channel.
| Channel Creator | **`~nsfw [ true | false ]`** | Sets the NSFW status of the channel to true or false.
| Admin | **`~create [@user]`** | Creates a new channel, if you supply a user it automatically assigns them as the owner.
| Admin | **`~assign <@user>`** | Assigns the owner of a channel, used when the original owner leaves and someone else wants to take control, or when you want to assign a channel to someone.
| Admin | **`~autoDelete <#channel>`** | Automatically deletes all incoming messages in a channel. Used for the channel index to delete the **`~join`** & **`~leave`** messages.
| Admin | **`~channelList`** | Creates the **Channel Index**, otherwise links to it if it's already created.
| Admin | **`~channelKey <key>`** | Assigns **custom join keys** for the specified channel. Can be used as codes to gain access to secret channels. Can be used by **`~join <key>`**.
| General | **`~cmdCount`** | Displays how many times certain commands have been run.
| General | **`~channel`** / **`~help`** | Displays a list of commands, and general information.
| General | **`~stats`** | Displays the statistics for the bot.
| General | **`~invite`** | Displays the invite URL for the bot.
#### Channel Index
*This version has been themed as a search engine for websites.*
You can see all of the user-created content that the bot displays in an embed, for easy access and sharability.
By default, users **aren't given access to any channels** (you wouldn't want your sidebar filled with channels when you join), which means they have to join the ones they're interested in using the command **`~join #`**. They can also leave these channels by typing **`~leave #`**. Alternatively, they can be invited to channels, especially useful if the channel is private.
**1st** - Showing how every user created & managed channel is joinable
**2nd & 3rd** - Showing all of the channels created by users
#### Creating Channels
This is what the bot is all about, creating, sharing, and modifying channels just for you. There are primarily three types of channels that can be created: public, private, or official.
**Private** - The owner of the channel can run the **`~invite <userName>`** command to invite a user into their channel. The inviter user will then have full view/msg access in the channel.
**Public** - This means the channel will show up on the **Channel Index** shown above, the command to place it there is **`~setPublic true`**, you can also take it off by running **`~setPublic false`**. After this, any user can join using the same method as show above in the previous example (**`~join #`**).
**Official** - These are only creatable by administrators to the server, they will show up under a separate category *(as seen 2 images above)*. They're most commonly used for official opt-in channels, such as a #self-promotion channel, events, and more. Basically, they're used as official channels.
Let's get into creating channels! This can be done very simply by doing **`~create`**. Yep, it's that simple.
After you create your channel, you'll be greeted with a initial message saying how to utilize this new channel (as seen in the 2nd image). Thse commands include **`~help`** to display the general help command & **`~invite <userName>`** to invite users (if you choose to remain a private channel). Additionally, you can see the two commands **`~channelDesc`** & **`~channelName`**, these commands work exactly as expected. Remember, you don't want to give random people permissions on your server, so you don't need to! The bot has special commands only the owners and channel moderators (assigned by the owner) can run.
**1st** - Creating the channel
**2nd** - What you see in the newly created channel
*Note, that the bot is themed as the internet for these examples.*
#### Direct Channel Invites
You can create custom Discord invite URLs that will automatically add a user to your channel when you use it. This is useful if you want to directly invite your friends to your personal channels, without needing to use **`~invite`**. The command to create or view the invite URL is **`~inviteLink`**.
Some bot developers are interested in how this works, since the API doesn't say who's invite URL someone used. First, the bot caches (stores in a database) all of the server's invite URLs, and sets how many times each invite has been used. Then, when someone joins it checks if any of the cached uses are different than the fetched uses. If one of the counts in the fetched uses is higher than the cached version, then it means that the specific invite was used.
**1st** - Creating the invite URL
**2nd** - The invite URL being used (a notification is shown in the channel), and the uses counter going up when `~inviteLink` is run.
#### Channel Moderators
I know you can't always be there for your channel, which is why you need moderators! You can assign moderators for your channel using the command **`~addMod <@user>`** and remove them using **`~removeMod <@user>`**.
Moderators have essentially the same permissions as the normal channel owner/creator.
**1st** - Assigning & removing an owner
#### Hidden Secrets!
Community channels has a hidden feature that allows for secret codes to be entered in **`~join <index>`** instead of an index number as normal. This has a wide range of uses, only want people who are signed up to your website to have access? Tell them the secret code! You can even give out a secret code every time they beat a new level in your video game, meaning only the people who beat that level have access to the code, and therefore access to the channel.
Here is an example: I created a channel, and assigned the channel the code **`lightbulb`** using **`~channelKey lightbulb`**. Now, I need to hide the key so only people who find the key **`lightbulb`** can join the channel.
Let's assume that someone found the key we hid, here is a gif of them joining the channel:
#### Custom Icons & Usernames
This bot utilizes a Discord feature called **Webhooks**, which allows for custom icons, and usernames. Well, in light of this amazing idea, I created a package that lets you set a custom icon & username to any message ([quick.hook](https://www.npmjs.com/package/quick.hook))!
The use of this feature creates a more immersive feeling, as the messages don't just come from one place!
**1st** - Channel name & description being set with custom responses
**2nd** - Channel listing being created & removed with custom responses
#### Random Events
Continuing with the theme of the early internet, we can't forget about popups! These are triggered when users type any of the hidden words.
In addition to being a popup, they are interactable! You can click on the any of the 'CLAIM NOW' buttons ~~to add your name to a database~~ it doesn't actually do anything besides say something in chat.
**1st** - Showing the popup, and how you can interact with it.
Thank you for making it to the end! **There are a lot more features to this bot than what I showed above**, but it's already a lot of text, and also the first time I've ever described a portion of my bot in detail.
If you'd like to check out how the bot is being used in some servers or have any questions for me, feel free to send me a message on Discord (@TrueXPixels#5083) or post a comment below!