Releases: retrixe/IveBot
4.0-alpha.2
🎉 More major work towards IveBot 4.0 \o/
This release is focused towards wiring slash commands support into IveBot. It took a lot of architecturing and decision making (just look at the first and last major change commits), but we got there. The slash command API in IveBot is about as stable as Discord will currently allow it to be :^) apart from that, the dashboard has received a pile of fixes and a bunch of patches have been made which will eventually be backported to 3.2.2. The bot has been updated to Discord API v9, due to the changes, changeserverregion
and listserverregions
have been refactored to changevoiceregion
and listvoiceregions
in addition to a pile of code changes under the hood. All of the game commands have been ported to slash commands (apart from gunfight and trivia), as well as a handful of other commands in utilities. The goal for 4.0 is to get all commands ported.
This release is tested in production to be fairly stable (in my previous release, I stated that the next alpha release would be sure to break some stuff, but I don't believe that holds true anymore given the bug-free state of this release). Naturally, the 3.x branch is currently still ideal if you wish to avoid introducing any bugs.
Major Changes
- Add slash-create, fix dashboard channel menu: 62fa8d4
- Wire initial slash commands support: 0fa2c28
- Add slashOptions to commands, port some commands. Current approach is to have slashGenerator and generator: c65e505
- Add commonGenerators, ephemeral errors. Also, port /serverinfo to slash commands: db8b635
- Slash /help, use Eris v9, disable region commands: 8732bc0
- Use Eris Interactions for parsing slash commands. slash-create is still used to sync slash commands with Discord. Also, port /creationtime to slash commands: 1b4dc01
- Remove slash-create, use Eris to register cmds: f5f58dd
Minor Changes
- Fix bugs, update list/changevoiceregion: c2328e7
- Improve+fix errors, validate interaction options. Improve bubble wrapped error logging. Fix errors by allowing slash commands to assert options is array. Add slash command options validator. Fixes any errors caused by broken Discord validation just in case. Also removes any responsibility of slash generators to need to check. Types can be casted safely in slash generators now. No sub command support yet though: 93645f9
- Register slash commands non-blocking, fix errors: 9208eb6
Patches
- Bump next from 11.0.1 to 11.1.0 in /dashboard: #34
- Fix public roles exploit: 8001ba1
- Fix /ocr on newer Node versions: 4c80771
- Fix 2 internal errors with /calc and /av: 80b48e4
- Fix dashboard and slash /help bugs. Dashboard Save button now works. Dashboard Cancel button now works. Dashboard now shows news channels too: 0a07e10
- Bump next from 11.1.0 to 11.1.1 in /dashboard: #35
- Exclude roles with disableEveryone too: 3381ec4
- Bump ansi-regex from 5.0.0 to 5.0.1 in /dashboard: #36
- Replace deprecated embed property: 5879290
3.2.2
Patch update to the 3.x branch containing bug fixes from the 4.0-alpha.2 pre-release. Update is recommended immediately for security reasons.
Patches
4.0-alpha.1
🎉
First prerelease of IveBot 4.0 \o/ this release is actually so stable that I am currently using it in production despite it featuring many changes underneath. The one most likely to cause bugs is likely intents being enabled, apart from which everything is working remarkably well.
- Intents have been enabled now.
- We now use Node.js source maps for better debugging in production.
- The dashboard GraphQL schema has been updated with far better naming.
- The dashboard has been isolated from the bot and split into its own sub-folder.
- The dashboard now ships with updated Apollo Client/Server, Material UI, Next.js and React.
- The dashboard now uses OAuth to authenticate, and talks to IveBot using an encrypted private API.
- Certain fields have been renamed in the database to match casing convention or make more sense.
- We now compile with native ES Modules for top-level await. MongoDB is guaranteed to connect before the bot starts.
- ESLint has been updated with much stricter rules, which has helped fix a lot of potential floating promises that could cause crashes.
A lot of these changes are internal (apart from the dashboard, of course), but help a lot towards enabling new features and preventing possible errors that haven't showed up but theoretically could. Despite it being a prerelease, I believe the code is in better shape than 3.0's code is. However, 4.0 will be seeing larger updates soon i.e. support for Discord slash commands which is sure to break some stuff under the hood. Since 4.0-alpha.1 will obviously not receive further tangential updates, if there is a bug, you will have to backport the fix from a future version of IveBot 4.x yourself. If you do not wish to do this, I advise sticking with the 3.x branch for now.
Run the following commands in Mongo shell to prepare for the 4.0 update.
use ivebot
db.servers.updateMany({}, { $rename: { serverID: 'id', addRoleForAll: 'publicRoles' } })
db.warnings.updateMany({}, { $rename: { serverID: 'serverId', warnedID: 'warnedId', warnerID: 'warnerId' } })
Major Changes
- Begin separating dashboard from bot: e1d610f
- Cleanup dependencies: 8772358
- Separate bot from dashboard completely: 5b444e7
- Move bot to src folder, update MongoDB, fix crash. VSCode debugging is broken at the moment: 380ec3a
- Require Node.js 12, enable source maps. Fix fetch error. Remove @babel/core dependency: 0067c26
- Get dashboard front-end in working condition. Enable TypeScript strict mode. Back-end is still utterly broken: 402ec06
- Add config.json, work towards OAuth dashboard: 7f6b143
- Finish OAuth based resolvers, remove /token. Missing some error handling and mutual server lookup: 7aaca91
- Update Apollo Client, get auth/dashboard working: 37314c6
- Support logout, fix linting, update README. The dashboard builds and runs perfectly now: 70ff28f
- Enable most strict ESLint rules. Also, use Sets where appropriate in tempDB instead of arrays: 4a164d2
- Use Node.js ES Modules, fix VSCode debug: 77ad487
- Rename database structure fields. servers: serverID -> id - servers: addRoleForAll -> publicRoles - warnings: serverID -> serverId - warnings: warnerID -> warnerId - warnings: warnedID -> warnerId: d3b7200
- Add encrypted API to IveBot for dashboard to use. This avoids rate limits by utilising IveBot's guild/member cache: d830933
- Enable intents, fix statistics error, improve UI. Fix race condition with MongoDB and GQL resolvers. Update ws due to GitHub vulnerability: 5e69d51
Minor Changes
- Update to latest ESLint: 1f41a5e
- Enable some ESLint rules: 644a72b
- Refresh dashboard UI, update trivia hugely. Get dashboard permissions working correctly, with huge ratelimits: 14a6d37
Patches
- Cleanup some code with TS strict mode: 561d8d4
3.2.1
Followup release with important crash fix and /trivia updates. It's expected that support for the 3.x branch will be dropped soon in favour of the 4.x branch, owing to much more improved stability and active development.
Patches
3.2.0
🎉
This is likely going to be the last minor release of IveBot 3.x, only patch releases will take place after this. I'm beginning work on IveBot 4.x now which will involve significant reworking and updates to the code, like using intents and splitting the dashboard out, and looking at what we can use in terms of slash commands and other new Discord features, and maybe a new prefix too. Also, huge updates to all of IveBot's dependencies which we haven't updated in a long long time.
As for IveBot 3.2.0, there's quite a bit new! There's a new /trivia
command, and you can now edit a command if you did a typo and it error'ed! There's also more insults, fuzzy searching for /xkcd, patches for some crashes and the bot now requires at least Node.js 10. Also, 3.1.0 and older fail to connect to Discord anymore, so an update to 3.2.0 is required now.
Minor Changes
- Add fuse.js fuzzy search to /xkcd.: 5ecbd30
- Diversify insults: #22
- Update to Eris 0.15.1, add re-eval on error. The individual commands don't support it yet though.: 9d84d7a
- Finish re-eval on error for all commands. /eval was excluded as
{error:true}
is unsupported. /ocr and /paste were excluded. API errors were also excluded. Cooldowns were also excluded. Moderation commands are incomplete.: 1b0369a - Finish re-eval on edit error messages.: 84587d2
- Compile to ES2018, require Node 10.x.: 9fc8428
- Add /trivia game command: #19
Patches
- Fix /help being broken for most commands.: 8749777
- Update vulnerable dependencies.: ece2966
- Bump elliptic from 6.5.3 to 6.5.4: #24
- Add /ver and cleanup some code.: 7721a3e
- Fix message edits, plan userinfo updates.: 2461bd7
- Add zalgo char, update security vuln dependencies.: 856ae29
- Fix autorole on member joins: d2aad1b
- [fix] await in sync function: 1f256f9
- [fix] broken /calc with dependency update: ec42b8d
- Await floating promises and update old code.: 05e070d
- Update @types/node, ws, package.json.: 3147131
Credits
Huge thanks to @xuxey and @xVyre for helping!
3.1.0
🎉
This is a minor release with a slew of new features. It includes multiple bug fixes and new commands.
- Added aliases for reminder.
- Update to Eris 0.15.0 to continue working properly.
- Add /suppress.
- Add /hastebin.
- Add perms to
/help <command>
. - Add /reminderlist.
- Fix large number of bugs and old pieces of code.
Minor Changes
- Add reminder aliases, lower-case calc, update ocr. /ocr <message link> works better with messages containing links now: df5119f
- Fix random, els and remindme, update getUser, add /perms. getUser now only iterates guild.members once and uses nick. /random will now use 1 as lower limit when only 1 number is passed. Critical bugs in /remindme and /editLastSay fixed. /userinfo cleaned up: a3468ab
- Update to Eris 0.14.0 as well as package updates: 1fca3f0
- Add /suppress: #18
- Add /hastebin and support /nmc effective name: 03ec341
- Fix paste.gg, update to Eris 0.15: 6d2d2b6
- Add /help perms and /reminderlist: 75cd274
Patches
- Fix #2 and move gunfight storage to objects: f64b0e6
- Use GuildTextableChannel cast and remove members.find(id). Get rid of guild.channels.get(message.channel.id) as cast. Replace leftover members.find(e => e.id === id) with members.get(id): 6b1cfb4
- Add /perms to help and fix typing in other channels: dad8d7b
- Make /rh type case insensitive (fix #15, #16): 2783133
- Fix /dog internal errors (fix #14, #17): f76f960
- Updated .permission, fix /suppress perm. /suppress uses channel specific perms. .permission -> .permissions Make sure all commands return "Correct usage.": 64db23d
- Use paste.gg and fix var name: 10ae686
- Update README, /help, bump Node.js req: de26a1a
Credits
Huge thanks to @xVyre for helping!
3.0.0
🎉 🎉 🎉 🎉 🎉 🎉 🎉 🎉 🎉 🎉
It's finally here! 2 years too late, but hey, it's the final release that counts. If you were using 2.0 for whatever reason (since 3.0 has been stable for use for an year now), time to upgrade. Like, right now. The number of changes is immense and barely countable. There's too. much. new stuff. when coming from 2.0.
For 2.0 users:
- Switched from discord.io to Eris.
- The dashboard has received various improvements.
- Rewrote the command framework to be much more flexible.
- Timers now run accurately making use of the database.
/request
has been improved and now has a 24-hour cooldown.- FIFA commands have been removed (may be brought back in the future).
- Commands are now re-evaluated when edited (in the event that a command fails to run).
- New features were added to the dashboard, like bot autorole, text recognition on image send, and join/leave/ban messages.
- New commands like
/xkcd
,/httpcat
,/ocr
,/eval
,/safeeval
,/userinfo
,/serverinfo
,/shutup
and management commands for channels and emoji were added. - The bot is much less buggy and more mature and stable than before. Most commands have been improved with better responses.
- Go through all the past releases here for a full list of changes:
3.0.0-canary.8
3.0.0-canary.7
3.0.0-canary.6
3.0.0-canary.5
3.0.0-canary.4
3.0.0-canary.3
3.0.0-canary.2
3.0.0-canary.1
3.0.0-canary.0
Databases used for IveBot 2.0 will need to be upgraded manually.
Run the following in Mongo Shell to upgrade:
// This will reset public roles and join/leave messages for all servers, but is needed for them to work again and to prevent error messages
use ivebot
const servers = db.servers.find({}).toArray().filter(i => i.joinLeaveMessages)
db.servers.updateMany({ '_id': { $in: servers.map(i => i._id) } }, { $unset: { 'joinLeaveMessages.channelName': '' }, $set: { 'joinLeaveMessages.channel': '' } })
print(servers.map(i => i.serverID + ' = ' + (i.joinLeaveMessages.channelName || 'N/A')).join('\n'))
db.servers.updateMany({ addRoleForAll: true }, { $set: { addRoleForAll: '' } })
db.servers.updateMany({ addRoleForAll: false }, { $set: { addRoleForAll: '' } })
For 3.0.0-canary.8 users, what's new:
- New features like analytics support, ban messages,
/robohash human
,/ocr --hastebin
(automatically used for long text),/ocr <message link>
. - New commands like /xkcd, /httpcat, /creationtime.
- Fixed /define.
- Enhancements to /serverinfo, /safeEval (now as good as /eval), /uptime (
process.uptime
for accurate up-time). - Security fixes like a more secure /eval, fixed /safeEval vulnerability and limited URL download sizes in ocr/addemoji.
- Latest Eris +
allowedMentions
is now used to secure against unwanted mentions. - /commands, /hulp and /gethelp aliases.
- Database persisted /mute and /remindme timers to persist across restarts and fire reliably (finally).
- Just a ton of bug fixes that make IveBot stable.
Minor Changes
- Add full analytics support. Needs further testing and stabilization: 2d197e2
- Add support for ban messages and fix /warns without an argument: fca2c60
- Add /xkcd: 3e0b3e2
- Update to Next.js 8.1 and Eris 0.10.0 \o/ also, fix bug with /avatar: 1cf4dc5
- Update to Eris 0.10.1 to fix /serverinfo bug \o/ Eris 0.10.1 includes my PR to support /serverinfo GIF server icons. Also fixed bug where ban messages actually didn't work: 25b6db7
- Add /robohash human, Nitro Boosting to /serverinfo and fix /define. /define now uses the Oxford Dictionary v2 API: b196a77
- Update ESLint, add /httpcat, update /help. Fix /say with @everyone. Removed eslint-plugin-typescript and added eslint-plugin-react-hooks: 84e1318
- Fix ban messages, autorole and add a lot of missing awaits. Update eval. /safeEval is now /eval standard. /eval will now secure the token if detected: 597db52
- Update Eris, limit URL download sizes, enhance /ocr, add /creationtime. /ocr will upload really long text results to hasteb.in. Take advantage of allowedMentions to restrict mentions. Update /ping <website> response. Fix /serverinfo bug where it does not show nitro boosts even when present: 2f6cacd
- Update to latest Eris, add /commands and /ocr --hastebin. Use default allowedMentions client option: d30b280
- Add /xkcd search, use db for reminders and unmute tasks, update /uptime. /uptime uses process.uptime now instead of client.uptime. Add new /help aliases: b2698fb
- Add /ocr <message link> for confunded people: 9eaa4d0
Patches
- Use PNG instead of JPEG, fix bug with incorrect role names: 2a428c3
- Fix images to be 2048 size and update remoteexec and ping: 11e4d4c
- Enable TS esModuleInterop and fix bot autorole. Add types for isomorphic-unfetch and ms: fbc0296
- Small refactors, fixes for /addemoji and /slowmode, update /leave: 58072bf
- Fix /eval bugs and /safeeval security vulnerability. Small perf boost: c01b893
- .get better than .find along with some minor tweaks: 27b40df
- Update to Eris 0.11.1 and update the error handler: ab3f338
- Remove tons of useless ESLint comments, update now.json and /token. Add /oppress as a /mute alias: 3af0d1b
- Update Eris and fix /define errors: fa06c43
- Fix /creationtime and remove help export: c4444b6
- Check for permissions in all admin commands, update /ec and README: fbe72a5
v3.0.0-canary.8
🎉
As we near v3.0, this is one of the final releases before we begin with RC releases. This release was mainly focused on stabilization and ensuring the code base is as well structured and bug-free as possible. Thanks a lot to community members to help find bugs and make this release possible 🎊 (shout-out to Lexply#8711, VR#0124, Sanguineous#5802, N̞̐ͭ҉̷̲͎í̯̓x̅̐͠x҉͋͌͜҉̮̺ͬo̞ͯ̀#8690 and more)
We also dropped tracking channels by name in join/leave/ban messages (yes, ban messages are a thing now 🎉) which is sure to break every deployment single-handedly, but never fear, this small snippet of code will quickly fix your database and inform you servers which have been affected.
use ivebot
const servers = db.servers.find({}).toArray().filter(i => i.joinLeaveMessages)
db.servers.updateMany({ '_id': { $in: servers.map(i => i._id) } }, { $unset: { 'joinLeaveMessages.channelName': '' }, $set: { 'joinLeaveMessages.channel': '' } })
print(servers.map(i => i.serverID + ' = ' + (i.joinLeaveMessages.channelName || 'N/A')).join('\n'))
Overall, the release is one of IveBot's final canary releases, and will result eventually in 3.0, a culmination of work since April 2018 when work initially started.
Major Changes
- [BREAKING] Add support for ban messages and track channel by ID: 7f566c6
- Change channelID field in GraphQL to channel: 2a90021
Minor Changes
- Refined database handling for the dashboard. The warnings collection is end-to-end controlled already. This file is the only code editing server settings: 19156ff
- Revamped and updated help: 42735ad
- Massive performance improvements to login and basic OAuth support: 3830073
- Updated to Next.js 8.0 for performance 🚀 and fix linting errors. Also updated other packages: ae55c21
Patches
v3.0.0-canary.7
🎉 tons and tons of patches
🎊 /notify added, AVA removed because we don't need unit tests, /dog, /addemoji, /giverole, /takerole, /say/els/type and a lot more commands got tons of patches in this update, including more permission checks. Overall, IveBot is more stable and has more permission checks than before.
Your database will also clean itself as IveBot leaves servers.
Minor Changes
- Add /notify and test analytics (saved in an object for now): f067191
- /dog will check breeds correctly, addemoji now checks slots and perms: f36c9a1
- Remove some old deprecated styling, update /cur and /eval: baea8bd
- Say/type/els now check for permissions, fix /repeat, basic refactors: 5baae83
- Remove tests and ava. We don't need tests: d1ac0b5
Patches
- Untested OGP workaround and request now uses 24 hour cooldowns instead. Test pilots and host are exempted from cooldown: a20c09a
- Update avatar, add silent and delete to kick and fix role help. Use editChannel instead of custom RequestHandler in slowmode: 4967fc4
- Upgrade packages and delete server settings when leaving a server. c47c1e6
- Fix issues with dog, kick and ban now DM properly: d8d537f
- Fix giverole and takerole: fde1845
- Fix DMs, remove getDesc and getArguments, add --channel to /remindme: aad4797
- Fix an uncaught bug in master: 20deb22
v3.0.0-canary.6
🎉 one of the final canary releases before I gear up to launch 3.0 \o/
Features (:tada:)
- /editChannel and /deleteChannel 🎊
- /addEmoji, /deleteEmoji, /editEmoji and /emojiImage
- Better avatar, eval and uptime \o/
- dog now supports the entire dog.ceo API :D
- Public roles is now a string so you can select individual public roles now :)
- Open Graph Protocol support means Discord will now show an embed for the IveBot dashboard \o/
Fixes:
- Fix npm flatmap-parser vulnerability.
- Mutes have correct limits, fixes to timers.
- editLastSay and safeEval now work without aliases.
- Robohash color corrected, cat emoji edited, getUser now fault tolerant.
- Edge case bug with checkRolePosition fixed.
- Eris force updated due to issues with typings.
- Extra spaces now allowed in commands.
Important breaking issue!
If public roles is enabled on a server in IveBot, then you must run the following commands in Mongo Shell (or equivalent in /eval or so on) to convert the true or false to a string in order to prevent conflicts and bugs in the MongoDB database.
use ivebot
db.servers.updateMany({ addRoleForAll: true }, { $set: { addRoleForAll: '' } })
db.servers.updateMany({ addRoleForAll: false }, { $set: { addRoleForAll: '' } })
Pretty soon, I am planning to rename this property on the document to something more appropriate, I will provide a script to facilitate the move when and if that happens as well as with any breaking database changes.
(See canary.1 change log for more details on v3 roadmap phases.)
Minor Changes
- Permissions before usage check, dog enhanced, mute notifies silent fail. If mute fails to unmute, it no longer silently fails. Also, user is informed if he exceeds 24 days: 50525b6
- Public roles is now a string, better /avatar and fixed some bugs. Robohash colors and dog sub-breeds work now. Mutes now show correct limit: a01e781
- Add emoji management and update avatar and packages: 6234ceb
- Support Open Graph Protocol, agnostic URL and update packages. OGP generates rich embeds on Discord for sites. IveBot's dashboard is more self-host friendly now. Eris refused to update so it's force updated now: b39d77e
- Add edit and delete channel, update README: a888294
- Fix bugs, complete help in editChannel and enhance /uptime. Fix the rare edge-case bug discovered last commit properly. Extra spaces are now permitted in commands: c352c83
Patches
- getUser should be fault tolerant, robohash color done, cat emoji edited: e432627
- Fix eval and mute's timers and mute persists: 95e44fb
- Fix flatmap-parser compromise and fix caps bug with 2 commands. Updated packages. editLastSay and safeEval now work properly. User info also now returns if the user is a bot or not: 0fa7c95
- Enhance eval and uptime, fix some bugs which may crash IveBot: b861954
- Add tests for permissions, fix rootURL on site and fix edge-case bug: 1f4c1c2