prompt: You will be provided with a partial code base and an issue statement explaining a problem to resolve.
  <issue>
  Copy message on respond
  When a message responds it updates it's `text` value and passes itself to the connector.  Due to pointers in Python the next rule to parse the message goes on to parse the response text.
  
  The message respond method should create a shallow copy of itself to pass to the connector, instead of updating itself directly.
  
  
  </issue>
  <code>
  [start of opsdroid/message.py]
  1 """Class to encapsulate a message."""
  2 
  3 
  4 class Message:
  5     # pylint: disable=too-few-public-methods
  6     """A message object."""
  7 
  8     def __init__(self, text, user, room, connector):
  9         """Create object with minimum properties."""
  10         self.text = text
  11         self.user = user
  12         self.room = room
  13         self.connector = connector
  14         self.regex = None
  15 
  16     def respond(self, text):
  17         """Respond to this message using the connector it was created by."""
  18         self.text = text
  19         self.connector.respond(self)
  20
  [end of opsdroid/message.py]
  </code>
  
  I need you to solve this issue by generating a single patch file that I can apply directly to this repository using git apply. Please respond with a single patch file in the following format.
  <patch>
  diff --git a/file.py b/file.py
  --- a/file.py
  +++ b/file.py
  @@ -1,27 +1,35 @@
   def euclidean(a, b):
  -    while b:
  -        a, b = b, a % b
  -    return a
  +    if b == 0:
  +        return a
  +    return euclidean(b, a % b)
   
   
   def bresenham(x0, y0, x1, y1):
       points = []
       dx = abs(x1 - x0)
       dy = abs(y1 - y0)
  -    sx = 1 if x0 < x1 else -1
  -    sy = 1 if y0 < y1 else -1
  -    err = dx - dy
  +    x, y = x0, y0
  +    sx = -1 if x0 > x1 else 1
  +    sy = -1 if y0 > y1 else 1
   
  -    while True:
  -        points.append((x0, y0))
  -        if x0 == x1 and y0 == y1:
  -            break
  -        e2 = 2 * err
  -        if e2 > -dy:
  -            err -= dy
  -            x0 += sx
  -        if e2 < dx:
  -            err += dx
  -            y0 += sy
  +    if dx > dy:
  +        err = dx / 2.0
  +        while x != x1:
  +            points.append((x, y))
  +            err -= dy
  +            if err < 0:
  +                y += sy
  +                err += dx
  +            x += sx
  +    else:
  +        err = dy / 2.0
  +        while y != y1:
  +            points.append((x, y))
  +            err -= dx
  +            if err < 0:
  +                x += sx
  +                err += dy
  +            y += sy
  +
  +    points.append((x, y))
       return points
  
  </patch>
golden_diff: diff --git a/opsdroid/message.py b/opsdroid/message.py
  --- a/opsdroid/message.py
  +++ b/opsdroid/message.py
  @@ -1,5 +1,7 @@
   """Class to encapsulate a message."""
   
  +from copy import copy
  +
   
   class Message:
       # pylint: disable=too-few-public-methods
  @@ -15,5 +17,6 @@
   
       def respond(self, text):
           """Respond to this message using the connector it was created by."""
  -        self.text = text
  -        self.connector.respond(self)
  +        response = copy(self)
  +        response.text = text
  +        self.connector.respond(response)
  
verification_info: {"golden_diff": "diff --git a/opsdroid/message.py b/opsdroid/message.py\n--- a/opsdroid/message.py\n+++ b/opsdroid/message.py\n@@ -1,5 +1,7 @@\n \"\"\"Class to encapsulate a message.\"\"\"\n \n+from copy import copy\n+\n \n class Message:\n     # pylint: disable=too-few-public-methods\n@@ -15,5 +17,6 @@\n \n     def respond(self, text):\n         \"\"\"Respond to this message using the connector it was created by.\"\"\"\n-        self.text = text\n-        self.connector.respond(self)\n+        response = copy(self)\n+        response.text = text\n+        self.connector.respond(response)\n", "issue": "Copy message on respond\nWhen a message responds it updates it's `text` value and passes itself to the connector.  Due to pointers in Python the next rule to parse the message goes on to parse the response text.\n\nThe message respond method should create a shallow copy of itself to pass to the connector, instead of updating itself directly.\n\n", "before_files": [{"content": "\"\"\"Class to encapsulate a message.\"\"\"\n\n\nclass Message:\n    # pylint: disable=too-few-public-methods\n    \"\"\"A message object.\"\"\"\n\n    def __init__(self, text, user, room, connector):\n        \"\"\"Create object with minimum properties.\"\"\"\n        self.text = text\n        self.user = user\n        self.room = room\n        self.connector = connector\n        self.regex = None\n\n    def respond(self, text):\n        \"\"\"Respond to this message using the connector it was created by.\"\"\"\n        self.text = text\n        self.connector.respond(self)\n", "path": "opsdroid/message.py"}]}