docs: async def click(self, i=None, j=None,
                      *, text=None, filter=None, data=None):
          """
          Calls `telethon.tl.custom.messagebutton.MessageButton.click`
          for the specified button.
  
          Does nothing if the message has no buttons.
  
          Args:
              i (`int`):
                  Clicks the i'th button (starting from the index 0).
                  Will ``raise IndexError`` if out of bounds. Example:
  
                  >>> message = ...  # get the message somehow
                  >>> # Clicking the 3rd button
                  >>> # [button1] [button2]
                  >>> # [     button3     ]
                  >>> # [button4] [button5]
                  >>> message.click(2)  # index
  
              j (`int`):
                  Clicks the button at position (i, j), these being the
                  indices for the (row, column) respectively. Example:
  
                  >>> # Clicking the 2nd button on the 1st row.
                  >>> # [button1] [button2]
                  >>> # [     button3     ]
                  >>> # [button4] [button5]
                  >>> message.click(0, 1)  # (row, column)
  
                  This is equivalent to ``message.buttons[0][1].click()``.
  
              text (`str` | `callable`):
                  Clicks the first button with the text "text". This may
                  also be a callable, like a ``re.compile(...).match``,
                  and the text will be passed to it.
  
              filter (`callable`):
                  Clicks the first button for which the callable
                  returns ``True``. The callable should accept a single
                  `telethon.tl.custom.messagebutton.MessageButton` argument.
  
              data (`bytes`):
                  This argument overrides the rest and will not search any
                  buttons. Instead, it will directly send the request to
                  behave as if it clicked a button with said data. Note
                  that if the message does not have this data, it will
                  ``raise DataInvalidError``.
          """
          if data:
              if not await self.get_input_chat():
                  return None
  
              try:
                  return await self._client(
                      functions.messages.GetBotCallbackAnswerRequest(
                          peer=self._input_chat,
                          msg_id=self.id,
                          data=data
                      )
                  )
              except errors.BotTimeout:
                  return None
  
          if sum(int(x is not None) for x in (i, text, filter)) >= 2:
              raise ValueError('You can only set either of i, text or filter')
  
          if not await self.get_buttons():
              return  # Accessing the property sets self._buttons[_flat]
  
          if text is not None:
              if callable(text):
                  for button in self._buttons_flat:
                      if text(button.text):
                          return await button.click()
              else:
                  for button in self._buttons_flat:
                      if button.text == text:
                          return await button.click()
              return
  
          if filter is not None:
              for button in self._buttons_flat:
                  if filter(button):
                      return await button.click()
              return
  
          if i is None:
              i = 0
          if j is None:
              return await self._buttons_flat[i].click()
          else:
              return await self._buttons[i][j].click()