- Fixed a bug in which both queries of the
removepermission
andsetpermission
commands would error when the user answer
This patch address in a long-term way bugs that have been hot-fixed after the release of the update 4.4.14
- Back-log the necessary data to build a leaderboard to Redis instead of iterating through the whole database
- Fix the track positions displayed in the
queue
command being incorrect - Numerous small fixes
This update contains a lot of necessary back-end changes which is why it took so long, but also contains quite a few new features
- Changes within the
music
category
The music feature is now available to ~half of the servers Felix is on and to all donators as a public beta to see how much load it puts on the servers
-
- Added the
removesong
command, allowing you to remove the specified song from the queue
- Added the
-
- Added the
forceskipto
command which allows you to bypass the votes of theskipto
command
- Added the
-
- Added the
saveplaylist
command, using it saves the current queue into your personal playlists so you can load them back later
- Added the
-
- Added the
seeplaylists
command which allows you to see your personal playlists
- Added the
-
- Added a way to load personal playlists into the current queue with the
addplaylist
command
- Added a way to load personal playlists into the current queue with the
-
- Added the donator-only
setvolume
command, this command will probably stay donator-only as it make the music servers re-encode the song
- Added the donator-only
-
- Added pagination to the
queue
command to be able to see the whole queue
- Added pagination to the
- Changes within the
utility
category
-
- The
whatanime
command now resize and convert the given image if necessary, and you can now input direct links to image instead of only uploading
- The
-
- Updated the
mdn
command to make it display all results in the first page
- Updated the
- Changes within the
misc
category
-
- The
rank
command has been moved from thefun
category to themisc
category
- The
-
- Added the
setrankbg
command, allowing you to set a custom background for therank
command
- Added the
-
- Sadly the
local
option in theleaderboard
command for thecoins
andlove
leaderboards was removed due to the fact that the users database is not entirely cached anymore
- Sadly the
- Changes within the
fun
category
-
- The
rank
command has been moved from thefun
category to themisc
category
- The
- Changes within the
generic
category
-
- The
sinfo
,avatar
,uinfo
andinvite
commands now have a new look
- The
As we're trying to make commands look better, some commands now use custom emotes, this is still very experimental because i have no clue how to make it look good but i hope you all appreciate the changes
By the way, my vacations will soon be over so i won't be able to spend as much time as before, though i'll still try to do my best <3
While this update contains a lot of back-end changes in preparation of the future, next update should mainly contain new commands and features, please look forward to it ^
- Fixed a bug that would under very specific conditions changes the saved custom farewells and greetings message
- Fixed the channels search being case-sensitive while it shouldn't
- Fixed a bug in the
removepermission
command that would cause a non-critical error if you removed the last permission set on a permission group
- Added the
whatanime
command in theutility
category. This command lets you search from what anime a given image is by using whatanime.ga - Added a
*
permission, allowing you to allow or restrict all commands at once for the specified target. With that new permission comes a newcategory
target, so you can now apply permissions to channel categories, letting you setup your permissions even faster. You can read more about these new features here
- Lots of small changes not worth mentioning
- Implemented Shoukaku, this service is currently only used by the
whatanime
command but will progressively be used by more and more features
As of update 4.3.12, Commits won't be tracked in the changelog anymore. Refer to the pull request corresponding to the update to see the commits
- Address a bug that would cause the
simulategreetings
command to fail if the greetings are set to dm
- [9ca552] - Prevent simulategreetings from erroring if greetings are set to dm
- Address a weird bug in which a channel permission overwrite wouldn't be a user nor a role, thus causing an error during the message's initial processing
- [f9386c] - Address issue #45
The highlights of this update are the introduction of unstackable/incompatible self-assignable roles about which you can learn more here and the new database wrapper. The new database wrapper was initiated by the patch 4.1.5 which was a direct response to the incident that happened the 30/06/2018. This change makes Felix able to silently handle critical database failures, like disconnections or corrupted database, without spamming error messages or being unresponsive
- Updated the
sar
,iam
andiamnot
commands to implement incompatible self-assignable roles
- Releases are now tracked on Sentry to track down the source of potential issues faster
- Added partial typings and tests cover; The cover will be completed in further updates
- Rewrote the database wrapper from scratch
- Removed the possibility to specify negative values in the
give
command, as it was effectively stealing coins from other users (Note: Due to the severity of this issue, this change has bypassed the development cycle and has been introduced right after the bug was reported)
- [e6b35d] - Track releases on Sentry
- [786af6] - Merge pull request #32 from ParadoxalCorp/JSDoc-update (25 commits)
- [c285a8] - Prevent negative values in give
- [a9f4d6] - Identify the error after its conversion
- [35892c] - Implement the new database wrapper
- [7bd50a] - Switch from jest to mocha for tests
- [e1c40c] - Attempt to make tests successful regardless of the OS
- [c69020] - Followup of e1c40c
- [164d7b] - Only execute ready() once
- [daeaae] - Followup of 164d7b
- [6bf4cd] - Update commands that were using the database cache
- [dc1492] - Implement unstackable self-assignable roles
- [64fab8] - Fix several mistakes in the rank command
- Fixed a bug where some image-generation commands would fail if the user had no avatar
- Fixed a bug where the daily cooldown wouldn't be added if a random event occurred
- [eb3558] - Fix daily cooldown not always being added
- Fixed a bug in the clear command that was meant to be patched with the
4.1.3
patch but was incorrectly done
- [b57cc3] - Patch 4.1.8
- Fixed a bug that would allow setting voice channels as greetings and farewells target (#33)
- Fixed the behavior of multiple commands that were causing errors if a wrong number of arguments was provided
- Changed multiple small things to fix Felix's behavior when the database goes down in direct response to the incidents report below
- The 30/06/18 at 8:42:37 AM (UTC): The database went down
While Felix was supposed to handle it, due to a misconfiguration, an unwanted instance of the database started which confused Felix as it wasn't setup properly. As a result, Felix thought the database was up and still tried to interact with it, causing errors whenever someone posted a message. This continued until 8:51:54 AM (UTC), where Felix ran into a critical error that took it down.
- At 10:23 AM (UTC) the issue was discovered by me, who just woke up
- At 10:44 AM (UTC) after investigating what happened, Felix was confirmed to be back up as well as the database
- Fixed a bug where searching animes with the
anime
command that have special characters in their titles would result in an error
- Added the
avatar
command in thegeneric
category - Added the
triggered_gen
command under theimage-generation
sub-category of theimage
category - Added the
rank
command in thefun
category - Added the
skipto
command in themusic
category
- Fixed a bug where using the
iam
andiamnot
on a self-assignable role higher than Felix's highest role would cause an error instead of returning a missing permissions message - Fixed a bug where using the
help
command with the--dm
parameter would cause an error if the user DMs are disabled - Fixed a bug where if the success message after using the
clear
command was deleted before the automatic deletion an error would occur
- Implemented
Redis
- Rewrote entirely the music feature to have it working better and use redis
- Restricted the
udefine
command to NSFW channels, as it actually make sense
- Fixed a bug where providing an invalid language ISO wouldn't abort the command and cause an error
- Fixed a bug where the
%USERTAG%
tag would beundefined
in greetings and farewells - Fixed a bug where having too much roles would break the
uinfo
command - Fixed an internal command parsing bug
Hoi, Felix didn't received any updates during the last 3 months, for the simple reason that the 4.0.0 was being worked on. So how about we just make official that Felix won't receive any update besides a major update every 6 months :^)
Jokes aside, this update change pretty much everything, so get ready.
- Multi-threaded Felix, the
eris-sharder
module handles most of it - Rewrote everything, added better support for self-hosting, and ensured scalability
- Switched from leveldb to RethinkDB
- Better API keys and modules checks
- Dynamic database unavailability handling
- Actual Discord permissions checks introduced and better arguments parsing
- Implemented more weeb.sh features (image-gen) and added the
Taihou
wrapper, which covers all weeb.sh services, to be able to implement new services faster - Added support for Lavalink
- Implemented rewards for donators
- Decreased the matching possibilities of the roles, users and channels search to allow for far greater accuracy (planned to be improved)
- Discontinued support for the API
- Removed most of the moderation features: kick, ban, softban, mute, automatic invite filtering and such (see migrating from v3)
- Added music commands, only available to servers on which premium status is enabled
- Reworked entirely the economy:
-
- Economy commands now have their own categories
-
- The
slots
has been improved, random events have been added, chances of getting a draw have been drastically reduced
- The
-
- Added random events to
daily
- Added random events to
-
- Added the
inventory
command which display the items you own
- Added the
-
- Removed the
rps
command
- Removed the
-
- Added more items to the
market
command
- Added more items to the
-
- Added the
navalbase
command which is related to a specific set of items in the market
- Added the
-
- Added the
transactions
command to see your latest transactions
- Added the
-
- Renamed the
transfer
command togive
- Renamed the
-
- Overall changes: Added random events which can be prevented by buying specific items
- Changes within the
fun
category:
-
- Moved all economy commands from the
fun
category to theeconomy
category
- Moved all economy commands from the
-
- The choose command no longer takes
|
as a valid separating character, as this character is now used to separate args in all commands
- The choose command no longer takes
-
- The
udefine
command has been improved to be slightly faster
- The
- Changes within the
generic
category:
-
- The
help
command now outputs by default an embed
- The
-
- Enhanced the
uinfo
command for it to look cleaner
- Enhanced the
-
- Added the
redeem
command to redeem keys given to donators
- Added the
-
- Improved a bit the speed of all other commands
- Changes within the
image
category:
-
- The
image
category is now split into three sub-categories:images
,image-generation
andinteractions
. Though it doesn't change how you use them
- The
-
- Added the
loveship
andshitwaifu
commands asimage-generation
commands
- Added the
-
- Made the
cuddle
,hug
,kiss
,lick
,pat
,poke
,slap
andtickle
commandsinteractions
commands (more can become interactions later)
- Made the
-
- Highly improved the back-end for
images
commands to even the load on the weeb.sh servers
- Highly improved the back-end for
- Changes within the
misc
category:
-
- Enhanced
iam
andiamnot
to display the listed roles color on the embed borders
- Enhanced
-
- The
leaderboard
command doesn't use reactions anymore to address a bug of Discord which would corrupt the embed output
- The
- Changes within the
moderation
category:
-
- Removed the
assign
,ban
,hackban
,kick
,modconfig
,modlog
,module
,mute
,reason
,revoke
,seewarns
,softban
,unban
,unmute
andwarn
commands (see migrating from v3)
- Removed the
-
- Improved the
clear
command to use the cache if possible, resulting in faster execution
- Improved the
-
- The
getpermissions
command now shows a cleaner embed and send permissions in a text file if the discord 1024 characters limit is reached
- The
-
- Apart from that, the permissions system has been greatly improved but how it works didn't changed much, except that roles are handled better now
- Changes within the
music
category
-
- Brand new
music
category available to servers on which donators redeemed a key
- Brand new
-
- Added the
play
command which play the song at the given URL (youtube, soundcloud, twitch channel or even direct URLs to a file), or perform a search if a search term is given instead of an URL
- Added the
-
- Added the
queue
command which works exactly like theplay
command, but instead of playing the song directly, it pushes it to the queue. It also display the current queue if no arguments are given
- Added the
-
- Added the
playafter
command, works exactly likeplay
but push the song in the queue at the first position, whilequeue
pushes it at the last position
- Added the
-
- Added the
nowplaying
command which output information about the currently playing song
- Added the
-
- Added the
pause
command which pause or resume the playback according to whether it is already paused or not
- Added the
-
- Added the
repeat
command which allows you to toggle the repeat for the current song, the queue or just turn off the repeat
- Added the
-
- Added the
shuffle
command which shuffles the queue
- Added the
-
- Added the
skip
command which starts a vote to skip the currently playing song
- Added the
-
- Added the
forceskip
command which skip the currently playing song without vote (restricted by default)
- Added the
-
- Added the
clearqueue
command which clears the queue
- Added the
-
- Added the
addplaylist
command which adds the YouTube playlist at the given URL to the queue
- Added the
-
- Added the
leave
command which is quite self-explanatory
- Added the
- Changes within the
settings
category
-
- Added the
simulatefarewells
command
- Added the
-
- Added an option to the
setprefix
command to set the prefix with a space or not
- Added an option to the
-
- The
experience
,onjoinroles
,sar
,setfarewells
andsetgreetings
commands now checks the permissions Felix have and warn the user if Felix lacks permissions
- The
- Changes within the
utility
category
-
- Removed the
manga
command, as it can't work without MAL's API, which is down for 3 weeks already, work to rewrite and rely on another service will begin as soon as pobbile
- Removed the
If you used the moderation feature of Felix, im sad to announce that all support for it has been discontinued. The moderation feature was the most time-consuming for me, and the Discord API for the moderation is simply horrible, causing bugs to happen frequently. Working on it was a pain to me, and for all these reasons, i decided to simply discontinue it and focus elsewhere.
The least i can do is to at least give you alternatives, that i personally ensured are better than Felix's dead moderation feature:
- Ported Felix to Eris, is now auto-sharded
- Rewrote the whole structure from scratch
- Selfhosting has been made way easier
- Added starboard
- Improved the experience system
- Removed the
animeseason
command since it was never used - Added a cooldown system
- Balanced economy
- Reworked the market and added a new item
- Made the role search, user search, channel search and guild search smarter
- Added a way to "disable" modules
- Added the
translate
command - Added a brand new moderation system: -modlog channel for logging -audit log integration -mute -ban -softban -kick
- A lot of small changes, fixes and improvements that i can't list since we're actually at ~400 changed files
- Also, removed tags. Sorry for all those who liked them, it was not really widely used
- Now instead of requiring a local custom version of the api wrapper(now eris), Felix requires the live and then overwrite the needed files
- Renamed the
modules
folder toutil
which now has the following folders that follows the following logic:
extendedClasses
folder which contains the Eris customized stuff that will be used instead of Eris's onehelpers
folder which contains a bunch of utility methods and script that Felix needs to work properlymodules
folder which contains a few custom/handmade modules that can run out of Felix's environnement without any changesshortcuts
folder which contains commands shortcuts
- Kinda made a production version of Felix's API, more info in
./docs/endpoints
and on the docs of thefelix-wrapper
npm module - Commands are now classes, doesn't change anything but is to prepare for future updates
- Commands are not anymore all in the same folder, they're now in their respective categories folder, that makes it easier to sort them but also makes possible the renaming of most categories(theoretically all besides admin) without breaking felix (just breaks default permissions)
- Added
rps
, basic game but another way to win some points ^ - You can now use partial types name in the
image
command
- Fixed a lot of grammar
- Fixed negative values possible in games as well as in transfer which was giving you the possibility to litterally get endless points
- Fixed greetings and farewell error catch which means now the
Status
thing is finally working
slots
now is a bit kinder when you lose, there is less chances to lose more than what you gambledt
is now a command, still only run tags, but now as a help, i guess shrug- Now if you edit your last message to a command, like if you made a typo, it will work owo
- Fixed
animeseason
not updating the list directly after a new search - Fixed some grammar
- Moved
malsearch.js
to the newmodules
folder inside themodules
folder modulesception - Deleted
tagHandler.js
since thet
command replace it - Added
logger.js
byAetheryx#2222
to the custom modules - Improved
getUserResolvable.js
, search is now smarter, however, global search still shouldn't be used atm - Removed logs to the console in
loadReminders.js
andupdateDatabase.js
- Added the event
messageUpdate.js
which emit a new message event if the edited message is the latest of the user - Added draft logs to the
ready.js
event - Added a custom modules loader and draft logs in the core
- Added
transfer
- Added back
urban
,animeseason
,npm
,mdn
andinvite
- Fixed the pageResults() module and all its dependents
- Fixed love not working correctly when using an id as user resolvable
mdn
Updated to the 2.0 structure, works like the old one.npm
Updated to the 2.0 structure, works like the old one.
- Fixed commands not working in direct messages
This changelog contains all changes, including the backend stuff for later references, The actual notable parts are the commands and bugs fixes
v2 panel system
refer to interactive commands working with reactions
Things marked with ** are planned to change before the official release or soon after
Things marked with *** might change before the official release or soon after
help
Shortenedmiscellaneous
tomisc
, also updates every trigger againuinfo
Removed data which were available by clicking on the user profile, also filter according to users privacy settingsbot
New optional upvoters fields, memory usage calcul fixedafk
A small change in how to use it and now allows you to set your afk status to 'nothing'account
Now uses v2 panel system and has more options regarding data privacychangelog
Nothing really changed
awoo
Output is now in an embedcry
Output is now an embed and limited to gifscuddle
Output is now an embed and limited to gifs, doesn't need mentions to find users anymorehug
Output is now an embed and limited to gifs, doesn't need mentions to find users anymorekiss
Output is now an embed and limited to gifs, doesn't need mentions to find users anymoreslap
Output is now an embed and limited to gifs, doesn't need mentions to find users anymoreimage
Performances improvement, is now fasterkaren
Nothing changedpunch
New command, doesn't need mentions to find users, is not working with weeb.sh
iam
Now uses v2 panel system for the list ***iamnot
Now uses v2 panel system for the list ***leaderboard
Now uses the v2 panel system and now has a global/local leaderboard of points and love as welltags
Now uses v2 panel system, is the formeredittag
,addtag
anddeletetag
commands all-in-onetagslist
Now uses v2 panel system, is the formertagslit
andtaginfo
commands all-in-onemarket
New command, uses v2 panel system, you can buy stuff like additional love points here
anime
Some improvements regarding speed, fields are now dynamics which means if there is no data, the field wont be displayed anymoremanga
Some improvements regarding speed, fields are now dynamics which means if there is no data, the field wont be displayed anymore
setgreetings
Now uses v2 panel system, support 2 more flags, fixes a few bugssetfarewell
Same thansetgreetings
setprefix
Now has a 8 characters limit and doesnt accept multiple words anymoreselfrole
Formerlyautorole
, now uses the v2 panel systemonjoinrole
Now allow up to 5 roles and uses the v2 panel systemexperience
Formerlylevelsystem
, now uses the v2 panel system
love
Doesn't need mentions anymore, can love multiple users and give multiple LPs to one userslots
New command, currently the only game where you can win creditsdaily
New commands, gives you 500 points every 24h that you can gamble withslots
or use in the market
getlevel
Now uses the v2 panel system for the whole list and user search is not-anymore limited to mentionsremovelevel
User search is not anymore limited to mentionssetlevel
User search is not anymore limited to mentionsclear
New command, currently has the two combinable bots and specified users filtersettings
New command which use the v2 panel system to manage some of the felix-related server settings(mostly data privacy)announce
Now has a mention option
eval
Output is now an embed and contains both input and output in JS codeblocksmaintenance
New command, set Felix's status to dnd and ignore all users besides the ownerblacklist
Can now blacklist and unblacklist multiple users, also, doesnt need only the id anymorereload
Reload commands and can 'add' commands to the commands collection as well, still need the exact nameruninfo
New command with way more detailled data thanbot
guildsettings
New command, a easier way to fix guilds which fucked up with the settings, shouldn't be needed with the new fixes thopostupdate
Nothing really changedsetversion
Nothing really changedcmdstats
New command, display overall commands categories usage and commands usage
trivia
animeseason
invite
mdn
npm
urban
Commands marked with * might be added back later
cardsearch
feedback
maluser
*animelist
*remind
*
- @Felix prefix or @Felix help doesn't work if Felix has a nickname
Fixed
- Setting the prefix to
beep beep
or any multi-words stuff breaks Felix
Fixed
- Setting the dm greetings with a relatively long message doesn't work
Fixed
- Felix happen to not answer to some commands but still answer to ping
Usually happen because the output exceed the Discord characters limit, should be fixed, also output 'An error occured' now
Now diving into backend stuff, and there's a lot, a real lot of things that changed
message
Has been splitted into 5 parts: Themessage
event which basically handle the first checks, like if the user is in the database, and the 4expHandler
,commandHandler
,tagHandler
andpermissionsChecker
handlersready
Has now a way more important role, it launch the various external services (discord bot list, weeb.sh) updates interval if not self-hosted and change the game status every 60 seconds with a random upvoterguildCreate
andguildDelete
now have a lighter role, if not selfhosted, they both send a notification to the support server and request a discord bot list server count updateguildMemberAdd
andguildMemberRemove
both got updated to the new featurescommandFail
New custom event, emitted whenever a command fail, try to send 'An error occured' as a reply, log the error and send it to sentry
New modules, promisified stuff, the followings are more docs than actual changelogs, but its up to date
Note: In each example, the client
parameter is not in but still needed, usually provided on bot launch when the requirement is done
Second note: Messages related modules might extends the message object in future releases, but currently, all modules are properties of the client
object
findReminder(userId, reminderId)
*** May be deleted due to the unsure future of the reminder feature
Meant to avoid the database caching
Returns: {Number} - The reminder's array position
Call example:
client.findReminder('242408724923154435', 944552565);
Response structure:
0
loadReminders()
*** May be deleted due to the unsure future of the reminder feature
Made to load reminders after a restart
Returns: {Object} - An object containing the restarted and deleted reminders count
Call example:
client.loadReminders();
Response structure:
{
remindersRestarted: 0,
remindersDeleted: 0
}
getPermissionsLevel(guildId, id)
** Will be improved in further updates, but no outputs or call change planned
Made to reduce the needed code to check a thing permission level
Returns: {Number} - The level of the thing
Call example:
client.getPermissionsLevel('328842643746324481', '140149699486154753');
Response structure:
0
getUserResolvable(message, options)
** Will be improved in further updates
Powerful function to resolve ids, usernames, case-insenstive names or even partial usernames to users
Returns: {Collection<Id, User>} - A collection of resolved users objects mapped by their ID
Call example:
await client.getUserResolvable(message, {
guildOnly: true //Optional, default is false
}
Response structure:
{Collection<Id, User>}
getGuildResolvable(message, options)
** Options will be added in further updates
Same than getUserResolvable
Returns: {Collection<Id, Guild} - A collection of resolved guilds objects mapped by their ID
Call example:
await client.getGuildResolvable(message);
Response structure:
{Collection<Id, Guild>}
getRoleResolvable(message, options)
Same than getUserResolvable
Returns: {Collection<Id, Role} - A collection of resolved roles objects mapped by their ID
Call example:
await client.getRoleResolvable(message, {
charLimit: 5 //Optional, the characters count needed for a word to be included in the search, default is 3,
shift: true //Optional, whether or not the first word should be removed, default is false
});
Response structure:
{Collection<Id, Role>}
getChannelResolvable(message, options)
Same than getUserResolvable
Returns: {Collection<Id, Channel} - A collection of resolved channels objects mapped by their ID
Call example:
await client.getChannelResolvable(message, {
charLimit: 5 //Optional, the characters count needed for a word to be included in the search, default is 3,
shift: true //Optional, whether or not the first word should be removed, default is false
});
Response structure:
{Collection<Id, Channel>}
getLevelDetails(level, exp)
Returns: {Object} - An object containing detailled data regarding the level and exp provided
Call example:
client.handlers.ExperienceHandler.getLevelDetails(1, 57);
Response structure:
{
remainingExp: 43,
requiredExp: 100,
levelProgress: `57/100`,
nextLevel: 2,
percentage: 57% //Deprecated
};
updateDatabase()
Meant to automatically update guilds and users data object from basic changes, support 2 scopes changes
Returns: {Promise} - An object containing detailled data about the success of the update
Call example:
await client.updateDatabase();
Response structure:
{
usersUpdate: {
sucess: false,
error: false
},
guildsUpdate: {
sucess: false,
error: false
},
overallSucess: false
}
-
getUserTags(users)
** [DEPRECATED] Will be removed in further updates, therefore no detailled stuff -
pageResults(options)
** Will be unpromisified in further updates
Meant to create 'pages' of a result list
Returns: {Object} - An object containing the paginated results and the pages count
Call example:
await client.pageResults({
results: ['firstArrayItem', 'secondArrayItem'],
size: 20 //Optional, default is 10
});
Response structure:
{
results: [['firstArrayItem', 'secondArrayItem']],
length: 1
}
createInteractiveMessage(message, options)
***
Meant to reduce interactive lists to 4-5 lines of code
Returns: {Promise} - An object containing the reason of the function end and the collected reactions
Call example:
await client.createInteractiveMessage(message, {
description: `Here's a fancy list of what i ate this morning`,
content: ['Nothing', 'kappa'],
limit: 30000 //Optional, default is 60 seconds
}
Response structure:
```js
{
endReason: 'timeout',
collected: {Collection}
}