prompt: We are currently solving the following issue within our repository. Here is the issue text:
  --- BEGIN ISSUE ---
  Add `.clearpronouns` command
  ### The problem
  Users might set their pronouns by mistake or just to test the functionality and then they are stuck.
  
  ### The solution
  
  Add an "unsetpronouns" that deletes pronoun information for the nick. 
  Something like this might work. 
  
  ```python
  @plugin.command('unsetpronouns')
  def unset_pronouns(bot, trigger):
          bot.db.delete_nick_value(trigger.nick, 'pronouns')
  ```
  
  
  --- END ISSUE ---
  
  Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
  --- BEGIN FILES ---
  Path: `sopel/modules/pronouns.py`
  Content:
  ```
  1 """
  2 pronouns.py - Sopel Pronouns Plugin
  3 Copyright © 2016, Elsie Powell
  4 Licensed under the Eiffel Forum License 2.
  5 
  6 https://sopel.chat
  7 """
  8 from __future__ import generator_stop
  9 
  10 from sopel import plugin
  11 
  12 
  13 # Copied from pronoun.is, leaving a *lot* out. If
  14 # https://github.com/witch-house/pronoun.is/pull/96 gets merged, using that
  15 # would be a lot easier.
  16 # If ambiguous, the earlier one will be used.
  17 KNOWN_SETS = {
  18     "ze/hir": "ze/hir/hir/hirs/hirself",
  19     "ze/zir": "ze/zir/zir/zirs/zirself",
  20     "they/.../themselves": "they/them/their/theirs/themselves",
  21     "they/.../themself": "they/them/their/theirs/themself",
  22     "she/her": "she/her/her/hers/herself",
  23     "he/him": "he/him/his/his/himself",
  24     "xey/xem": "xey/xem/xyr/xyrs/xemself",
  25     "sie/hir": "sie/hir/hir/hirs/hirself",
  26     "it/it": "it/it/its/its/itself",
  27     "ey/em": "ey/em/eir/eirs/eirself",
  28 }
  29 
  30 
  31 @plugin.command('pronouns')
  32 @plugin.example('.pronouns Embolalia')
  33 def pronouns(bot, trigger):
  34     """Show the pronouns for a given user, defaulting to the current user if left blank."""
  35     if not trigger.group(3):
  36         pronouns = bot.db.get_nick_value(trigger.nick, 'pronouns')
  37         if pronouns:
  38             say_pronouns(bot, trigger.nick, pronouns)
  39         else:
  40             bot.reply("I don't know your pronouns! You can set them with "
  41                       "{}setpronouns".format(bot.config.core.help_prefix))
  42     else:
  43         pronouns = bot.db.get_nick_value(trigger.group(3), 'pronouns')
  44         if pronouns:
  45             say_pronouns(bot, trigger.group(3), pronouns)
  46         elif trigger.group(3) == bot.nick:
  47             # You can stuff an entry into the database manually for your bot's
  48             # gender, but like… it's a bot.
  49             bot.say(
  50                 "I am a bot. Beep boop. My pronouns are it/it/its/its/itself. "
  51                 "See https://pronoun.is/it for examples."
  52             )
  53         else:
  54             bot.reply("I don't know {}'s pronouns. They can set them with "
  55                       "{}setpronouns".format(trigger.group(3),
  56                                              bot.config.core.help_prefix))
  57 
  58 
  59 def say_pronouns(bot, nick, pronouns):
  60     for short, set_ in KNOWN_SETS.items():
  61         if pronouns == set_:
  62             break
  63         short = pronouns
  64 
  65     bot.say("{}'s pronouns are {}. See https://pronoun.is/{} for "
  66             "examples.".format(nick, pronouns, short))
  67 
  68 
  69 @plugin.command('setpronouns')
  70 @plugin.example('.setpronouns fae/faer/faer/faers/faerself')
  71 @plugin.example('.setpronouns they/them/theirs')
  72 @plugin.example('.setpronouns they/them')
  73 def set_pronouns(bot, trigger):
  74     """Set your pronouns."""
  75     pronouns = trigger.group(2)
  76     if not pronouns:
  77         bot.reply('What pronouns do you use?')
  78         return
  79 
  80     disambig = ''
  81     requested_pronoun_split = pronouns.split("/")
  82     if len(requested_pronoun_split) < 5:
  83         matching = []
  84         for known_pronoun_set in KNOWN_SETS.values():
  85             known_pronoun_split = known_pronoun_set.split("/")
  86             if known_pronoun_set.startswith(pronouns + "/") or (
  87                 len(requested_pronoun_split) == 3
  88                 and (
  89                     (
  90                         # "they/.../themself"
  91                         requested_pronoun_split[1] == "..."
  92                         and requested_pronoun_split[0] == known_pronoun_split[0]
  93                         and requested_pronoun_split[2] == known_pronoun_split[4]
  94                     )
  95                     or (
  96                         # "they/them/theirs"
  97                         requested_pronoun_split[0:2] == known_pronoun_split[0:2]
  98                         and requested_pronoun_split[2] == known_pronoun_split[3]
  99                     )
  100                 )
  101             ):
  102                 matching.append(known_pronoun_set)
  103 
  104         if len(matching) == 0:
  105             bot.reply(
  106                 "I'm sorry, I don't know those pronouns. "
  107                 "You can give me a set I don't know by formatting it "
  108                 "subject/object/possessive-determiner/possessive-pronoun/"
  109                 "reflexive, as in: they/them/their/theirs/themselves"
  110             )
  111             return
  112 
  113         pronouns = matching[0]
  114         if len(matching) > 1:
  115             disambig = " Or, if you meant one of these, please tell me: {}".format(
  116                 ", ".join(matching[1:])
  117             )
  118 
  119     bot.db.set_nick_value(trigger.nick, 'pronouns', pronouns)
  120     bot.reply(
  121         "Thanks for telling me! I'll remember you use {}.{}".format(pronouns, disambig)
  122     )
  123
  ```
  --- END FILES ---
  
  Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.
  
  Here is an example:
  
  ```diff
  diff --git a/examples/server_async.py b/examples/server_async.py
  --- a/examples/server_async.py
  +++ b/examples/server_async.py
  @@ -313,4 +313,4 @@
   
   
   if __name__ == "__main__":
  -    asyncio.run(run_async_server("."), debug=True)
  +    asyncio.run(run_async_server(), debug=True)
  diff --git a/examples/server_sync.py b/examples/server_sync.py
  --- a/examples/server_sync.py
  +++ b/examples/server_sync.py
  @@ -313,5 +313,5 @@
   
   
   if __name__ == "__main__":
  -    server = run_sync_server(".")
  +    server = run_sync_server()
       server.shutdown()
  
  ```
  
