Added new !listroles, !addrole and !remrole commands (read below)
Added new HR module param ValidateTokensWhileLoading
Added icons to HR users list when user don’t have or have invalid ESI token
Added new module - Web Config Editor with basic functionality
Added new tags to KM templates: {victimAllyOrCorpName}, {victimAllyOrCorpTicker}, {attackerAllyOrCorpName}, {attackerAllyOrCorpTicker}, {constName}, {regionName}, {isSoloKill}, {isAwoxKill}, {iskFittedValue}
Fixed HR module confirmation popups to work with Bootstrap 4.3
Fixed possible exception during cache cleanup
Fixed Preliminary auth without ESI permissions
Fixed HR module not displaying characters whithout ESI
Fixed contract duplicate when using multiple filters
Fixed several auth errors
Fixed processing of characters whom has been deleted form EVE
Fixed cyrillic text in char application notifications
Fixed accepted courier contracts handling
Improved !ships command to accept group or ship name as the last param. Examples: !ships who online dreads !ships all moros
Updated 3rd party libraries
Updated Discord library to 2.1.0 release (might fix some exceptions)
FEATURE HIGHLIGHT - MANUAL DISCORD ROLES
It is now possible for users to self assign/remove Discord roles from the predefined list.
Enable this feature in CommandsConfig using EnableRoleManagementCommands parameter and set roles list using the RolesCommandDiscordRoles parameter.
Use RolesCommandAllowedRoles to specify Discord roles eligible for these commands. Leave empty to allow everyone.
!listroles - lists available roles
!addrole - adds selected role to message author
!remrole - removes selected role from message author
FEATURES HIGHLIGHT - CONFIG EDITOR
New WebConfigEditor module allows you to edit and save Simplified Auth file from the web page. This file is used to manage authentication.
More features will be added in the future releases.
BREAKING CHANGES
Renamed !caps command into !ships command
Renamed EnableCapsCommand, CapsCommandDiscordChannels, CapsCommandDiscordRoles to their Ships counterpart
Fixed log verbosity order so Module value is going below the Warning
Fixed notification text parsing routine
Fixed standings auth being interpreted as guest failing to move forward
Fixed several possible exceptions in !corp command
Fixed hard coded address in web config templates
Rewrote helpClist language file string to reflect recent update
Remove .php endings from all URLs. They were obsolete from the very begining
Who’s ordered some !vodka ?
Updated platform to .NET Core 2.2
Updated Discord library to V2.1.1
Improved and updated !clist command to include filtering by type and availability. Read command help for details.
Improved and updated defult KM messages (thanks to @mrurb)
Improved daily stats info (thanks to @mrurb)
Added KM feed groups check and warning for equal group names. Groups must be unque for KM duplicate filters to work correctly.
Reworked ZKBSettingsModule.AvoidDupesAcrossAllFeeds property. It will now ban KM after the first usage in any of the KM feeds.
Redesigned, improved and enhanced LiveKillFeedModule (read below)
Redesigned WebAuthModule to use new entity system allowing both names and IDs to be specified in corresponding properties
FEATURE HIGHLIGHT - KILL FEEDS
LiveKillFeedModule now hosts RadiusKillFeedModule module functionality. It is also has been significantly improved to provide agile filtering.
On top of the existing features now you can:
Setup detailed filters using the entity system where both ID and names are allowed
Filter by victim ship type list
Filter by SOLO, GROUP, AWOX, NOTAWOX, PVP, PVE tags
Filter by attackers and victims separately
Filter by maximum KM isk value
Exclude any entity from search by specifying leading - sign
Redirect feed to multiple channels for every filter
Choose inclusive or exclusive filtering modes
Specify custom template filename for feed Group to use
It is now possible to authenticate characters by assigned corporation titles. Look for Mode7_AuthByTitles in default config file.
Several rules:
Titles auth is only enabled when Titles property within AllowedMembers group is not empty
Auth group must fetch esi-characters.read_titles.v1 ESI permission from users
DiscordRoles property from AllowedMembers will be ignored
Corp directors will not be authenticated as they don’t have corp titles
FEATURE HIGHLIGHT - UPGRADE/DOWNGRADE WEB AUTH GROUPS
You can now specify a list of additional group names for auth group in an UpgradeGroupNames and DowngradeGroupNames properties. These groups will be checked during an auth check pass.
Upgrade: If user will match a group from the list it will be transferred to this auth group. Discord roles will be assigned according to the new group rules.
Downgrade: If user do not match it’s current group criteria he will be checked against all groups in the list and will be transferred to first group that is matching criteria. Discord roles will be assigned according to the new group rules.
Note that if new group has ESI permissions specified the user will not have them this way. Moreover ESI permissions obtained from previous groups will be maintained.
BREAKING CHANGES
Bot has been updated to .NET Core 2.2 so you might have to adjust your environment
Removed RadiusKillFeedModule and corresponding settings. Its functionality has been merged into LiveKillFeedModule
Redesigned LiveKillFeedModule settings section, please take a look and update
Contracts cache will be flushed to correct some inconsistencies. First contracts check will fill the cache.
WebAuth module:
Replaced AllowedCharacters, AllowedCorporations, AllowedAlliances with AllowedMembers
Renamed underlying Id prop to Entities
REMOVE .php ENDING FROM YOUR CALLBACK URL IN CCP APP! It is no longer needed and will cause validation error.
Added web server status reporter, new param ServerStatusPort. Query specified port to get status (no response - bot is not running). Set to 0 to disable.
Added web server NoStatusResponseOnDiscordDisconnection param to not respond on status queries if Discord id not connected. Act like bot is not running.
Added ability to assign roles to members without corp titles
Added new config property UseSingleFileForLogging to enable logging into single file
Added new property to log feeder SendInterval which is default to 5000 msec
Added new web auth param EnableDetailedLogging for better auth tracing
Added new AutoClearAuthCommandsFromDiscord property to web auth module to cleanup auth requests
Added new RemoveAuthIfTokenIsInvalid property to web auth group to remove auth for users with invalid ESI tokens
Added new RemoveTokenIfTokenIsInvalid property to web auth group to remove token from user auth data if it is invalid
Added new AuthTakeNumberOfUsersPerPass property to web auth module allowing to specify how many users are checked per pass
Added new EnforceSingleTickerPerUser for web auth module to force users to have ally or corp ticker
Added new ConcurrentThreadsCount property to be able to control number of threads for parallel processes. Usually 4-8 up to one per CPU core.
Added KM template vars {systemID}, {constID}, {regionID}, {victimID}, {victimCorpID}, {victimAllyID}, {attackerID}, {attackerCorpID}, {attackerAllyID}
Fixed standings in config editor
Fixed minor bugs and made some updates to config editor
Fixed async logging issues
Fixed timers authentication with empty Entities lists
Greatly improved and refactored web auth module for better maintenance and performance
Greatly improved log feeder for better coverage, less CPU and network utilization
Improved HR module to strip roles when user is moved to dumpster
Improved HR module to proceed with auth check right after character has been deleted from the web page
Improved standings update to a fail-resistant version
Colorized important log feeder posts (desktop Discord client only)
BREAKING CHANGES
Automatic KM templates has been removed. Now you have to specify template file for each KM group manually or leave empty for default.
Added new entries to Resources config section
Replaced SystemLogFeederSettings.OnlyErrors with SystemLogFeederSettings.LogSeverity
Renamed web auth group UseStrictAuthenticationMode to StopSearchingOnFirstMatch
New rules to follow for auth setup:
Auth groups will be checked according to their order in config file: top to bottom. Independent of the auth type (general, standing, titles, etc.).
Allowed members in auth groups will be checked from top to bottom with the following priority: character, corporation, alliance
Guest groups should go last in the list or they will be chosen before latter groups
Guest groups must have empty Entities list (no more 0)!
StopSearchingOnFirstMatch now properly limits the search. If it is false when all members within a single group will be checked. This will allow to assign roles to user from multiple AllowedMembers entries form ONE group matching the criteria. If mentioned property is true then only the first matching entry will be used to grant roles. The same rules applies to standings auth.
If user matches several criteria within the group and they contain Titles: only the 1st found entry with Titles auth will be selected and all other matches will be omitted
Added Hidden param to auth groups to hide their buttons but allow to participate in upgrade logic
Added automatic SQLite DB backup logic with new settings SqliteBackupFrequencyInHours and SqliteBackupMaxFiles
Added comAllowedChannels param to specify allowed channels. All other channels and comForbiddenChannels param will no have effect if comAllowedChannels has any value
Added price to compact contracts notification mode
Added IP address fetch for authenticating users for future security measures
Fixed OrbitalReinforced notification date
Fixed config editor LiveKillFeedModule write
Fixed war inherited notification
Improved simplified auth entries to be written ahead of the original ones to avoid guest filters conflict
Improved contracts module performance
Improved HRM auth to check user through multiple access lists
Improved ChatRelay to send messages in chunks to improve performance
Improved web settings editor to apply auth changes on the fly
@Captain_Panther This looks like a great tool, nice work. I am after a very basic thing not sure if you can do it with your tool. I have a character that gets donations, I was looking for a tool that simple posts a pre-formatted message in my discord when a donation has been received, is this possible with your tool?
Added IsEnabled properties for auth, killfeed, contract, config editor, stats, HRM, mail, null campaigns, sov tracker, industrial groups and lists. You can now switch them off.
Reworked LiveKillFeed module (again) for better usability
Fixed search quieries to ESI
Fixed ZKB errors due to server request limitations
Updated .NET Core to v3.1
BREAKING CHANGES
Redesigned LiveKillFeed module filters for better usability. Check default config file for new properties and explanations.
Here’s the quick breakthrough:
Filters are now work under ‘AND’ rule by default. Items in lists are always work under ‘OR’ rule (read PS).
HasNo props has been added instead of minus sign logic. They are always checked before any other values and will filter out KMs on match
HasAttackerEntities and HasVictimEntities work under ‘OR’ rule by default. Set EnableStrictPartiesCheck to enable ‘AND’ rule for these props.
EnableMatchOnFirstConditionMet will match the filter on the first ‘Has’ prop condition match
MinimumIskValue and MaximumIskValue props validates independently and are not affected by any modifiers.
PS: ‘OR’ rule - at least one must match, ‘AND’ rule - all must match
PLEASE update the documentation in your GitHub repository. It is out of date, particularly with regards to the “AllowedMembers” section, and there are some critical details missing with regard to roles and auth and discord roles.
Fixed and reworked market price module to work with Fuzzworks data
Fixed potential role stripping failure
Fixed auth standings check from several characters
Fixed !char command incorrect values
Fixed static command char in web pages
Fixed unexpected tickers removal
Fixed LiveKillFeed ship type checks
Fixed potential auth problems in large discord guilds
Fixed ZKB queries
Improved KM to track and filter by attacker ships
Improved shutdown procedures to avoid possible DB corruption
Improved !sys command set. Use !sys help for more info
Improved !reauth command to check all the users in Discord
Moved Mail, Notifications, Incursions, SovTracker and Contracts modules to entities system
Made KM template variables case insensitive
FEATURE HIGHLIGHT - MULTIPLE DISCORD GUILDS
It is now possible for bot to work with several guilds in a limited manner. Auth always works against single guild Id specified in config for now.
But now you can feed messages into channels in other guilds where this bot has been added as a user. Just specify them in config, guild will be found automatically.
Added new properties to restrict commands on secondary guilds: DiscordAllowGeneralCommandsOnSecondaryGuilds and DiscordAllowSystemCommandsOnSecondaryGuilds
WARNING: Overlapping Discord role names can give users access to system commands in other guilds. But you must know bots secret number to add it to your group.
FEATURE HIGHLIGHT - RESTARTER
This release introduces new executable: Restarter. It is top-level executable which should be started instead of ThunderED.dll.
It provides the following benefits:
Support for correct shutdown procedures
Support for !sys restart command
Automatic restart upon bot app failure. Requires the app/process to close without additional notifications, e.g. under Windows it requires fail window to be disabled in system policies.
How to enable:
Uncomment ENTRYPOINT ["dotnet", "Restarter.dll"] in Dockerfile and comment the ENTRYPOINT ["dotnet", "ThunderED.dll"]
In case of manual startup just run the Restarter.exe
FEATURE HIGHLIGHT - SHUTDOWN
We have new Discord command !sys shutdown. It will perform gracefull shutdown procedure with minimal risks to corrupt DB.
For the Docker users it also provides a possibility to replace shutdown with gracefull restart:
Run container with the --restart always flag
Send !sys shutdown command from Discord
The bot will terminate the app process and container will be restarted along with the new app process!
BREAKING CHANGES
WebAuth module will now be suspended if it is unable to resolve all the char/corp/alliance entities in auth groups on bot startup (no auth checks, existing users will remain intact). Red error message is displayed in the console/logs and Discord message is sent into the AuthReportChannel channel (if it is specified) in case of the failure.
To fix the problem you must remove/update failing entities and restart the bot. If the case is happened due to very hard ESI failure you must restart the bot and see if it breaks through the problem.
Removed HasShipEntities and HasNoShipEntities props
Added HasAttackerShipEntities, HasNoAttackerShipEntities, HasVictimShipEntities and HasNoVictimShipEntities props to track attacking ships also
Moved UseHTTPS prop to webServerModule. It will be used in the next gen server version.
Removed authButtonDiscordText,authButtonNotifyText,authButtonTimersText lang strings and added AuthButtonDiscordText config props to WebAuth, Notifications and Timers modules for default button names
Replaced CharacterIds prop with CharacterEntities in Contracts module Groups. It now support entities.
Replaced Id prop with CharacterEntities in Mail module Groups. It now support entities.
Replaced AuthGroups prop with Groups in Mail module for consistency
Replaced CharacterId prop with CharacterEntities in Notifications module
Replaced HolderAlliances prop with HolderAllianceEntities in Sov Tracker module
Replaced Regions, Constellations, Systems props with LocationEntities in Sov Tracker module
Replaced Regions, Constellations props with LocationEntities in Null Campaign module
Replaced Regions, Constellations props with LocationEntities in IncursionNotifications module
Added EnableStrictShipTypesCheck LiveKillFeed property, all ship types check are now using OR rule by default (like victim and attacker entities)
Nice piece of software, a little fiddly to setup and the documentation could be updated as some have mentioned above (especially the AllowedMembers section). Otherwise impressed and going to gradually expand our use of this if all goes well!