docs: def add(self, *args):
          """
          This function adds strings to the keyboard, while not exceeding row_width.
          E.g. ReplyKeyboardMarkup#add("A", "B", "C") yields the json result {keyboard: [["A"], ["B"], ["C"]]}
          when row_width is set to 1.
          When row_width is set to 2, the following is the result of this function: {keyboard: [["A", "B"], ["C"]]}
          See https://core.telegram.org/bots/api#replykeyboardmarkup
          :param args: KeyboardButton to append to the keyboard
          """
          i = 1
          row = []
          for button in args:
              row.append(button.to_dic())
              if i % self.row_width == 0:
                  self.keyboard.append(row)
                  row = []
              i += 1
          if len(row) > 0:
              self.keyboard.append(row)