Craig is the voice channel recording bot for Discord with multi-track recording! That means that when Craig records your Discord voice channel, you get a separate audio file for each speaker. You can independently level, cut or otherwise edit each speaker, an invaluable ability for podcasts, let's plays and the like.
No matter how long your recording is, no matter how many speakers are recorded, and even if speakers join late, every audio file delivered will be in perfect sync with each other. You can also use the webapp to record in higher quality than Discord.
You can download your audio even while Craig is still recording, so if you have any concerns, you can always check them out on the fly. Plus, you can set up Craig to automatically upload to Google Drive after the recording's done.
Craig's uptime was quite good before Discord became so overloaded, but if you're concerned with putting all your faith in his server, you don't have to: Invite Craig's evil clone and backup Giarc and you'll be recorded by both bots, from two different parts of the world.
Any user with permission to manage the server can use Craig, or you can set roles with /server-settings access-role and add roles that should be able to manage recordings. Access roles don't need any special permissions.
If you want help or further information on Craig, or just want to say hello, join Craig's discord server. If you're absolutely delighted with Craig, you can become a patron and gain some extra features.
Our community is comprised of Rocket Players from across all parts of the world. Whether you are a casual player looking for reliable players to team with or a hard-core competitive player gunning for an RLCS spot. We have something for you.
Our community offers 1 on 1 coaching, replay analysis, training packs, and a 24-7 run discord community where you can discuss coaching and strategy throughout the day. We coach all levels of players from Bronze up to competitive tournament players. Our coaches consistent of Grand Champions, top 100 players, and active and former professional players. Our philsophy is free rocket league coaching. We want high level coaching to be open to all players in the Rocket league Community. The better the community gets, the better the game becomes.
Special events, in-house scrimmages, giveaways and contests, and of course tournaments! There is always something going on with our discord community that will keep your competitive juices going. Our events and tournaments are casted and streamed professionally by North America and European server members. We host all our tournaments on Smash.gg and cast them on Twitch.
Our content and video blog offers in-depth Rocket League strategy. We house our best content on our site so you have an easy place to refer to it instead of searching through various forums and links. Our articles are in-depth, detailed, and insightful. We aim to become your trusted source for winning and applicable stragety when it comes to Rocket League Competitive play.
Now choose the permissions you want for the bot. Our bot is going to mainly use text messages so we don't need a lot of the permissions. You may need more depending on what you want your bot to do. Be careful with the "Administrator" permission.
You can develop the bot on your local computer with any code editor. However, in this tutorial, we'll be using Repl.it because it will make it simpler for anyone to follow along. Repl.it is an online IDE that you can use in your web browser.
discord.py revolves around the concept of events. An event is something you listen to and then respond to. For example, when a message happens, you will receive an event about it that you can respond to.
When you created your bot user on Discord, you copied a token. Now we are going to create a .env file to store the token. If you are running your code locally, you don't need the .env file. Just replace os.getenv('TOKEN') with the token.
.env files are used for declaring environment variables. On Repl.it, most files you create are visible to anyone but .env files are only visible to you. Other people viewing a public repl will not be able to see the contents of the .env file.
We now have to import the requests module. This module allows our code to make an HTTP request to get data from the API. The API returns JSON, so the json module makes it easier to work with the data returned.
The get_quote() function is pretty straightforward. First, it uses the requests module to request data from the API URL. The API returns a random inspirational quote. This function could easily be rewritten to get quotes from a different API, if the current one stops working.
Next inside the function, we use json.loads() to convert the response from the API to JSON. Through trial and error I figured out how to get the quote from the JSON into the string format I wanted. The quote is returned from the function as a string.
Like before, feel free to add more phrases of your choice to the list. I'm just using three items for now because later we'll add the ability for users to add more encouraging phrases for the bot to use.
Now we need to update our bot to use the two lists we created. First, import the random module because the bot will choose encouraging messages randomly. Add the following line to the import statements at the top of the code: import random.
The bot is completely functional, but now let's make it possible to update the bot right from Discord. A user should be able to add more encouraging messages for the bot to use when it detects a sad word.
Users will be able to add custom encouraging messages for the bot to use directly from the Discord chat. Before we add new commands for the bot, let's create two helper functions that will add custom messages to the database and delete them.
First it checks if "encouragements" is a key in the database. If so, it gets the list of encouragements already in the database, adds the new one to the list, and stores the updated list back in the database under the "encouragements" key.
It gets the list of encouragements from the database stored under the "encouragements" key. If the number of items in the encouragements list is greater than the index, then the list item at that index is deleted.
The first new line of code from above is options = starter_encouragements. We are making a copy of starter_encouragements because we are going to add the user-submitted messages to that list before choosing a random message for the bot to send.
The next new section of code is used to add a new user-submitted message to the database. If a Discord message starts with "$new", then the text after "$new" will be used as a new encouraging message.
The code msg.split("$new ",1)[1] splits off the message from the "$new" command and stores the message in a variable. In that line of code, take note of the space in "$new ". We want everything after the space.
First a new variable called encouragements is initialized as an empty array. The reason for this is that this section of code will send a message with an empty array if the database does not include an "encouragement" key.
If the "encouragement" key is in the database, the index will be split off from the Discord message starting with "$del". Then, the delete_encouragement() function is called passing in the index to delete. The updated list of encouragements is loaded into the encouragements variable, and then the bot sends a message to Discord with the current list.
We create a new key in the database called "responding" and set it to "True". We'll use this to determine if the bot should respond to sad words or not. Since the database is saved even after the program stops running, we only create the new key if it doesn't already exist.
The next new part of the code is that the section that responds to sad words is now inside this if statement: if db["responding"]:. The bot will only respond to sad words if db["responding"] = True. The ability to update this value comes after this next section.
The final new section comes next. This code makes the bot respond to the "$responding" command. This command takes an argument of either "true" or "false". Here is a usage example: "$responding true".
The code first pulls off the argument with value = msg.split("$responding ",1)[1] (like before, note the space in "$responding "). Then there is an if/else statement that appropriately sets the "responding" key in the database and sends a notification message back to Discord. If the argument is anything but "true", the code assumes "false".
There is another way to keep your code running even on the free tier but it is a little more complicated. Repl.it will continue running a web server even after the tab is closed. But even a web server will only run for up to an hour without any use.
In this code, we use Flask to start a web server. The server returns "Hello. I am alive." to anyone who visits it. The server will run on a separate thread from our bot. We won't discuss everything here since the rest is not really relevant to our bot.
Discover the entire list of free cookgroups, look at their websites, their activity on the networks and find the one that suits you. TimeToCop repertories cook groups from many sources like Reddit, Youtube, Twitter, etc. A cook group is a sneakerhead community most often based on discord. The main purpose of a cook group is to facilitate cop rare items during specific drops. A cook group is also very useful to discuss topics such as reselling in general, trends and future drops !