golden_diff: diff --git a/sopel/modules/pronouns.py b/sopel/modules/pronouns.py
  --- a/sopel/modules/pronouns.py
  +++ b/sopel/modules/pronouns.py
  @@ -120,3 +120,10 @@
       bot.reply(
           "Thanks for telling me! I'll remember you use {}.{}".format(pronouns, disambig)
       )
  +
  +
  +@plugin.command('clearpronouns')
  +def unset_pronouns(bot, trigger):
  +    """Clear pronouns for the given user."""
  +    bot.db.delete_nick_value(trigger.nick, 'pronouns')
  +    bot.reply("Okay, I'll forget your pronouns.")
  
verification_info: {"golden_diff": "diff --git a/sopel/modules/pronouns.py b/sopel/modules/pronouns.py\n--- a/sopel/modules/pronouns.py\n+++ b/sopel/modules/pronouns.py\n@@ -120,3 +120,10 @@\n     bot.reply(\n         \"Thanks for telling me! I'll remember you use {}.{}\".format(pronouns, disambig)\n     )\n+\n+\n+@plugin.command('clearpronouns')\n+def unset_pronouns(bot, trigger):\n+    \"\"\"Clear pronouns for the given user.\"\"\"\n+    bot.db.delete_nick_value(trigger.nick, 'pronouns')\n+    bot.reply(\"Okay, I'll forget your pronouns.\")\n", "issue": "Add `.clearpronouns` command\n### The problem\r\nUsers might set their pronouns by mistake or just to test the functionality and then they are stuck.\r\n\r\n### The solution\r\n\r\nAdd an \"unsetpronouns\" that deletes pronoun information for the nick. \r\nSomething like this might work. \r\n\r\n```python\r\n@plugin.command('unsetpronouns')\r\ndef unset_pronouns(bot, trigger):\r\n        bot.db.delete_nick_value(trigger.nick, 'pronouns')\r\n```\r\n\n", "before_files": [{"content": "\"\"\"\npronouns.py - Sopel Pronouns Plugin\nCopyright \u00a9 2016, Elsie Powell\nLicensed under the Eiffel Forum License 2.\n\nhttps://sopel.chat\n\"\"\"\nfrom __future__ import generator_stop\n\nfrom sopel import plugin\n\n\n# Copied from pronoun.is, leaving a *lot* out. If\n# https://github.com/witch-house/pronoun.is/pull/96 gets merged, using that\n# would be a lot easier.\n# If ambiguous, the earlier one will be used.\nKNOWN_SETS = {\n    \"ze/hir\": \"ze/hir/hir/hirs/hirself\",\n    \"ze/zir\": \"ze/zir/zir/zirs/zirself\",\n    \"they/.../themselves\": \"they/them/their/theirs/themselves\",\n    \"they/.../themself\": \"they/them/their/theirs/themself\",\n    \"she/her\": \"she/her/her/hers/herself\",\n    \"he/him\": \"he/him/his/his/himself\",\n    \"xey/xem\": \"xey/xem/xyr/xyrs/xemself\",\n    \"sie/hir\": \"sie/hir/hir/hirs/hirself\",\n    \"it/it\": \"it/it/its/its/itself\",\n    \"ey/em\": \"ey/em/eir/eirs/eirself\",\n}\n\n\n@plugin.command('pronouns')\n@plugin.example('.pronouns Embolalia')\ndef pronouns(bot, trigger):\n    \"\"\"Show the pronouns for a given user, defaulting to the current user if left blank.\"\"\"\n    if not trigger.group(3):\n        pronouns = bot.db.get_nick_value(trigger.nick, 'pronouns')\n        if pronouns:\n            say_pronouns(bot, trigger.nick, pronouns)\n        else:\n            bot.reply(\"I don't know your pronouns! You can set them with \"\n                      \"{}setpronouns\".format(bot.config.core.help_prefix))\n    else:\n        pronouns = bot.db.get_nick_value(trigger.group(3), 'pronouns')\n        if pronouns:\n            say_pronouns(bot, trigger.group(3), pronouns)\n        elif trigger.group(3) == bot.nick:\n            # You can stuff an entry into the database manually for your bot's\n            # gender, but like\u2026 it's a bot.\n            bot.say(\n                \"I am a bot. Beep boop. My pronouns are it/it/its/its/itself. \"\n                \"See https://pronoun.is/it for examples.\"\n            )\n        else:\n            bot.reply(\"I don't know {}'s pronouns. They can set them with \"\n                      \"{}setpronouns\".format(trigger.group(3),\n                                             bot.config.core.help_prefix))\n\n\ndef say_pronouns(bot, nick, pronouns):\n    for short, set_ in KNOWN_SETS.items():\n        if pronouns == set_:\n            break\n        short = pronouns\n\n    bot.say(\"{}'s pronouns are {}. See https://pronoun.is/{} for \"\n            \"examples.\".format(nick, pronouns, short))\n\n\n@plugin.command('setpronouns')\n@plugin.example('.setpronouns fae/faer/faer/faers/faerself')\n@plugin.example('.setpronouns they/them/theirs')\n@plugin.example('.setpronouns they/them')\ndef set_pronouns(bot, trigger):\n    \"\"\"Set your pronouns.\"\"\"\n    pronouns = trigger.group(2)\n    if not pronouns:\n        bot.reply('What pronouns do you use?')\n        return\n\n    disambig = ''\n    requested_pronoun_split = pronouns.split(\"/\")\n    if len(requested_pronoun_split) < 5:\n        matching = []\n        for known_pronoun_set in KNOWN_SETS.values():\n            known_pronoun_split = known_pronoun_set.split(\"/\")\n            if known_pronoun_set.startswith(pronouns + \"/\") or (\n                len(requested_pronoun_split) == 3\n                and (\n                    (\n                        # \"they/.../themself\"\n                        requested_pronoun_split[1] == \"...\"\n                        and requested_pronoun_split[0] == known_pronoun_split[0]\n                        and requested_pronoun_split[2] == known_pronoun_split[4]\n                    )\n                    or (\n                        # \"they/them/theirs\"\n                        requested_pronoun_split[0:2] == known_pronoun_split[0:2]\n                        and requested_pronoun_split[2] == known_pronoun_split[3]\n                    )\n                )\n            ):\n                matching.append(known_pronoun_set)\n\n        if len(matching) == 0:\n            bot.reply(\n                \"I'm sorry, I don't know those pronouns. \"\n                \"You can give me a set I don't know by formatting it \"\n                \"subject/object/possessive-determiner/possessive-pronoun/\"\n                \"reflexive, as in: they/them/their/theirs/themselves\"\n            )\n            return\n\n        pronouns = matching[0]\n        if len(matching) > 1:\n            disambig = \" Or, if you meant one of these, please tell me: {}\".format(\n                \", \".join(matching[1:])\n            )\n\n    bot.db.set_nick_value(trigger.nick, 'pronouns', pronouns)\n    bot.reply(\n        \"Thanks for telling me! I'll remember you use {}.{}\".format(pronouns, disambig)\n    )\n", "path": "sopel/modules/pronouns.py"}], "after_files": [{"content": "\"\"\"\npronouns.py - Sopel Pronouns Plugin\nCopyright \u00a9 2016, Elsie Powell\nLicensed under the Eiffel Forum License 2.\n\nhttps://sopel.chat\n\"\"\"\nfrom __future__ import generator_stop\n\nfrom sopel import plugin\n\n\n# Copied from pronoun.is, leaving a *lot* out. If\n# https://github.com/witch-house/pronoun.is/pull/96 gets merged, using that\n# would be a lot easier.\n# If ambiguous, the earlier one will be used.\nKNOWN_SETS = {\n    \"ze/hir\": \"ze/hir/hir/hirs/hirself\",\n    \"ze/zir\": \"ze/zir/zir/zirs/zirself\",\n    \"they/.../themselves\": \"they/them/their/theirs/themselves\",\n    \"they/.../themself\": \"they/them/their/theirs/themself\",\n    \"she/her\": \"she/her/her/hers/herself\",\n    \"he/him\": \"he/him/his/his/himself\",\n    \"xey/xem\": \"xey/xem/xyr/xyrs/xemself\",\n    \"sie/hir\": \"sie/hir/hir/hirs/hirself\",\n    \"it/it\": \"it/it/its/its/itself\",\n    \"ey/em\": \"ey/em/eir/eirs/eirself\",\n}\n\n\n@plugin.command('pronouns')\n@plugin.example('.pronouns Embolalia')\ndef pronouns(bot, trigger):\n    \"\"\"Show the pronouns for a given user, defaulting to the current user if left blank.\"\"\"\n    if not trigger.group(3):\n        pronouns = bot.db.get_nick_value(trigger.nick, 'pronouns')\n        if pronouns:\n            say_pronouns(bot, trigger.nick, pronouns)\n        else:\n            bot.reply(\"I don't know your pronouns! You can set them with \"\n                      \"{}setpronouns\".format(bot.config.core.help_prefix))\n    else:\n        pronouns = bot.db.get_nick_value(trigger.group(3), 'pronouns')\n        if pronouns:\n            say_pronouns(bot, trigger.group(3), pronouns)\n        elif trigger.group(3) == bot.nick:\n            # You can stuff an entry into the database manually for your bot's\n            # gender, but like\u2026 it's a bot.\n            bot.say(\n                \"I am a bot. Beep boop. My pronouns are it/it/its/its/itself. \"\n                \"See https://pronoun.is/it for examples.\"\n            )\n        else:\n            bot.reply(\"I don't know {}'s pronouns. They can set them with \"\n                      \"{}setpronouns\".format(trigger.group(3),\n                                             bot.config.core.help_prefix))\n\n\ndef say_pronouns(bot, nick, pronouns):\n    for short, set_ in KNOWN_SETS.items():\n        if pronouns == set_:\n            break\n        short = pronouns\n\n    bot.say(\"{}'s pronouns are {}. See https://pronoun.is/{} for \"\n            \"examples.\".format(nick, pronouns, short))\n\n\n@plugin.command('setpronouns')\n@plugin.example('.setpronouns fae/faer/faer/faers/faerself')\n@plugin.example('.setpronouns they/them/theirs')\n@plugin.example('.setpronouns they/them')\ndef set_pronouns(bot, trigger):\n    \"\"\"Set your pronouns.\"\"\"\n    pronouns = trigger.group(2)\n    if not pronouns:\n        bot.reply('What pronouns do you use?')\n        return\n\n    disambig = ''\n    requested_pronoun_split = pronouns.split(\"/\")\n    if len(requested_pronoun_split) < 5:\n        matching = []\n        for known_pronoun_set in KNOWN_SETS.values():\n            known_pronoun_split = known_pronoun_set.split(\"/\")\n            if known_pronoun_set.startswith(pronouns + \"/\") or (\n                len(requested_pronoun_split) == 3\n                and (\n                    (\n                        # \"they/.../themself\"\n                        requested_pronoun_split[1] == \"...\"\n                        and requested_pronoun_split[0] == known_pronoun_split[0]\n                        and requested_pronoun_split[2] == known_pronoun_split[4]\n                    )\n                    or (\n                        # \"they/them/theirs\"\n                        requested_pronoun_split[0:2] == known_pronoun_split[0:2]\n                        and requested_pronoun_split[2] == known_pronoun_split[3]\n                    )\n                )\n            ):\n                matching.append(known_pronoun_set)\n\n        if len(matching) == 0:\n            bot.reply(\n                \"I'm sorry, I don't know those pronouns. \"\n                \"You can give me a set I don't know by formatting it \"\n                \"subject/object/possessive-determiner/possessive-pronoun/\"\n                \"reflexive, as in: they/them/their/theirs/themselves\"\n            )\n            return\n\n        pronouns = matching[0]\n        if len(matching) > 1:\n            disambig = \" Or, if you meant one of these, please tell me: {}\".format(\n                \", \".join(matching[1:])\n            )\n\n    bot.db.set_nick_value(trigger.nick, 'pronouns', pronouns)\n    bot.reply(\n        \"Thanks for telling me! I'll remember you use {}.{}\".format(pronouns, disambig)\n    )\n\n\n@plugin.command('clearpronouns')\ndef unset_pronouns(bot, trigger):\n    \"\"\"Clear pronouns for the given user.\"\"\"\n    bot.db.delete_nick_value(trigger.nick, 'pronouns')\n    bot.reply(\"Okay, I'll forget your pronouns.\")\n", "path": "sopel/modules/pronouns.py"}]}