docstr: Performs DTMF decoding
code: def decode(self, ctext: T) -> Optional[U]:
      """
      Performs DTMF decoding
      """
      logging.debug("Attempting DTMF decoder")
      ctext_decoded = ""
      ctext = re.sub(r"[,;:\-\/\s]", "", ctext)
      ctext = " ".join(
          ctext[i : i + 7] for i in range(0, len(ctext), 7)
      )
      ctext_split = ctext.split(" ")
      dtmf_keys = self.DTMF_DICT.keys()
  
      for i in ctext_split:
          if i in dtmf_keys:
              ctext_decoded += self.DTMF_DICT[i]
          else:
              return None
      logging.info(f"DTMF successful, returning '{ctext_decoded}'")
      return ctext_decoded
  
file_path: Ciphey/ciphey/basemods/Decoders/dtmf.py
imports: import re
  from typing import Dict, Optional
  import logging
  from rich.logging import RichHandler
  from ciphey.iface import Config, Decoder, ParamSpec, T, Translation, U, registry
label_desc: Use image node_id 1 for calling the Dtmf obj's underlying member method code with example usage: obj.decode(ctext) and returns: ctext_decoded, None