ThunderED - Powerful EVE Online Discord Bot with HR and notifications


  • Added Timers auth to Web Config Editor
  • 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 config editor naming for !ships command
  • Fixed contracts processing incl. initial ongoing contracts catchup
  • 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)


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


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.


  • Renamed !caps command into !ships command
  • Renamed EnableCapsCommand, CapsCommandDiscordChannels, CapsCommandDiscordRoles to their Ships counterpart


  • Added UsePortInUrl param to WebServerModule to be able to disable port usage for some connectivity scenarios
  • Added console warning messages for entities that has not been recognized
  • Added new IndustrialJobsModule
  • Added Discord roles validity checks for majority of modules
  • Added !test km command for admins to be able to test KM templates
  • Added new Contracts module property StopOnFirstFilterMatch which is false by default
  • Added new auth mode: authentication by corp Titles
  • Added new auth group poperties UpgradeGroupNames and DowngradeGroupNames (read below)
  • Fixed ContractsFeedModule initial cache generation
  • Fixed contracts availability filter
  • 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 :slight_smile:
  • 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


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

Read for details.


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


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.


  • 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 new notifications, some with temp placeholder until I get real notification information
  • 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)


  • 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

Does anyone offer hosting for this?

Cheapest and most popular VM offers:

1 Like

Дайте расшаренный бесплатный сервер пожалуйста

V1.4.3 has been out for a while. Had no time to update the topic.


  • Added new auth module property AuthCheckUnregisteredDiscordUsers to be able to switch off unregistered users checks
  • Fixed timers web page access malfunction
  • Fixed auth check entries selection based on time
  • Fixed kill feed to correctly use template file for radius kills
  • Fixed missing KMs
  • Fixed chat relay dependencies
  • Made unregistered Discord user checks linear to reduce Discord server load

Still healthy. Looking forward to jump to v1.4.5 release.


  • 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
  • Updated basic contract messages content
  • Decomissioned FleetUp module