The UESPWiki – Your source for The Elder Scrolls since 1995
Jump to: navigation, search

This is a bot run by RobinHood70. It has since been retired and replaced by its successor, HoodBot.

If at any time you notice this account making inappropriate edits, please post a message on its talk page; the bot will stop whatever it's doing if its talk page is modified.

Purpose of the Bot[edit]

The most frequent task the bot is used for is to produce Excel reports listing template calls and their parameters. It's also commonly used to make bulk edits to pages on UESP.

Bot Tasks[edit]

All editors are welcome to propose tasks that they think HotnBOThered could be used for. Please do so on the Bot Requests page and not the bot's talk page.
Current Task: None.

The bot has a wide array of tasks:

Task Description
Recurring Tasks
Active Idle The basic template used to design and test all other tasks. Bot logs on and idles, monitoring its talk page and a local stop button until stopped.
Add Template to Category Adds a given template to each page in a category.
Bulk Replace Replaces a list of page links with corresponding new links. Used to update links when multiple pages have been moved or duplicated.
Bulk Template Edit Modifies a template or templates on the pages they're used on. Code for this is modified at need; jobs that might be re-run later will be saved separately and the code restored as necessary.
Find Unprotected Pages Produces a list of pages which should be protected but aren't. Optionally, protects those pages and if not already present, adds page-appropriate {{Protection}}, {{Archive Header}}, and/or {{Archive Footer}} templates.
*If more than one entry applies, the highest one takes precedence. In theory, some entries could be combined but are left separate both to ensure they don't get included in another section accidentally, and to allow for easier changes should needs change.
Get Category Links Produces a local text file listing what links to each page in a category tree. The default category is Marked for Deletion.
Get Page Links Finds all links/redirects to a page and dumps text of link to a local file.
Get Template Usage Finds all links to a template including redirects and dumps text of template call to a local file.
Namespace Template Replacer Recursively replaces all instances of namespace shortcuts with direct links. Assumes that the NS_ID field at MediaWiki:Uespnamespacelist will be the name of the shortcut template.
Note: Namespace restrictions are overridden for this task: ignores only Main, Template, User, and User talk space.
Revert by Job Number Revert all bot edits of a specific job and log errors (such as edit conflicts) to a local file. It's currently based around the idea that all jobs will include a comment starting with "Job #x:", but is readily adaptable to other criteria if needed.
Note: By design, this task ignores the normal namespace limitations in order to fully revert any deliberate or rogue edits made outside the normal namespaces.

All tasks will, by default, be logged in the activity log (see above). This can be toggled off, however, so as not to unnecessarily clutter the log when doing multiple read-only operations that nobody really cares about. :)

Under construction[edit]

Task Description Status
Save Race/Class Data Add {{Save Named Values}} to all Race/Class pages for Heatlh/Magicka generator in Aleph and Gimel. Long-delayed due to CFS brain-fog issues. Seems viable, and all required pages already exist. Race data, at least, could also be useful elsewhere. Will probably start this soon, especially with the new Template class making this a breeze (or at least it should...we'll see).
Watchlist Cleaner Would go through Watchlist and determine date of last edit to page/talk page. Unwatch any that haven't been edited in more than a week and aren't on a perma-watch list. (Those with server access will undoubtedly understand the need for this. :Þ) Only an idea at this point...may require a little tweaking in order to log in as me, but still log to its own page.
Book Checker Would go through the books in the Construction Sets/Creation Kit and compare the Lore data to the in-game data. Would need to be able to strip out links on the Lore side and do at least primitive parsing of the book's HTML data, then provide some kind of diff for inspection...ideally on-screen with a browser, but maybe using something like xdiff. Only an idea at this point.

Bot Control[edit]

The bot will not be running continously on the server. Rather, it will be a program on my machine that will be run only when there is a specific task that needs to be done. HotnBOThered uses its own ruleset to prevent it from running amok, which includes:

  • No reads or edits will be made by the program unless it is logged in.
  • The bot will exclude the following groups of namespaces by default:
    • Main, File, Help, Image, Media, MediaWiki, Project, Special
    • Template
    • User
    • All Talk pages
    Flipping that around, default included namespaces are:
    • Category, General
    • All gamespaces, including Books, Lore, and the Tes#Mod spaces
    Each group can be toggled individually along with custom exclusion lists, like include * talk but exclude User talk.
  • The bot's speed will self-adjust to adapt to server lag.
  • The bot will stop if its talk page is edited.


The program is written using the DotNetWikiBot framework (v3.0.0) and Microsoft Visual C# 2013 Express Edition. As my knowledge of the two increases, the design of HnB is evolving. Some of the design highlights currently include:

  • Semi-adaptive form design that lists all available tasks and shows/hides generic controls as needed to prompt for data. I'd love to make it a bit more automated, but haven't yet found the time.
  • Estimated completion time of current job in both local time and UTC.
  • Multi-threaded design allows smooth updates and quick response of the controls; could conceivably be expanded to allow multiple tasks to run simultaneously though it would need massive re-working of the code to do so, which I see no reason to do.
  • Base/derived class structure for tasks, allowing/forcing method and property overrides to encourage consistency between tasks while maintaining a good degree of flexibility.
  • Template class that allows easy manipulation of template calls while preserving existing formatting as much as possible by default. Automatically removes repeated parameters, providing a warning back to the caller that it has done so. It works well, but the implementation is a bit kludgey and will probably need some re-writing at some point.
  • Adaptive speed adjustment based on previous page reads or writes. Includes processing time in its count, so if a page takes one second to process and the wait time is six seconds, it'll wait only five more seconds before it saves. Checks bot talk page each time a page is saved and throws an exception if the talk page has changed.
  • Warning popups. Warnings pop up in a separate window for increased visibility.
  • Optional side-by-side display of old and new page text (or any other comparison text) as the tasks run. Customizable on a per-task basis. In theory, there's nothing preventing this from being expanded to include human-assisted changes in the future.
  • (Under Construction) Play, Step, Pause, and Stop controls. The basic framework for them is there on the back-end, the changes just needs to be propagated to each task. The front-end has no support as yet, and only acknowledges the stop button.