prompt: We are currently solving the following issue within our repository. Here is the issue text:
  --- BEGIN ISSUE ---
  add ping/pong response to ping.py
  ### The problem
  The default ping module doesn't include ping/pong despite it's name and I'd rather not replace it just for that (I could move it out of core hacks but why not upstream)!
  
  ### The solution
  Add it, I will after I write this.
  
  ### Example
  
  09:54:36 <+RhinosF1> .ping
  09:54:37 <@ZppixBot-test> Pong!
  
  
  
  --- 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/ping.py`
  Content:
  ```
  1 # coding=utf-8
  2 """
  3 ping.py - Sopel Ping Module
  4 Copyright 2008 (?), Sean B. Palmer, inamidst.com
  5 
  6 https://sopel.chat
  7 """
  8 from __future__ import absolute_import, division, print_function, unicode_literals
  9 
  10 import random
  11 
  12 from sopel.module import priority, rule, thread
  13 
  14 
  15 @rule(r'(?i)(hi|hello|hey),? $nickname[ \t]*$')
  16 def hello(bot, trigger):
  17     greeting = random.choice(('Hi', 'Hey', 'Hello'))
  18     punctuation = random.choice(('', '.', '…', '!'))
  19     bot.say(greeting + ' ' + trigger.nick + punctuation)
  20 
  21 
  22 @rule(r'(?i)(Fuck|Screw) you,? $nickname[ \t]*$')
  23 def rude(bot, trigger):
  24     bot.say('Watch your mouth, ' + trigger.nick + ', or I\'ll tell your mother!')
  25 
  26 
  27 @rule('$nickname!')
  28 @priority('high')
  29 @thread(False)
  30 def interjection(bot, trigger):
  31     bot.say(trigger.nick + '!')
  32
  ```
  --- 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/ping.py b/sopel/modules/ping.py
  --- a/sopel/modules/ping.py
  +++ b/sopel/modules/ping.py
  @@ -9,7 +9,7 @@
   
   import random
   
  -from sopel.module import priority, rule, thread
  +from sopel.module import commands, priority, rule, thread
   
   
   @rule(r'(?i)(hi|hello|hey),? $nickname[ \t]*$')
  @@ -29,3 +29,9 @@
   @thread(False)
   def interjection(bot, trigger):
       bot.say(trigger.nick + '!')
  +
  +
  +@commands('ping')
  +def ping(bot, trigger):
  +    """Reply to ping command."""
  +    bot.reply('Pong!')
  
verification_info: {"golden_diff": "diff --git a/sopel/modules/ping.py b/sopel/modules/ping.py\n--- a/sopel/modules/ping.py\n+++ b/sopel/modules/ping.py\n@@ -9,7 +9,7 @@\n \n import random\n \n-from sopel.module import priority, rule, thread\n+from sopel.module import commands, priority, rule, thread\n \n \n @rule(r'(?i)(hi|hello|hey),? $nickname[ \\t]*$')\n@@ -29,3 +29,9 @@\n @thread(False)\n def interjection(bot, trigger):\n     bot.say(trigger.nick + '!')\n+\n+\n+@commands('ping')\n+def ping(bot, trigger):\n+    \"\"\"Reply to ping command.\"\"\"\n+    bot.reply('Pong!')\n", "issue": "add ping/pong response to ping.py\n### The problem\r\nThe default ping module doesn't include ping/pong despite it's name and I'd rather not replace it just for that (I could move it out of core hacks but why not upstream)!\r\n\r\n### The solution\r\nAdd it, I will after I write this.\r\n\r\n### Example\r\n\r\n09:54:36 <+RhinosF1> .ping\r\n09:54:37 <@ZppixBot-test> Pong!\r\n\r\n\n", "before_files": [{"content": "# coding=utf-8\n\"\"\"\nping.py - Sopel Ping Module\nCopyright 2008 (?), Sean B. Palmer, inamidst.com\n\nhttps://sopel.chat\n\"\"\"\nfrom __future__ import absolute_import, division, print_function, unicode_literals\n\nimport random\n\nfrom sopel.module import priority, rule, thread\n\n\n@rule(r'(?i)(hi|hello|hey),? $nickname[ \\t]*$')\ndef hello(bot, trigger):\n    greeting = random.choice(('Hi', 'Hey', 'Hello'))\n    punctuation = random.choice(('', '.', '\u2026', '!'))\n    bot.say(greeting + ' ' + trigger.nick + punctuation)\n\n\n@rule(r'(?i)(Fuck|Screw) you,? $nickname[ \\t]*$')\ndef rude(bot, trigger):\n    bot.say('Watch your mouth, ' + trigger.nick + ', or I\\'ll tell your mother!')\n\n\n@rule('$nickname!')\n@priority('high')\n@thread(False)\ndef interjection(bot, trigger):\n    bot.say(trigger.nick + '!')\n", "path": "sopel/modules/ping.py"}], "after_files": [{"content": "# coding=utf-8\n\"\"\"\nping.py - Sopel Ping Module\nCopyright 2008 (?), Sean B. Palmer, inamidst.com\n\nhttps://sopel.chat\n\"\"\"\nfrom __future__ import absolute_import, division, print_function, unicode_literals\n\nimport random\n\nfrom sopel.module import commands, priority, rule, thread\n\n\n@rule(r'(?i)(hi|hello|hey),? $nickname[ \\t]*$')\ndef hello(bot, trigger):\n    greeting = random.choice(('Hi', 'Hey', 'Hello'))\n    punctuation = random.choice(('', '.', '\u2026', '!'))\n    bot.say(greeting + ' ' + trigger.nick + punctuation)\n\n\n@rule(r'(?i)(Fuck|Screw) you,? $nickname[ \\t]*$')\ndef rude(bot, trigger):\n    bot.say('Watch your mouth, ' + trigger.nick + ', or I\\'ll tell your mother!')\n\n\n@rule('$nickname!')\n@priority('high')\n@thread(False)\ndef interjection(bot, trigger):\n    bot.say(trigger.nick + '!')\n\n\n@commands('ping')\ndef ping(bot, trigger):\n    \"\"\"Reply to ping command.\"\"\"\n    bot.reply('Pong!')\n", "path": "sopel/modules/ping.py"}]}