See also



The library first started as a single file script that I didn’t make versions of. When I decided to turn it into a library, I’ve set the version number based on the amount of commits I have made since the start.


[Breaking change]#

Means that the change will break functionality from previous version.

[Potentially breaking change]#

The change could break functionality from previous versions but only if it was used in a certain way.



  • Preserve objects state on shutdown (accounts, guilds, …,) [logger not preserved]:

    • function’s save_to_file parameter or Preserve state on shutdown checkbox inside Schema definition tab of the GUI to configure.

  • Analytics:

    • Invite link tracking

    • GUILD: invite_track parameter for tracking invite links

  • File outputs:

    • Changed all paths’ defaults to be stored under /<user-home-dir>/daf/ folder to prevent permission problems

  • AutoGUILD interval default changed to timedelta(minutes=1)

  • xMESSAGE start_in now accepts datetime.datetime - send at specific datetime.

  • GUI:

    • Live object view for viewing and live updating objects.

    • Invite link analytics

    • Intents can now also be defined from the GUI.

    • Fixed schema save for enums (enums are not JSON serializable)

  • Lowered logging-in timeout to 15 seconds

  • [Breaking change] Removed DEPRECATED parameters for and daf.core.initialize():

    • token

    • server_list

    • is_user

    • server_log_output

    • sql_manager

    • intents

    • proxy

  • [Breaking change] Removed DEPRECATED function client.get_client. This is replaced with daf.core.get_accounts(), from which the Discord client can be obtained by daf.client.ACCOUNT.client for each account.

  • [Breaking change] Parameter debug in function / daf.core.initialize() no longer accepts bool. This was deprecated in some older version and now removed.

  • [Breaking change] Removed DEPRECATED functionality inside add_object that allowed guilds to be added without passing the account to snowflake parameter. Before it implicitly took the first account from the shill list. This has been deprecated since v2.4.

  • [Breaking change] Removed DEPRECATED functionality inside add_object that allowed snowflake ID and Discord’s objects to be passed as snowflake parameter.

  • [Breaking change] Removed DEPRECATED function get_guild_user, which has been deprecated since v2.4.

  • [Breaking change] xMESSAGE types no longer accept bool for parameter start_in. This has been deprecated since v2.1.


  • Restored support for Python v3.8


  • Fixed logger not being converted properly when exporting GUI data into a script.


  • Graphical User Interface - GUI for controlling the framework, defining the schema (with backup and restore) and script generation!

  • Logging:

    • Added author field to all logging managers (tells us which account sent the message).

    • SQL analysis


  • Fixed failure without SQL


  • [Breaking change] Removed EMBED object, use daf.discord.Embed instead.

  • [Breaking change] Removed timing module since it only contained deprecated objects.

  • [Breaking change] Minumum Python version has been bumbed to Python v3.10.



  • Fixed missing documentation members

v2.4.2 (v2.3.4)#

  • Fixed channel verification bug:

    • Fixes bug where messages try to be sent into channels that have not passed verification (complete button)


  • Multiple accounts support:

    • Added daf.client.ACCOUNT for running multiple accounts at once. Proxies are strongly recommended!

    • Deprecated use of:

      • token,

      • is_user,

      • proxy,

      • server_list,

      • intents

      inside the function.

    • New function daf.core.get_accounts() that returns the list of all running accounts in the framework.

  • Deprecated add_object() and remove_object() functions accepting API wrapper objects or int type for the snowflake parameter.

  • Deprecated daf.core.get_guild_user function due to multiple accounts support.

  • Deprecated daf.client.get_client function due to multiple accounts support.


  • [Breaking change] Removed exceptions module, meaning that there are no DAFError derived exceptions from this version on. They are replaced with build-in Python exceptions.

  • Automatic scheme generation and management:

  • Debug levels:

  • Messages objects period automatically increases if it is less than slow-mode timeout.

  • The data_function’s input function can now also be async.


  • user_callback parameter for function can now also be a regular function instead of just async.

  • Deprecated daf.dtypes.EMBED, use discord.Embed instead.

  • [Breaking change] Removed get_sql_manager function.

    • Added logging parameter

    • Deprecated parameters server_log_output and sql_manager.

  • Logging manager objects: LoggerJSON, LoggerCSV, LoggerSQL

  • New daf.logging.get_logger() function for retrieving the logger object used.

  • daf.core.initialize() for manual control of asyncio (same as except it is async)

  • SQL:
    • SQL logging now supports Microsoft SQL Server, MySQL, PostgreSQL and SQLite databases.

    • [Breaking change] LoggerSQL’s parameters are re-arranged, new parameters of which, the dialect (mssql, sqlite, mysql, postgresql) parameter must be passed.

  • Development:
    • doc_category decorator for automatic documentation

    • Removed common module and moved constants to appropriate modules


