- Vastly improved on rate-limiting tolerance
- Dynamically fetches and assigns any server-imposed rate-limits.
- Implemented a rolling queue system for filter checks.
- This effectively means each filter for all users will run one after the other. Increasing time between checks, but prevents rate-limiting.
- Improved notification message embeds to contain more information in a cleaner format
- Added "implicit mods" to the stats list for better stats report
- Security implementations
- PoE2 session token is now encrypted in storage
- Somewhat sensitive data is now obscufated in settings reply
- Improved on listing pricing display
- Now says "1 x Exalted Orb" instead of simply "1 exalted"
- Added approximated next check times for filters, viewable in notification messages and filters list
- General minor other improvements to readibility, commands, structure, cache, and functionality
Support for per-user-definable session tokens is in the works.
This will allow users to define their own tokens, which are encrypted for security, to reduce on ratelimits imposed by using the global token.
Once this is implemented, those users will benefit from faster checks, providing earlier listing notifications.
This should reduce the risk of missing valuable listings.
This update includes implementation of Path of Exile 2 trading watchlisting, allowing users to get notified on Discord about new listings within the filter criteria.
- Multiple new commands
- `!poe2trade`
- DMs a message containing basic usage and instructions.
- `!poe2trade add <filter_id> [filter_name]`
- Adds a trade filter to their watchlist.
- New matches will be sent to the user in a DM.
- `!poe2trade remove <filter_id | all>`
- Removes the specified filter from their watchlist.
- If filter_id is set to `all`, it will clear all filters from their watchlist.
- `!poe2trade list`
- Lists the user's watchlisted filters, along with the filter nickname (if assigned).
- `!poe2trade pause`
- Stops watchlisting all their filters. No processing nor notifications are performed.
- `!poe2trade resume`
- Resumes the watchlisting of the user.
- `!poe2trade set <key> <value>`
- Allows admin/owner to modify settings without restarting the bot.
- `!poe2trade settings`
- Allows admin/owner to view current settings.
- Will be updated in the future to allow non-admin users to view non-sensitive settings.
- Automatic notification of new listings in a neatly-formatted embed message
- Currently, notification embeds contain: item name, item icon, item level, item stats, listed price, seller name (and account hyperlink), filter information, and instructions on removing the filter from watchlist.
- Notification messages are condensed to avoid spam as much as possible; multiple new listings (up to 10) will be combined into a single message containing several embeds.
- Respects rate limits to avoid getting the bot locked out.
- These ratelimits are set by GGG and CloudFlare, and are thus very strict. This shouldn't affect usability much however.
- Several minor QoL features
Still very much in active dev, so availability may fluctuate, and features will change.
Current TODO:
- Smart price-to-stat comparison
- Determine listing value for the user to avoid being scammed, and easily pick up good deals.
- Will compare item stats and listing price with other items of the same name, level and quality.
- Direct listing hyperlink
- Currently, PoE 2's trading site does not support direct item links, so this has to be done by dynamically generate a filter that will only result in the relevant listing, providing easy direct access.
- autoname implementation
- Automatic channel naming can be toggled with `!customvc autoname`
- Autoname status can be verified with `!customvc settings`
- Autonaming will automatically apply game name as channel name if owner plays a game
- If owner is not playing a game, channel name will default to `{userdisplayname}'s Channel´
- Currently, checks are performed every 30s, and changes applied after a 5m cooldown
- Minor fix for the latest logging changes
- Caller function was not correctly listed in log messages. This has been corrected.
- All logging functionality has been moved into the Logger class
- Initiated globally as globals.logger()
- Logging format changed from `globals.log("message_str", "LEVEL")` => `logger.level("message_str")`
- Minor changes to Twitch authentication
- Fixed an issue where Twitch users were not registered correctly due to recent DB changes
- Log-level of unidentified users changed from warning to info
- Minor changes to `!customvc`
- Renamed `bitrate` -> `audio_bitrate`
- Added `video_bitrate`
- Changes some help text
- Fixed certain subcommands which were broken after recent changes
- Added `autoname` -> Automatically names the voice chat according to game being played by the owner
- *Needs addiitonal work to implement all features*
- Platform logs associated to a message are now associated with platform-specific IDs
- Fixes for `!customvc`, specifically in relation to commands execution.
- Optimized logic
- Fixed limits for certain values like VC users limit
- Better code integrity: now self-references as a Cog
- Lots of minor other tweaks, adjustments, and improvements
- Supports a "VC Lobby" voice channel users can join to auto-create their own voice channel
- That user is then the channel "owner".
- Allows defining in-chat settings for each custom voice channel.
- Empty channels auto-delete after 10s
- Auto-deletes empty channels on startup
- Auto-asigns the first user owner of the custom voice channel on startup if no data is retained
- Supports several commands:
- `!customvc` -> Displays some help text
- `!customvc name <new_name>` -> Renames the voice channel
- `!customvc claim` -> Claim ownership of the voice channel if the owner has left
- `!customvc lock` -> Locks the voice channel, preventing non-moderators from joining
- `!customvc allow <some_user>` -> Allow a user into the locked voice channel
- `!customvc deny <some_user>` -> Denies a non-mod user access to the voice channel
- `!customvc unlock` -> Unlocks the voice channel. Denied users are still denied
- `!customvc bitrate <kbps>` -> Set the bitrate for the voice channel (Should not be used unless needed)
- `!customvc op <some_user>` -> Assing someone as co-owner of the voice channel
- `!customvc settings` -> Display the current voice channel settings, including the owner
- *It should be noted that moderators has the same access as channel owners for moderation purposes*
- Ironed out some issues with registering certain events into the database
- Fixed the old Twitch re-auth token issue. Now automatically renews it and initiates the bot with it.
These issues has been pestering the project a while now as they required some workarounds. Should work smoother from here on out! (I hope ...)
- Dynamic accounts association
- Accounts can now be associated dynamically, allowing multiple accounts on the same platform to be associated to the same UUID.
- UUI system now supports any platform, eg. YouTube, TikTok, Kick, Twitter, etc.
- More robust user lookups with enhanced fault tolerance and allowance for NULL data.
- Optimized database structure with two tables for user association; one for UUID and basic info, another for platform-specific details.
- Enhanced logging functionality: logs now prefix the calling function.
- Enhanced user lookup debug messages, allowing easy query inspection and data validation.
- Other minor fixes
- Reorganized commands into separate files for better fault tolerance and feature expandability
- Added basic dynamic bot status
- Needs additional work. Currently very basic, planned features include fully dynamic mode with automatic alerts and such.
- Minor other tweaks
- This function returns the game being played on the specified channel
- Implemented into quotes system: quotes automatically contain game name if quoted from a Twitch channel
- Defaults to None if channel is not live
- Discord quotes keep old logic: quotes never contain game information
- OokamiPup v2 can now enter sevaral community channels
- Individual channel settings. By default, all commands are disabled
- Channel-specific settings allow enabling/disabling individual commands per channel
- Added a few more fun facts
- Minor tweaks and bugfixes
- Users can now search for fun facts using `!funfact search [keywords]` without brackets. Returns best match.
- Also added some new facts
- Minor tweaks to force-sync of Discord slash commands
- This command returns a random fun fact from a list of over 500 verified fun, surprising, or good-to-know facts, with unit conversions between metric and imperial.
- Also started somewhat on the new Community Engagement Score (CES) system.
- Currently not implemented to any working degree.
- Will grant/deduct user scores depending on community engagement and actions overall.
- Moved some constants to the globals.Constants class
- config_data: returns the configuration dictionary
- bot_start_time: returns the epoch bot start time
- primary_discord_guild: returns a dict like `{"object": primary_guild_object, "id": primary_guild_int}`
*These is initiated under globals.constants*
- Improved on docstrings. Google format now standard
- Reverted all commands to purely textual until further notice
- `/help` is still additionally available as a slash command
- Returned "quote" commands to textual commands type
- Rewritten quote system backend to ensure stability
- Added new quote subcommands:
- `!quote search [keywords]` allow users to search for a quote using keywords, and returns the best match. If several equally good matches are found, returns one of them at random
- `!quote info [quote_id]` allows users to see more info about a given quote. Grants more information on Discord
- `!quote restore [quote_id]` allows users to restore a previously removed quote
- `!quote last/latest/newest` allows users to get the newest quote
- Added new quote features to Discord helpfile
- Moved database init to globals.init_db_conn
- Associated unlinked usernames now default to that of the other platform, appended with "({platform} unlinked)". This should ensure consistensy despite users not linking accounts in the UAL system
- Added time_since(start, end, format) function to easily get formatted time differences, eg. for execution time reporting
- Added "wfstl" and "wfetl" helper function under utility. Useful for debugging when a function starts and ends manually if needed.
- Minor tweaks, corrections, bugfixes
- Logging functionality has been centralised to 'globals.log'
This should allow easy log integration into subsystems without the need of passing the function everywhere *phew*
- added database table "users"
- table allows for assigning individual users a UUID for universal processing
- will support account linking in the future
- fixed a bug with reporting Discord commands in logs
- Ensured it fetches the correct commands and help configuration depending on platform.
- Removed certain duplicate checks that intiated functions twice or repeated value asignments.
- Added the @monitor_cmd flag to commands, allowing easy command runtime diagnostics, including execution time.
- Removed built-in Discord !help command
NOTE:
Basic implementation.
Help text is defined in:
- dictionary/help_twitch.json
- dictionary/help_discord.json
- Looks up a file in the "dictionary" folder
- Returns a random category string within that file
- Added proper start time fetching through globals.get_bot_start_time()