Miscellaneous Login to Add Favorites
  • 1 Like
  • World of Warcraft
  • 274 Monthly Downloads
  • Supports: 7.3.0
  • 6,194 Total Downloads
  • Updated Aug 29, 2017
  • Created Jul 25, 2015
  • 11 Favorites
  • Project Site
  • Release Type: Release
  • License: Custom License
  • Newest File:

About Decliner

automatically declines:

  • channel invites
  • duel requests
  • pet-battle duel requests
  • group invites
  • guild invites
  • guild petitions
  • trade requests

from players when:

  • you haven't recently whispered them
  • they aren't in your party or raid
  • they aren't in your guild
  • they aren't on your friends list
  • they aren't a friend


  • Account or character settings

Save your options account-wide or per character.

  • Blocks sounds and other ui messages

All the clicks, event sounds, and chat/info text that occurs from interactions are silenced when an action is blocked. If you disabled notifications, you wouldn't know if anything was blocked at all.

  • Spam prevention

You will be notified only once within a certain time if a player is repeatedly sending you blocked invites or requests. The more they send, the longer that specific notification is hidden.

  • Forgetting players you whispered

After some time, players that were allowed because you whispered them will be forgotten.

  • Opening group invites when you need them

Sometimes you need an invite to a world raid group or for a portal from someone nearby. When you say "invite", "portal", or "1" in a public message, anyone will be allowed to invite you. Once you join a group, change zones, or after 5 minutes, invite blocking will return to normal.
You can edit these trigger words, as well as what channels are watched, in the options.

Type /decliner, /decline, or /dcl for the options.

Inspired by addons such as AutoDecline, Broker_AntiSocial, AntiSocial, and InviteBlock.

I would appreciate assistance with translation and review of localization if you can help.

Please use the curseforge ticket system to report bugs, issues, or offer suggestions such as an interaction you want to see supported or changing how the addon works.

If you prefer something friendlier than tickets, or want a discussion instead of a ticket, I occasionally check these threads:

Decliner is only hosted on Curse and WoWInterface.

Aug 30, 2017 at 00:42 UTC

  • 7.3: PlaySoundKitID is gone, PlaySound now uses IDs instead of strings
  • updated French translation (thank you, aktaurus)
    • i don't remember crediting a past German translator here, so thank you pas06 for those German phrases
  • removed group accounting redundancy
  • reformatted system message matching to use userlink instead of displayed text
  • fixed Prat issue
  • other minor changes

Jun 24, 2017 at 02:10 UTC

  • fixed error logic in Query and reformatted usage error for all three functions

Jun 20, 2017 at 00:10 UTC

  • new global table, declinerhistory, which converts declinerlog into an indexed list of past interactions, more info at the top of dclcore.lua
    • declinerhistory does not automatically clear with size like declinerlog does, may need to include some sort of prune in the future, or you can clear it with /run declinerhistory={}
    • keep in mind that declinerhistory will rebuild itself using declinerlog, but clearing it will lose all interactions no longer in declinerlog
  • DeclinerQuery() and DeclinerTrack() with no arguments now return their entire table of players
    • DeclinerTrack() now has "players" and "all" options, more info also at the top of dclcore.lua
  • fixed channel invite bug, not sure how that happened
  • fixed bug where a single trade could slip through in specific circumstances
  • streamlined register function
  • found out why group_roster_update wasn't reliable (oops) but i'm keeping the system message redundancy
  • both sound easter eggs are kept enabled even when their columns are disabled (individually or everything)

Jun 17, 2017 at 00:56 UTC

  • more robust frame pool, now relying on it for clearing decline blocks instead of a 0.05 sec delay
  • now including whispers in DeclinerQuery()
  • directly taking over UIErrorsFrame boolean function to filter duel and trade messages, as well as filtering LibSink
    • at some point in the past, pet duel declined messages stopped showing
  • various changes and reorganization

Jun 02, 2017 at 03:04 UTC

  • IsInGroup() is apparently not reliable, it has returned false while in a group, so removed it and IsInGuild() and am now relying on group and guild counts above 0 to determine group and guild status
  • redundant group accounting using join/leave messages, ensuring the group is properly stored in memory
  • similar refinements to friends and bnet storage
  • added DeclinerQuery() to query Decliner's memory of players, more info at the top of dclcore.lua
  • fixed specific/account setting saves, specific data will be wiped
  • refined pattern stripping
  • normalization of name-realm data
  • frame pool for sound filtering
  • more verbose log entries
  • various minor changes
  • keeping only the last 10 versions in changelog

May 01, 2017 at 12:19 UTC

  • removed all dropdown code due to raidframe taints, replaced with custom popup menu
  • new account/character settings option, defaults to account
  • "" is now "Blizzard Services"
  • expanded error for DeclinerAllowed()
  • account for 255 character limit in log messages
  • use ValueToBoolean for CVAR_UPDATE
  • improved sound easter egg by effectively future-proofing available sounds, ensuring a sound is always played, and a live tooltip
  • removed interface options double hack
  • other minor changes

Sep 15, 2016 at 20:52 UTC

  • if a number is used to trigger open invites, it now only counts in a message by itself
    • there were a bunch of false positives with the default "1" provided, such as in item links and talking about the 7.1 patch
  • fixed error when client sound is off

Aug 29, 2016 at 02:55 UTC

  • now tracking group, guild, and all friends locally, and independently of allowed checks, leading to much faster declined decisions
    • only online players are tracked
  • due to a much faster bouncer, hiding frames then showing them is no longer necessary
  • therefore, no longer hijacking cancel/close/decline functions from frames
  • finally, new way of blocking sounds without changing any blizzard frames
  • the changes above ultimately fix the general blame taint issue in #6 since Decliner no longer touches any blizzard frames
  • now tracking realms, uniquely identifying players
  • addon loaded message now compatible with !sh
  • DeclinerAllowed now raises a defined error if the first argument is not a string
  • DeclinerPlayerTrack is now a function named DeclinerTrack
  • refined loading process
  • more visual feedback when disabling options
  • rearranged option columns (the action columns such as all the channel invite options, duel request options, etc)
  • another pass at UIErrorsFrame and system message filtering efficiency
  • myriad of other minor changes

Jul 19, 2016 at 22:01 UTC

  • removed WoD compatibilities, now fully updated for legion
  • more code reformatting
  • string and filtering efficiency for chat messages and open invites
  • transparency note for usage of CHAT_MSG_ADDON due to recent problems with scammers
  • simple fix for option commands not opening the correct addon options panel instead of double workaround
  • sound easter eggs now tell you the sound id they played in their tooltip, along with an icon to reflect if it exists or not

Jul 04, 2016 at 02:35 UTC

  • fixed bug that may allow some interactions if one was in a party
  • fixed intermittent error with declined trades
  • major reformat of entire code to localize as many elements as possible
  • reorganized whisper and spam tracking, information now available in the DeclinerPlayerTrack table
    • code comments for DeclinerAllowed and DeclinerPlayerTrack fleshed out and now located at the top of dclcore.lua
  • more elaborate debugging, now with a log viewable in the savedvariables file. to view ingame, /dump Decliner_SV.log
  • no longer relying on Ambiguate()
  • simplified UI_INFO_MESSAGE filtering
  • now printing notification if someone invites you while you're in a group, spam controlled normally. the "in a group" message was already blocked before if it came from a stranger
  • 1
  • 2
  • 3
  • 4
  • Next