Bug fixes:

  • Fix incorrect parameter name in documentation.


Bug fixes:

  • [Bug]: KeyError: 'code' on rate limit #198.


Bug fixes:

  • #195 VoiceMESSAGE did not delete deleted channels.

  • Exception on initialization of static server list in case any of the messages had failed their initialization.


  • Fixed [Bug]: Predefined servers' errors are not suppressed #189.

  • Support for readthedocs.


  • Changed the import import framework to import daf. Using import framework is now deprecated.

  • remove_after parameter:

    Classes: daf.guild.GUILD, daf.guild.USER, daf.message.TextMESSAGE, daf.message.VoiceMESSAGE, daf.message.DirectMESSAGE

    now support the remove_after parameter which will remove the object from the shilling list when conditions met.

  • Proxies:

    Added support for using proxies. To use a proxy pass the function with a proxy parameter

  • discord.EmbedField:

    [Breaking change] Replaced discord.EmbedField with discord.EmbedField.

  • timedelta:

    start_period and end_period now support timedelta object to specify the send period. Use of int is deprecated

    [Potentially breaking change] Replaced start_now with start_in parameter, deprecated use of bool value.

  • Channel checking:

    daf.TextMESSAGE and daf.VoiceMESSAGE now check if the given channels are actually inside the guild

  • Optionals:

    [Potentially breaking change] Made some functionality optional: voice, proxy and sql - to install use pip install discord-advert-framework[dependency here]


    [Breaking change] Removed the CLIENT object, discord.Client is now used as the CLIENT class is no longer needed due to improved startup

  • Bug fixes:
    Time slippage correction:

    This occurred if too many messages were ready at once, which resulted in discord’s rate limit, causing a permanent slip.


    Fig. 6 Time slippage correction#

    Slow mode correction:

    Whenever a channel was in slow mode, it was not properly handled. This is now fixed.


  • New cool looking web documentation (the one you’re reading now)

  • Added volume parameter to daf.VoiceMESSAGE

  • Changed channel_ids to channels for daf.VoiceMESSAGE and daf.TextMESSAGE. It can now also accept discord.<Type>Channel objects.

  • Changed user_id/ guild_id to snowflake in daf.GUILD and daf.USER. This parameter now also accept discord.Guild (daf.GUILD) and discord.User (daf.USER)

  • Added .update method to some objects for allowing dynamic modifications of initialization parameters.

  • daf.AUDIO now also accepts a YouTube link for streaming YouTube videos.

  • New Exceptions system - most functions now raise exceptions instead of just returning bool to allow better detection of errors.

  • Bug fixes and other small improvements.


  • Added support for logging into a SQL database (MS SQL Server only). See Relational Database Log (SQL).

  • function now accepts discord.Intents.

  • daf.add_object() and daf.remove_object() functions created to allow for dynamic modification of the shilling list.

  • Other small improvements.


  • JSON file logging.

  • Automatic channel removal if channel get’s deleted and message removal if all channels are removed.

  • Improved debug messages.


  • daf.DirectMESSAGE and daf.USER classes created for direct messaging.