User:DYKUpdateBot/Manual

This page explains how DYKUpdateBot works in a human-friendly language. It's really more a collection of facts than a manual. Of course, the best way to learn about the bot is to read the source code.

DYKUpdateBot runs on an infinite loop. Every 10 minutes it checks whether it's time to update DYK. It calculates the next update time by taking the last update time from Template:Did you know/Next update/Time and adding the number of seconds specified at User:DYKUpdateBot/Time Between Updates. If there are fewer than 10 minutes left until the next update, the bot will check again at the scheduled time of the next update. The bot uses the  function in Python to sleep, so it's not guaranteed to wake up at precisely the right time, but it's within 5 seconds in my experience.

If the update is less than 2 hours away, the bot checks the formatting of the pages required for the next update. The bot makes sure that both T:DYK and the next queue have and, the incoming image is protected, and the next queue is tagged with DYKbotdo. If the next queue isn't tagged with DYKbotdo, DYKUpdateBot will post to WT:DYK.

Once it's time to update, the bot does a few tasks:
 * Reads from the next queue and takes everything between and as the new set.
 * Reads from the T:DYK and takes everything between and as the old set.
 * Replaces the old set with the new on T:DYK and edits the page.
 * Purges the Main Page.
 * Edits Template:Did you know/Next update/Time, replacing it with the time of the edit to T:DYK. The bot rounds down to the nearest minute.
 * Archives the old set at Recent additions. If there isn't a section for the day, the bot will create one. The bot relies on the to figure out where to put the hooks; if it isn't there, the bot will put the hooks in wrong spot and break the formatting (example).
 * Tags article talk pages with DYK talk. If the talk page is already tagged with Article history, the bot will add the,  , and   parameters to it instead of adding a new tag. The bot makes sure that the corresponding article exists before tagging the talk page, and it will also follow redirects. The bot will try to find the hook for the article by looking for the article title in the set of hooks (case-insensitive). The bot won't tag example credits.
 * Credits users. The bot makes sure the user is registered or an anonymous editor with contributions before adding the credit. Bot also checks if the user was renamed, and will credit the renamed user. It will follow redirects and won't credit User:Editor or User:Nominator. The bot doesn't use its own signature, but instead reads the signature from the DYKbotdo tag in the queue.
 * Tags the file (or the original, in the case of a cropped image) with DYKfile.
 * Clears the queue with.
 * Increments the next queue count.

Other notes:
 * The bot sees $ just like any other character, so there's no need to use dollarsign.
 * The bot will drift to sync with 00:00 UTC if necessary. The drift is calculated in the update time written to Template:Did you know/Next update/Time. User:DYKUpdateBot/ResyncDrift specifies the maximum amount the bot can drift per update. To disable drift, set both values to 0 on that page. See User:DYKUpdateBot/ResyncDrift and its editnotice for more technical information on automatic resyncing.
 * The bot outputs errors it encounters to User:DYKUpdateBot/Errors. The bot will clear the page once it completes a run with no errors, but that doesn't mean the previous error(s) is/are taken care of. For example, if the bot sees username that isn't registered, it will edit the errors page after its run saying that the username isn't valid. About 10 minutes later it will then clear the page because it has successfully completed a status check. However, someone should still go back and see why the error occurred and if the credit was meant to go to someone else.
 * The bot can match hooks that use templates (like HMS) with their titles.
 * The bot runs on a WMF Toolforge server.
 * Please let me know if you see any bugs.