docstr: Updates the message in the Slack Channel
  
  Args:
      updated message
      channel_name
      ts  [TimeStamp -> Can be found by running select command, the entire result will be printed in the terminal]
code: def update(self, query: ast.Update):
      """
      Updates the message in the Slack Channel
  
      Args:
          updated message
          channel_name
          ts  [TimeStamp -> Can be found by running select command, the entire result will be printed in the terminal]
      """
  
      # Get the channels list and ids
      channels = self.client.conversations_list(
          types="public_channel,private_channel"
      )["channels"]
      channel_ids = {c["name"]: c["id"] for c in channels}
  
      # Extract comparison conditions from the query
      conditions = extract_comparison_conditions(query.where)
  
      filters = []
      params = {}
  
      keys = list(query.update_columns.keys())
  
      # Build the filters and parameters for the query
      for op, arg1, arg2 in conditions:
          if arg1 == "channel":
              if arg2 in channel_ids:
                  params["channel"] = channel_ids[arg2]
              else:
                  raise ValueError(f"Channel '{arg2}' not found")
  
          if keys[0] == "text":
              params["text"] = str(query.update_columns["text"])
          else:
              raise ValueError(f"Message '{arg2}' not found")
  
          if arg1 == "ts":
              if op == "=":
                  params["ts"] = float(arg2)
              else:
                  raise NotImplementedError(f"Unknown op: {op}")
          else:
              filters.append([op, arg1, arg2])
  
      # check if required parameters are provided
      if (
          "channel" not in params
          or "ts" not in params
          or "text" not in params
      ):
          raise Exception(
              "To update a message in Slack, you need to provide the 'channel', 'ts', and 'text' parameters."
          )
  
      # update message in Slack channel
      try:
          response = self.client.chat_update(
              channel=params["channel"],
              ts=str(params["ts"]),
              text=params["text"].strip(),
          )
      except SlackApiError as e:
          raise Exception(
              f"Error updating message in Slack channel '{params['channel']}' with timestamp '{params['ts']}' and message '{params['text']}': {e.response['error']}"
          )
  
imports: import os
  from datetime import datetime, timezone
  import ast
  from typing import List
  import pandas
  from slack_sdk import WebClient
  from slack_sdk.errors import SlackApiError
  from slack_sdk.web.slack_response import SlackResponse
  from slack_sdk.socket_mode import SocketModeClient
  from slack_sdk.socket_mode.request import SocketModeRequest
  from slack_sdk.socket_mode.response import SocketModeResponse
  from mindsdb.interfaces.chatbot.types import ChatBotMessage
  from mindsdb.utilities import log
  from mindsdb.utilities.config import Config
  from mindsdb_sql.parser import ast
  from mindsdb_sql.parser.ast import ASTNode, Update, Delete
  from mindsdb_sql.planner.utils import query_traversal
  from mindsdb.integrations.libs.api_handler import APIChatHandler, APITable, FuncParser
  from mindsdb.integrations.utilities.sql_utils import extract_comparison_conditions
  from mindsdb.integrations.libs.response import HandlerStatusResponse, HandlerResponse, RESPONSE_TYPE
label_desc: Use image node_id 4 for calling the SlackChannelsTable obj's underlying member method code with example usage: obj.update(query) without return types